使用空DACL打开文件的Win32 API CreateFile(安全描述符)

时间:2011-08-08 18:18:12

标签: winapi file-permissions dacl

我正在使用CreateFile获取文件的句柄,以将ACE添加到其DACL。 问题是,当文件没有权限时,当我调用函数CreateFile时,我得到访问被拒绝错误,我是文件和管理员的所有者。 如果我使用资源管理器,我可以添加权限。

我对OpenFile或Set安全描述符等其他功能不感兴趣,我对打开这些文件的正确组合感兴趣。

我在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);

我都拒绝访问。 有什么想法吗?

谢谢, 加比

1 个答案:

答案 0 :(得分:0)

这应该有效,因为所有者总是被隐式授予READ_CONTROL和WRITE_DAC,但我在我的机器上验证了相同的行为。出于好奇,我在上面运行了Process Monitor,发现有些奇怪的东西。当Explorer打开文件以读取安全信息时,它将通过NtOpenFile(READ_CONTROL)。当我调用CreateFile()的测试程序打开文件时,它会通过NtCreateFile(READ_CONTROL | SYNCHRONIZE )。显然这会失败,因为没有ACE授予我SYNCHRONIZE访问权限。不过,我不知道这个额外的访问标志来自哪里。我唯一能想到的可能是它与WOW64有关(这是一个在64位计算机上以管理员身份运行的32位测试程序),但我没有足够的动力去进一步研究它。