0

我想检查某个 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?

4

2 回答 2

1

以与使用 Process32First/Next 相同的方式使用 Module32First/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;
}
于 2013-07-13T22:21:33.817 回答
0

使用Module32First / Module32Next遍历流程快照中的所有模块。MSDN 上有一个详细的示例。

于 2013-07-13T22:19:02.417 回答