0

我注意到,如果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

4 回答 4

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

比利3

于 2009-05-20T02:47:19.827 回答
2

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

于 2010-01-14T20:49:22.650 回答
2

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

这在 Vista、Windows 7 (UAC) 上有所改变,您必须具有管理员权限才能获取设备句柄。

一些解决方案是:

  1. 使用服务
  2. 使用 COM 提升名字对象
  3. 使用清单

注意:如果您只需要从设备查询统计信息,则不需要管理权限。使用 时,为dwDesiredAccess参数CreateFile()指定零 (0) 。

于 2011-12-21T11:01:42.620 回答
0

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

于 2009-05-20T01:17:00.633 回答