2016-02-22 13 views
2

我工作的一种产品,其中OpenFileById()失败,ERROR_ACCESS_DENIED上的文件,并在其他方面访问(通过路径具有相同的访问级别/共享模式等指定的文件或文件夹的意思是CreateFile()文件夹成功)。OpenFileById失败并ERROR_ACCESS_DENIED

我正在使用备份语义,所以我也可以得到文件夹的句柄; SE_BACKUP_NAMESE_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); 
} 
+0

您已经引起清楚地解释你的问题,但没有一些代码很难提供帮助。思想张贴一些? – Litty

+0

难道你是在一台不支持id的文件系统上工作吗? – ddbug

+0

这是我的想法,但没有。这里的卷信息: 最大组件长度:255 文件系统名称:NTFS 是读写 支持区分大小写的文件名 保存了文件名 的案例支持Unicode文件名中 果脯及地强制执行A​​CL的 支持基于文件的压缩 支持磁盘配额 支持稀疏文件 支持解析点 支持对象标识符 支持加密文件系统 支持命名流 支持事务 支持硬链接 支持扩展Attribut es **支持通过FileID打开** 支持USN Journal –

回答

1

显然,这是由第三方软件产品的内核组件(不能真正进入细节)