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

进程c+中是否存在dll+;,dll,process,Dll,Process,我想检查某个进程中是否存在某个DLL,例如:explorer.exe中是否存在user32.DLL,我使用以下代码获取进程PID: DWORD GetProcId(char* ProcName) { PROCESSENTRY32 pe32; HANDLE hSnapshot = NULL; pe32.dwSize = sizeof( PROCESSENTRY32 ); hSnapshot = CreateToolhelp32Snapshot( TH32CS_SNAPPROC

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

使用/浏览流程快照中的所有模块。有一个。

使用模块32 first/Next的方法与使用process32 first/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;
}

为什么要检查进程是否加载了特定的DLL?让进程不受干扰地加载其DLL。我想向进程注入DLL,我不想让注入器注入我的DLL。如果它已经存在,这更像是一个安全过程,而不是一个必要的过程。为什么要注入DLL?你正在进入一个不受支持的领域。这是一个逆向工程过程的一部分。好吧,我们知道你所做的是完全不受支持的。不要装运这样的产品。