C++ OpenFileById失败,错误为\u访问\u被拒绝

C++ OpenFileById失败,错误为\u访问\u被拒绝,c++,windows,winapi,C++,Windows,Winapi,我正在开发一款产品,OpenFileById()在可访问的文件和文件夹上失败,出现错误\u访问被拒绝(意味着CreateFile()在路径指定的相同文件或文件夹上,访问级别/共享模式相同,等等,成功) 我使用备份语义,这样我也可以处理文件夹SE_备份_名称和SE_恢复_名称权限已启用。除了这台机器(Windows 8.1),此代码在其他任何地方都有效 该进程是作为本地系统下的服务运行的,我尝试让他们将其更改为具有管理员权限的其他帐户,但这也不起作用。有问题的文件/文件夹尚未打开以进行删除(根据文

我正在开发一款产品,
OpenFileById()
在可访问的文件和文件夹上失败,出现
错误\u访问被拒绝
(意味着
CreateFile()
在路径指定的相同文件或文件夹上,访问级别/共享模式相同,等等,成功)

我使用备份语义,这样我也可以处理文件夹<代码>SE_备份_名称和
SE_恢复_名称
权限已启用。除了这台机器(Windows 8.1),此代码在其他任何地方都有效

该进程是作为本地系统下的服务运行的,我尝试让他们将其更改为具有管理员权限的其他帐户,但这也不起作用。有问题的文件/文件夹尚未打开以进行删除(根据文档,这是一种情况,即此功能将失败,出现
错误\u访问\u被拒绝

我没有对这台机器的物理访问权限,因此无法进行内核调试或类似的操作。以前有人碰到过这个吗

简而言之,我想做的是:

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);
}

显然,这是由第三方软件产品的内核组件造成的(无法详细说明)

您已经清楚地解释了您的问题,但是如果没有一些代码,很难提供帮助。介意发布一些吗?可能是您在使用不支持按id打开的文件系统的机器上工作吗?这是我在某个时候的想法,但不是。这是卷信息:最大组件长度:255文件系统名称:NTFS为读写支持区分大小写的文件名保留文件名大小写支持文件名中的Unicode保留和强制ACL支持基于文件的压缩支持磁盘配额支持稀疏文件支持重分析点支持对象标识符支持加密文件系统支持命名流支持事务支持硬链接支持扩展属性支持按文件ID打开支持USN日志