Windows7中的CreateFile错误

时间:2009-05-20 01:09:03

标签: windows-7 createfile system32

我注意到,如果CreateFile函数的路径参数定位\Windows\System32\,则调用失败并显示以下错误代码ERROR_PATH_NOT_FOUND

文件路径是正确的,我是该文件夹的所有者,所以问题是为什么呼叫失败了? MS是否添加了禁止访问该文件夹的特殊策略?

示例代码:

TCHAR szFile[MAX_PATH];
PathCombine(szFile, g_szSystemDirectory, "settings.ini");

HANDLE hFile = CreateFile(szFile,
                          GENERIC_READ,
                          0,
                          NULL,
                          OPEN_EXISTING,
                          0,
                          NULL);

if (hFile == INVALID_HANDLE_VALUE)
{
    printf("INVALID FILE: %i", GetLastError());
    return FALSE;
}

4 个答案:

答案 0 :(得分:2)

  1. 我们能看到一些示例代码吗?
  2. 您是否指定了驱动器,即。 “C:\ Windows \ System32下\”
  3. 您是否尝试在system32中打开文件?
  4. 这仅在Windows 7上发生吗? 和
  5. 为什么你首先需要修改system32中的任何内容?
  6. Billy3

答案 1 :(得分:2)

如果它是在64位操作系统上运行的32位应用程序,则在调用CreateFile之前调用Wow64DisableWow64FsRedirection()将从“C:\ Windows \ System32”而不是“C:\ Windows \ Syswow64”读取,这可能是你发生的事情。

答案 2 :(得分:2)

使用Windows XP,管理员/标准帐户都不需要管理权限来获取设备句柄。

Vista,Windows 7(UAC)上的情况发生了变化,您必须拥有管理员权限才能获取设备句柄。

有些解决方案是:

  1. 使用服务
  2. 使用COM提升名字对象
  3. 使用清单
  4. 注意:如果您只需要从设备查询统计信息,则不需要管理权限。使用CreateFile()时,请为 dwDesiredAccess 参数指定零(0)。

答案 3 :(得分:0)

您的程序可能需要以管理员身份运行。即使您是管理员,也必须升级您的权限。运行程序时右键单击并单击“以管理员身份运行”,或编辑属性并选择始终以管理员身份运行。