- 有这么一个简单需求
- 代码解析
- 总结
- 最后
有这么一个简单需求
有时候,你可能希望判断是否对文件或者文件夹有某种权限,但是又不想实际操作,只是简单的判断而已。举个例子,你可能向快速地知道是否对某个文件夹是否有删除里面文件的权限。
一种方法是:获取该对象的ACL,然后检查是否当前用户拥有希望的权限。有一个API AccessCheck可以做这件事情,调用起来也比较简单。
这个时候,可能你会想:”等会,系统里应该有一个完整的安全组件,来判断谁可以访问哪个文件。为什么不使用这个安全组件的功能呢?”
举个例子:下面的代码演示了如何检查某个用户是否具有删除一个文件夹里的文件的权限。
代码解析
我们通过调用CreateFile这个API来尝试性地打开目标文件夹(你可以观察到,我们代码中指定了一个
FILE_FLAG_BACKUP_SEMANTICS标志),然后请求FILE_DELETE_CHILD操作权限,如果操作成功,我们就能知道:当前用户有权限删除文件夹中的文件。
再一个需要注意的是:当CreateFile返回一个有效句柄后,我们不要忘记关闭这个句柄,以避免资源泄露。
最后,我们对CreateFile的返回值进行了比较,如果返回值有效,则说明我们具有我们希望的权限。
请注意,上述得到的信息,只是用来作为参考的。所以,请不要基于这个信息来做出任何安全方面的操作,为什么?因为权限会实时变动,可能在你实际进行操作的时候,权限已经不再是你之前获取到的权限了。
总结
我突然想起WinXP那会儿,人人都是Administrator的魔幻时代。
有道是:不是Admin不舒服斯基。
最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《An easy way to determine whether you have a particular file permission》