タイトルではうまくまとめられない複雑な質問です。
32 ビットの子プロセス (Bar32) を作成する 64 ビット プロセス (Foo64) があり、Bar32 のバージョンの kernel32.dll のフル パスを取得しようとします。明らかに、Bar32 が C:\Windows\SysWow64\kernel32.dll からロードしたことを期待しています。
Windows 7 では、Foo64 から GetModuleFileNameExA() を呼び出すと、正しく "C:\Windows\SysWow64\Kernel32.dll" が返されます。
Windows Server 2012 では、まったく同じコードで "c:\Windows\system32\kernel32.dll" が返されます。これは 64 ビットの dll の場所です。Bar32 が 64 ビット dll をロードすることは明らかに不可能です。
私の推測では、Server 2012 は、実際にリダイレクトされた場所ではなく、Bar32 がロードしようとした場所を教えてくれているようです。本当の場所を教えてもらうにはどうすればよいですか?
私が誤解している基本的なことはありますか?
関連するすべての MSDN ページと、関連するすべての Google 検索の最初の 3 ページを読みました。