私の質問を説明する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 で動作が異なるのはなぜですか?