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 moduli per un processo chiamando la funzione EnumProcessModules . 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 più probabile da un altro processo, quindi non è possibile usarli con funzioni come GetModuleFileName. È tuttavia possibile usare le 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 funzione GetModuleBaseName . 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 funzione GetModuleInformation . 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 punto di ingresso.
Se un'applicazione richiede informazioni sul modulo per il processo corrente, deve usare la funzione GetModuleFileName anziché le funzioni del modulo PSAPI. Ciò consente le prestazioni dell'applicazione in due modi: la funzione GetModuleFileName è più efficiente rispetto alle funzioni del modulo PSAPI e un'applicazione può evitare il caricamento psapi.dll se non usa funzioni PSAPI.
Le funzioni GetModuleBaseName e GetModuleFileNameEx sono principalmente progettate 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 stato inizializzato oppure se l'elenco dei moduli cambia durante la chiamata alla funzione in seguito al caricamento o all'annullamento del caricamento delle DLL, queste funzioni potrebbero non riuscire o restituire informazioni non corrette.