dll是否存在于进程c ++中

时间:2013-07-13 22:11:57

标签: dll process

我想检查特定进程中是否存在某个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?

2 个答案:

答案 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