各プロセスの情報を取得する32bitアプリケーションを作成していて、EnumProcessModules関数が失敗するという症状に遭遇しました。
対象が64bitプロセスだとこのようになるようで、プロセスハンドルの取得には成功するものの、という感じです。
逆に64bitプロセスからは32bitアプリケーションの情報を取得することが出来るようになっています。
そのため64bitのアプリケーションとして作成することに変更しました。
このとき、64bitアプリケーションから 32bitアプリケーションに対して EnumProcessModules 関数を実行するとこのようになります。
isWow64=ON(x86) + 0000000000400000 D:\tools\stir131\Stirling.exe + 0000000076D20000 C:\Windows\SYSTEM32\ntdll.dll + 0000000074580000 C:\Windows\SYSTEM32\wow64.dll + 0000000074520000 C:\Windows\SYSTEM32\wow64win.dll + 0000000074510000 C:\Windows\SYSTEM32\wow64cpu.dll
確かに情報がとれるのですが、少々期待したものと違います。
対象のアプリケーションがロードしている32bitのDLLのリストを取得するには、EnumProcessModulesEx 関数を使用する必要があります。
この関数で LIST_MODULES_32BIT のフラグとともに情報を取得すると下記のように期待するリストを取得することが出来ます。(ただし一部抜粋)
+ 0000000000400000 D:\tools\stir131\Stirling.exe + 0000000076F00000 C:\Windows\SysWOW64\ntdll.dll + 0000000076330000 C:\Windows\syswow64\kernel32.dll + 0000000076110000 C:\Windows\syswow64\KERNELBASE.dll + 0000000076440000 C:\Windows\syswow64\IMM32.dll + 0000000076200000 C:\Windows\syswow64\USER32.dll + 0000000075C30000 C:\Windows\syswow64\GDI32.dll + 00000000758E0000 C:\Windows\syswow64\LPK.dll + 0000000074640000 C:\Windows\syswow64\USP10.dll + 0000000076020000 C:\Windows\syswow64\msvcrt.dll + 0000000076160000 C:\Windows\syswow64\ADVAPI32.dll + 0000000075530000 C:\Windows\SysWOW64\sechost.dll + 0000000075940000 C:\Windows\syswow64\RPCRT4.dll + 00000000745E0000 C:\Windows\syswow64\SspiCli.dll + 00000000745D0000 C:\Windows\syswow64\CRYPTBASE.dll + 00000000746F0000 C:\Windows\syswow64\MSCTF.dll + 00000000764A0000 C:\Windows\syswow64\comdlg32.dll + 0000000075BD0000 C:\Windows\syswow64\SHLWAPI.dll + 00000000747C0000 C:\Windows\syswow64\SHELL32.dll + 00000000744A0000 C:\Windows\system32\WINSPOOL.DRV + 0000000071440000 C:\Windows\system32\uxtheme.dll + 00000000716E0000 C:\Windows\system32\apphelp.dll + 000000006AC00000 C:\Windows\system32\ATOK24W.IME + 0000000075550000 C:\Windows\syswow64\ole32.dll + 0000000076520000 C:\Windows\syswow64\OLEAUT32.dll + 000000006BE60000 C:\Windows\system32\MSIMG32.dll + 00000000710B0000 C:\Windows\system32\dwmapi.dll