使用Module32First/Next从64位进程中枚举32位进程模块

Using Module32First/Next to Enumerate 32bit Process Modules from 64bit Process

本文关键字:进程 枚举 32位 模块 64位 Module32First Next 使用      更新时间:2023-10-16

以下是代码:

 hModuleSnap = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE32, dwPID ); 
  if( hModuleSnap == INVALID_HANDLE_VALUE ) 
  { 
    return( r_mi ); 
  } 

  me32.dwSize = sizeof( MODULEENTRY32 ); 
  if( !Module32First( hModuleSnap, &me32 ) ) 
  { 
    CloseHandle( hModuleSnap );
    return( r_mi ); 
  } 
  do 
  { 
      MessageBoxA(0,me32.szModule,0,0);
  } while( Module32Next( hModuleSnap, &me32 ) );

问题是,当尝试从64位进程枚举32位进程的模块时,只列出x64模块。

来自MSDN的TH32CS_SNAPMODULE32:从64位进程调用时,包括快照中th32ProcessID中指定的进程的所有32位模块。

但是,它仍然只列出x64模块

有人知道这方面的变通办法吗?

您必须使用TH32CS_SNAPMODULE32|TH32CS_StNAPMODULE感谢Hans Passant解决了这个问题。