如何从64位应用程序中枚举32位进程的模块

时间:2011-09-20 12:37:19

标签: .net winapi dll c#-2.0

我有代码:

        foreach (var process in Process.GetProcesses()) {
            if (process.ProcessName.ToLowerInvariant().StartsWith("iexplore")) {

                foreach (ProcessModule module in process.Modules) {
                    string descr = module.FileVersionInfo.FileDescription;
                    MessageBox.Show(module.FileName);
                }
            }
        }

我的应用程序设置为“任何CPU”配置,因此它应该在我的Win7 x64上以64位进程运行。我试图枚举iexplore.exe的模块(32位版本)。我的问题是如何从64位应用程序中枚举32位应用程序的模块?它只返回魔兽世界。

1 个答案:

答案 0 :(得分:1)

我的申请中遇到同样的问题,虽然我觉得你倒退了(见可以评论你的问题)。

实际上,如果您自己的进程是64位进程,则无法在64位Windows上枚举32位进程的模块。

您只会看到以下模块(32位进程中唯一的64位模块):

  • 主要模块(即可执行文件)
  • NTDLL.DLL
  • Wow64.dll
  • Wow64cpu.dll
  • Wow64win.dll

最有可能的原因是Process.Modules内部使用EnumProcessModules Win32 API,这在使用32/64位时有局限性。 MSDN建议(对于本机应用程序)使用EnumProcessModulesEx,您也可以使用P / Invoke。

looks like others也发现了这个问题。