有没有办法判断Windows目录是否可写而没有实际写入它进行测试?

Cla*_*ols 1 windows vb6 file-io

我有一些旧的vb6代码,通过WRITING检查Windows目录是否可写,然后读回一个值.

但是......我们有一个病毒扫描程序,将其视为可疑行为,所以我想检查它而不接触它.

任何Windows API都要求它?(理想情况下适用于Win 98及以上版本)

Joe*_*orn 5

这里需要记住的是文件系统是不稳定的.关于我可以看到使用此代码的唯一方法是首先检查文件夹是否可写,然后尝试编写您想要编写的内容.这里的问题是,对于易失性文件系统,在您进行检查和尝试编写之间可能会发生变化.因此,如果写入失败,您仍然必须能够处理异常.这意味着初步检查几乎浪费了.最好将您的精力放在编写更好的异常处理程序上.

此外,对于Windows 2000及更高版本,如果用户以管理员身份运行,则Windows应该只能是可写的.作为管理员运行很长一段时间是常见的做法,但人们开始明白这不是一个好主意.从长远来看,你的程序做任何需要以这种方式运行的事情都不是一个好主意.

事实上,从Windows Vista开始,即使登录管理员帐户,用户也不会默认以管理员身份运行任何内容.相反,他们必须手动选择以管理员身份运行程序或等待安全检查以使系统失败,提示他们提升.


Jos*_*osh 5

如果您有 VB6 代码,您应该花时间修复它,以便它根本不需要写入 Windows 目录,因为无论您是否是管理员 - 除非您在 Microsoft 工作,否则您应该考虑该目录禁区。

但是,您应该考虑到,在 Windows 98 上,用户始终可以写入 Windows 目录。在 Windows XP 上,本地管理员会这样做。在 Windows Vista 和 7 上,除非您的应用程序已被提升,否则即使是管理员也不会。

因此,您可以使用CheckTokenMembership检查用户是否属于内置角色 BUILTIN\Administrators 。对于非管理员或非高级进程,这将是错误的。它不保证您可以写入 Windows 目录,但大多数情况下它是正确的。然后,您可以在调用实际失败时添加错误处理逻辑。

但同样,您应该借此机会修复代码,而不是使用 Windows 目录。