我有以下用x86配置编译的最小应用程序来说明我的问题:
int _tmain(int argc, _TCHAR* argv[])
{
LPVOID oldValue = NULL;
BOOL result = ::Wow64DisableWow64FsRedirection(&oldValue);
_ASSERTE(result);
HMODULE moduleHandle = ::LoadLibrary(L".\\mymodule.dll");
if (moduleHandle != NULL)
{
std::wcout << L"Succeeded";
}
else
{
DWORD errorCode = ::GetLastError();
std::wcout << L"Failed with error code = " << errorCode;
}
return 0;
}
mymodule.dll是依赖于iphlpapi.dll的x86动态库映像。
当我在Windows 2003 R2 x64 SP2下运行此程序时,我得到输出“Failed with error code = 193”(193是ERROR_BAD_EXE_FORMAT)和系统消息框,其中包含未找到iphlpapi.dll的消息。 Process Monitor显示在System32文件夹下搜索了iphlpapi.dll。
当我在Windows 7 x64 SP1下运行相同的可执行文件(和mymodule.dll也相同)时,我得到输出“Succeeded”,进程监视器显示iphlpapi.dll在SysWOW64下搜索并成功找到。
为什么这两个x64操作系统的行为有所不同?