我使用CreateFile来获取文件的句柄,以便将ACE添加到其DACL。问题是,当文件没有权限时,当我调用CreateFile函数时,我得到访问拒绝错误,我是文件和管理员的所有者。如果我使用资源管理器,我可以添加权限。
我对其他函数不感兴趣,比如OpenFile或Set security descriptor,我对打开这些文件的正确组合感兴趣。
我在MSDN中读到我必须使用特定访问权限,我试过了:
CreateFile(lpFileName, READ_CONTROL | WRITE_DAC,0, null, open_existing,FILE_FLAG_BACKUP_SEMANTICS);
CreateFile(lpFileName, READ_CONTROL | WRITE_DAC,0, null, open_existing,ACCESS_SYSTEM_SEURITY);
两个I都被拒绝访问。什么好主意吗?
谢谢,加比
这应该可以工作,因为所有者总是隐式地授予READ_CONTROL和WRITE_DAC,但我在我的机器上验证了相同的行为。出于好奇,我在它上面运行了进程监视器,发现了一些奇怪的东西。当资源管理器打开文件以读取安全信息时,它将通过NtOpenFile(READ_CONTROL)。当我的测试程序调用CreateFile()打开文件时,它会通过NtCreateFile(READ_CONTROL | SYNCHRONIZE)。显然,这将失败,因为没有ace授予我同步访问权限。不过,我不知道这个额外的访问标志是从哪里来的。我唯一能想到的是它可能与WOW64有关(这是一个在64位机器上以管理员身份运行的32位测试程序),但我没有足够的动力进一步研究它。