我想检查特定进程中是否存在某个DLL,例如:explorer.exe中存在user32.dll,我使用此代码获取进程PID:
DWORD GetProcId(char* ProcName)
{
PROCESSENTRY32 pe32;
HANDLE hSnapshot = NULL;
pe32.dwSize = sizeof( PROCESSENTRY32 );
hSnapshot = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
if( Process32First( hSnapshot, &pe32 ) )
{
do{
if( strcmp( pe32.szExeFile, ProcName ) == 0 )
break;
}while( Process32Next( hSnapshot, &pe32 ) );
}
if( hSnapshot != INVALID_HANDLE_VALUE )
CloseHandle( hSnapshot );
DWORD ProcId = pe32.th32ProcessID;
return ProcId;
}
我可以使用什么来检查此PID中是否存在dll?
答案 0 :(得分:1)
使用Module32First / Next,与使用Process32First / Next
的方式相同bool IsModulePresent(unsigned long procid,char* moduleName)
{
HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,procid);
MODULEENTRY32 pModule;
pModule.dwSize = sizeof(MODULEENTRY32);
Module32First(hSnapShot,&pModule);
do {
if( !strcmp(pModule.szModule,moduleName) )
return true;
}while(Module32Next(hSnapShot,&pModule));
return false;
}
答案 1 :(得分:0)
使用Module32First / Module32Next遍历流程快照中的所有模块。有detailed example at MSDN。