Informazioni sul modulo
Un modulo è un file eseguibile o una DLL. Ogni processo è costituito da uno o più moduli. È possibile recuperare l'elenco di handle di modulo per un processo chiamando la funzioneEnumProcessModules. Questa funzione riempie una matrice di valori HMODULE con gli handle del modulo per il processo specificato. Il primo modulo è il file eseguibile. Tenere presente che questi handle di modulo sono molto probabilmente di un altro processo, pertanto non è possibile usarli con funzioni come GetModuleFileName. Tuttavia, è possibile usare funzioni PSAPI per ottenere informazioni su un modulo da un altro processo.
La procedura seguente descrive come ottenere informazioni sul modulo da un altro processo.
Per ottenere informazioni sul modulo da un altro processo
- Chiamare la funzionegetModuleBaseName. Questa funzione accetta un handle di processo e un handle di modulo come input e riempie un buffer con il nome di base di un modulo (ad esempio, Kernel32.dll). Una funzione correlata, GetModuleFileNameEx, accetta gli stessi parametri dell'input, ma restituisce il percorso completo del modulo , ad esempio C:\Windows\System32\Kernel32.dll.
- Chiamare la funzioneGetModuleInformation. Questa funzione accetta un handle di processo e un handle di modulo e riempie una struttura MODULEINFO con l'indirizzo di carico del modulo, le dimensioni dello spazio degli indirizzi lineare occupato e un puntatore al relativo punto di ingresso.
Se un'applicazione richiede informazioni sul modulo per il processo corrente, deve usare la funzionegetModuleFileNameanziché le funzioni del modulo PSAPI. Ciò consente alle prestazioni dell'applicazione in due modi: la funzione GetModuleFileName è più efficiente delle funzioni del modulo PSAPI e un'applicazione può evitare il caricamento psapi.dll se non usa funzioni PSAPI.
Le funzioni GetModuleBaseName e GetModuleFileNameEx sono progettate principalmente per l'uso da parte di debugger e applicazioni simili che devono estrarre informazioni sui moduli da un altro processo. Se l'elenco di moduli nel processo di destinazione è danneggiato o non è ancora inizializzato oppure se l'elenco dei moduli cambia durante la chiamata di funzione in seguito al caricamento o all'scarica di DLL, queste funzioni potrebbero non riuscire o restituire informazioni non corrette.