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 に答える