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 でこのプログラムを実行すると、「Failed with error code = 193」(193 は ERROR_BAD_EXE_FORMAT) という出力が表示され、システム メッセージ ボックスに iphlpapi.dll が見つからないというメッセージが表示されます。Process Monitor は、iphlpapi.dll が System32 フォルダーの下で検索されたことを示しています。

Windows 7 x64 SP1 で同じ実行可能ファイル (および mymodule.dll も同じ) を実行すると、出力 "Succeeded" が表示され、Process Monitor は iphlpapi.dll が SysWOW64 で検索され、正常に見つかったことを示します。

これら 2 つの x64 OS で動作が異なるのはなぜですか?

4

0 に答える 0