gpt4 book ai didi

windows - 为什么我不能使用 FILE_FLAG_BACKUP_SEMANTICS 打开 GENERIC_ALL 或 FILE_ALL_ACCESS 文件?

转载 作者:可可西里 更新时间:2023-11-01 10:35:48 25 4
gpt4 key购买 nike

我正在尝试使用 FILE_FLAG_BACKUP_SEMANTICS 来绕过文件权限,但如果我请求 GENERIC_ALL 或等效的 FILE_ALL_ACCESS 它就不起作用作为访问掩码。 CreateFile 函数返回 ERROR_ACCESS_DENIED

例如,

h = CreateFile(L"c:\\working\\backup-semantics-test\\xyzzy\\test.txt", 
FILE_ALL_ACCESS,
FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_SHARE_DELETE, 0,
OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);

备份和恢复权限已启用。 (显然,如果我对相关文件有完全权限,它就可以工作;这个问题是关于我没有权限但有备份和恢复权限的情况。)

出了什么问题,我该怎么办?

最佳答案

您无法通过 FILE_FLAG_BACKUP_SEMANTICS 获得 FILE_DELETE_CHILD 访问权限。这似乎是一个特例,尽管尚不清楚这是否是故意的。 (在 Windows 7 SP1 x64 中测试。)

您可以通过备份语义获得所有其他访问权限,包括DELETE,因此无需获得FILE_DELETE_CHILD。只需将其从请求中排除:

h = CreateFile(L"c:\\working\\backup-semantics-test\\xyzzy\\test.txt", 
FILE_ALL_ACCESS & ~FILE_DELETE_CHILD,
FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_SHARE_DELETE, 0,
OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);

如果可能,只请求您实际需要的那些权限。就我而言,我打算调用 SetFileShortName ,因此我将访问掩码设置为 GENERIC_WRITE|DELETE,如文档所述。

另一个选项是 MAXIMUM_ALLOWED 但我不建议使用此选项,除非在故障排除期间,因为这意味着您可能无法获得您期望的访问权限。通常最好在打开文件后立即发现问题,而不是等到您尝试对其执行某些操作时才发现问题。

关于windows - 为什么我不能使用 FILE_FLAG_BACKUP_SEMANTICS 打开 GENERIC_ALL 或 FILE_ALL_ACCESS 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27496612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com