如何检查是否可以在MS XP / Vista的给定目录内创建文件?


问题内容

我有一个代码,可以在用户指定的目录中创建文件。用户可以指向无法创建文件的目录,但是可以重命名该目录。

我已经创建了用于测试目的的目录,我们称之为C:\foo

我具有以下权限C:\foo

  • 遍历目录/执行文件
  • 删除子文件夹和文件
  • 拆下
  • 读取权限
  • 变更权限
  • 取得所有权

我没有以下任何权限C:\foo

  • 完全控制
  • 文件创建
  • 资料夹建立

到目前为止,我已经尝试了以下方法:

os.access('C:\foo', os.W_OK) == True

st = os.stat(’C:\ foo’)
mode = st [stat.ST_MODE]
模式和stat.S_IWRITE == True

我相信这是因为我可以重命名文件夹,所以它对我来说是可变的。但它的内容-不。

有谁知道如果当前用户有权在该目录中创建文件,我该如何编写代码来检查给定目录?

简而言之-我想检查当前用户是否具有给定文件夹名称的 文件创建文件夹创建 权限。

编辑:对此类代码的需求来自“ Windows Vista认证”程序的第3个测试用例,其中指出:

  1. 该应用程序必须不允许最低特权用户将任何文件保存到Windows系统目录中,以通过此测试用例。

应该将其理解为“应​​用程序可以尝试将文件保存在Windows系统目录中,但是在发生故障时不应该崩溃吗?”
还是“应用程序必须在尝试保存文件之前执行安全性检查?”

我是否应该仅因为Windows Vista本身不允许最低权限的用户将任何文件保存在%WINDIR%中就停止打扰?


问题答案:

我最近写了一个应用程序,通过了一组测试来从Microsoft获得ISV状态,并且我还添加了该条件。我的理解是,如果用户是Least
Priveledge,那么他将没有权限写入系统文件夹。因此,我按照Ishmaeel的描述解决了这个问题。我尝试创建文件并捕获异常,然后通知用户他无权将文件写入该目录。

以我的理解,特权最低的用户将没有必要的权限来写入这些文件夹,如果他拥有,那么他不是特权最低的用户。

我是否应该仅因为Windows Vista本身不允许最低权限的用户将任何文件保存在%WINDIR%中就停止打扰?

在我看来?是。