You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows 10下32位应用无法访问System32部分文件的解决方案咨询

Windows 10下32位应用无法访问System32部分文件的解决方案咨询

你遇到的这个问题本质是Windows 10的WOW64(Windows-on-Windows 64-bit)文件系统重定向机制在起作用,这是微软为了兼容32位程序在64位系统运行设计的特性,但确实会给开发跨位程序的开发者带来困扰。

问题根源

当32位程序尝试访问C:\Windows\System32时,系统会自动将请求重定向到C:\Windows\SysWOW64——这个文件夹存储的是供32位程序使用的系统文件,而你要读取的ntoskrnl.exe这类原生64位系统文件只存在于真正的System32目录中,所以32位程序直接访问就会触发ERROR_FILE_NOT_FOUND(错误码2)。Windows 7的WOW64重定向逻辑和Win10不同,因此在Win7上32位程序能正常访问这些文件。你提到的Total Commander、x32dbg等32位工具看不到System32里的部分文件,也是同样的原因:它们实际访问的是SysWOW64目录。

可行的解决方案

这里给你几个适配32/64位环境的解决方法:

  • 使用Sysnative虚拟路径
    64位系统给32位程序提供了一个特殊的虚拟路径C:\Windows\Sysnative,用它代替System32就能绕过重定向,直接访问真正的64位系统文件目录。比如把你的测试路径改成L"C:\\Windows\\Sysnative\\ntoskrnl.exe",32位程序就能正常打开目标文件;而64位程序访问Sysnative时会自动映射到System32,不会影响功能。

  • 临时禁用文件系统重定向
    如果需要在代码里灵活控制重定向状态,可以调用Windows API临时关闭重定向,操作完成后再恢复。示例代码如下:

    PVOID oldRedirectionState = NULL;
    // 禁用WOW64文件系统重定向
    if (Wow64DisableWow64FsRedirection(&oldRedirectionState)) {
        // 执行文件操作,比如打开目标PE文件
        HANDLE hFile = CreateFile(
            L"C:\\Windows\\System32\\ntoskrnl.exe",
            GENERIC_READ,
            FILE_SHARE_READ,
            NULL,
            OPEN_EXISTING,
            FILE_ATTRIBUTE_NORMAL,
            NULL
        );
        // 这里添加你的文件读取、解析逻辑
        
        // 恢复重定向,避免影响程序其他部分的行为
        Wow64RevertWow64FsRedirection(oldRedirectionState);
    }
    

    注意:这个API只对32位程序生效,64位程序调用不会有任何变化,所以可以安全地加入你的跨位兼容代码中。

  • 针对64位环境编译对应版本
    既然你的库目标是支持32和64位模式,那么在64位系统上直接运行64位版本的程序,就不会触发文件系统重定向,能直接访问System32目录。这可以作为64位环境下的最优解,配合前面的方法覆盖32位场景。

备注:内容来源于stack exchange,提问作者Ofdrykkja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 12:43:11