1

我有以下使用 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 下运行此程序时,我得到输出“失败,错误代码 = 193”(193 是 ERROR_BAD_EXE_FORMAT)和系统消息框,其中显示找不到 iphlpapi.dll 的消息。Process Monitor 显示在 System32 文件夹下搜索到 iphlpapi.dll。

当我在 Windows 7 x64 SP1 下运行相同的可执行文件(mymodule.dll 也相同)时,我得到输出“Succeeded”,并且进程监视器显示 iphlpapi.dll 在 SysWOW64 下被搜索并成功找到。

为什么这两个 x64 操作系统的行为不同?

4

0 回答 0