2
我工作的一种产品,其中OpenFileById()
失败,ERROR_ACCESS_DENIED
上的文件,并在其他方面访问(通过路径具有相同的访问级别/共享模式等指定的文件或文件夹的意思是CreateFile()
文件夹成功)。OpenFileById失败并ERROR_ACCESS_DENIED
我正在使用备份语义,所以我也可以得到文件夹的句柄; SE_BACKUP_NAME
和SE_RESTORE_NAME
权限已启用。除了这台机器(Windows 8.1)之外,此代码可以在其他任何地方使用。
该进程在本地系统下作为服务运行,我试图让他们将其更改为具有管理权限的不同帐户,但这也不起作用。有问题的文件/文件夹尚未打开删除(这是根据文档,此功能将失败,ERROR_ACCESS_DENIED
)的一种情况。
我没有物理访问这台机器,所以不能内核调试或类似的东西。有没有人遇到过这个?
这里就是我想概括地说要做:
hRoot = ::CreateFileA(szRootPath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
if (hRoot != INVALID_HANDLE_VALUE)
{
FILE_ID_DESCRIPTOR fileId;
fileId.dwSize = sizeof(fileId);
fileId.Type = FileIdType;
fileId.FileId.QuadPart = nId;
hFile = ::OpenFileById(hRoot, &fileId, SYNCHRONIZE | FILE_READ_ATTRIBUTES, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, FILE_FLAG_BACKUP_SEMANTICS);
if (hFile != INVALID_HANDLE_VALUE)
{
...
::CloseHandle(hFile);
}
::CloseHandle(hRoot);
}
您已经引起清楚地解释你的问题,但没有一些代码很难提供帮助。思想张贴一些? – Litty
难道你是在一台不支持id的文件系统上工作吗? – ddbug
这是我的想法,但没有。这里的卷信息: 最大组件长度:255 文件系统名称:NTFS 是读写 支持区分大小写的文件名 保存了文件名 的案例支持Unicode文件名中 果脯及地强制执行ACL的 支持基于文件的压缩 支持磁盘配额 支持稀疏文件 支持解析点 支持对象标识符 支持加密文件系统 支持命名流 支持事务 支持硬链接 支持扩展Attribut es **支持通过FileID打开** 支持USN Journal –