void ShowProcessModules(HWND hwnd, DWORD PId)
{
SYSTEM_INFO si;
memset(&si, 0, sizeof(si));
GetSystemInfo( &si );
if( PId == 0)
PId = GetCurrentProcessId();
DWORD LowAddr, HighAddr;
LowAddr = (DWORD)si.lpMinimumApplicationAddress;
HighAddr = (DWORD)si.lpMaximumApplicationAddress;
HANDLE hdl = OpenProcess( PROCESS_QUERY_INFORMATION |PROCESS_VM_READ,
FALSE, PId );
if (hdl == NULL)
return;
char mapfilename[MAX_PATH] = "unknown";
char tempname[MAX_PATH];
DWORD nSize = sizeof(mapfilename);
DWORD MapAddr, MapAddrto = 0;
for (MapAddr = LowAddr; MapAddr < HighAddr; MapAddr += si.dwAllocationGranularity)
{
GetMappedFileName( hdl, (LPVOID)MapAddr,mapfilename, nSize );
if(MapAddr < MapAddrto)
continue;
if(strlen(mapfilename) == 0)
continue;
for(MapAddrto = MapAddr; ; MapAddrto += si.dwPageSize)
{GetMappedFileName( hdl, (LPVOID)MapAddrto,tempname, nSize );
if(strcmp(tempname, mapfilename) == 0)
continue;
else
break;
}
wsprintf(tempname, "0x%p-0x%p: %s",MapAddr, MapAddrto, mapfilename);
SendMessage(GetDlgItem(hwnd,IDC_LIST1),LB_ADDSTRING,0,(LPARAM)tempname);
}
CloseHandle( hdl );
return;
}