【问题标题】:CreateFile error in Windows7Windows7 中的 CreateFile 错误
【发布时间】:2009-05-20 01:09:02
【问题描述】:

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

【问题讨论】:

    标签: windows-7 createfile system32


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

    比利3

    【讨论】:

    • 1) 我马上补充。 2) 是的。 3) 是的。 4) 是的,在 XP 下工作正常。 5) 需要加载配置文件。
    • 为什么配置文件在system32?你不应该把它放在 %appdata% 中吗?
    • 是的,它是 64 位的。这是一个遗留应用程序,所以我不知道 :)
    • WOW 不是将调用重定向到 system32,而是重定向到 syswow64。请参阅en.wikipedia.org/wiki/WOW64#Registry_and_file_system 那么您对该文件夹有权限吗?您要查找的文件是否在该文件夹中?因为这就是 x64 上实际调用的地方。
    • 问题是您的 32 位应用程序看不到 C:\Windows\System32 文件夹。为了兼容性,64 位窗口上的所有 32 位应用程序在请求 system32 中的文件时,会自动重定向到 C:\Windows\Syswow64。如果您将配置文件放在 syswow64 中,但在 system32 中请求它,它将正确打开。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      一些解决方案是:

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2011-09-04
          • 1970-01-01
          • 1970-01-01
          • 2019-09-15
          • 2012-03-29
          • 2011-05-25
          • 2013-01-03
          • 2015-05-12
          • 2017-12-07
          相关资源
          最近更新 更多