- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试使用 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/
我正在尝试获取 directory handle为了检索目录的标识符。文档(上面链接)指定需要将 FILE_FLAG_BACKUP_SEMANTICS 标志传递给 CreateFile 函数以检索句柄
我也在尝试使用 FILE_FLAG_BACKUP_SEMANTICS 后更改目录的时间戳。我的代码片段如下 int SetDirectoryTime(char *Path) {
如何为 fstream 对象设置标志 FILE_FLAG_BACKUP_SEMANTICS? 您可以使用 fstream 设置大多数标志,但似乎这个不可用。您可以阅读有关标志 here 的信息. 最佳
我正在尝试使用 FILE_FLAG_BACKUP_SEMANTICS 来绕过文件权限,但如果我请求 GENERIC_ALL 或等效的 FILE_ALL_ACCESS 它就不起作用作为访问掩码。 Cre
我是一名优秀的程序员,十分优秀!