我正在开发一个库,用于从可移植可执行格式的文件中获取信息。
对我来说重要的是该库可以在 32 位和 64 位模式下运行。
在测试过程中,我使用了硬路径,例如:L"C:\Windows\System32 toskrnl.exe”来显示导出函数的列表。
在 Windows 10 中,我发现在管理员模式下,我的 32 位应用程序在尝试打开现有文件时返回错误代码 2 (ERROR_FILE_NOT_FOUND),而 64 位应用程序成功打开该文件。
在另一台计算机上的 Windows 7 中,两个应用程序均成功打开此文件。
此外,我发现Windows 10上的许多应用程序,特别是Total Commander、winhex、x32dbg、ollydbg,在System32文件夹中看不到很多文件。
我可以通过在文件系统中跳转来从磁盘读取它们,有没有更简单的方法?
Mark Rotteveel 提到,Windows 64 (WOW64) 上的 Windows 对某些文件系统(例如 C:\Windows\System32、C:\Program Files)目录和注册表项(例如 HKLM\Software、HKCU\Software)执行自动重定向适用于在 64 位系统上运行的 32 位程序。
可以通过调用 Wow64DisableWow64FsRedirection 关闭文件系统重定向,然后使用 Wow64RevertWow64FsRedirection
重新启用对于注册表,RegOpenKeyEx 函数中有一个标志 (KEY_WOW64_32KEY),用于查看注册表的 32 位视图。