Funzione EnumProcessModules (psapi.h)
Recupera un handle per ogni modulo nel processo specificato.
Per controllare se un'applicazione a 64 bit enumera moduli a 32 bit, moduli a 64 bit o entrambi i tipi di moduli, usare la funzione EnumProcessModulesEx .
Sintassi
BOOL EnumProcessModules(
[in] HANDLE hProcess,
[out] HMODULE *lphModule,
[in] DWORD cb,
[out] LPDWORD lpcbNeeded
);
Parametri
[in] hProcess
Handle per il processo.
[out] lphModule
Matrice che riceve l'elenco di handle del modulo.
[in] cb
Dimensioni della matrice lphModule , in byte.
[out] lpcbNeeded
Numero di byte necessari per archiviare tutti gli handle del modulo nella matrice lphModule .
Valore restituito
Se la funzione ha esito positivo, il valore restituito è diverso da zero.
Se la funzione ha esito negativo, il valore restituito è zero. Per informazioni dettagliate sull'errore, chiamare GetLastError.
Commenti
La funzione EnumProcessModules è principalmente progettata per l'uso da parte di debugger e applicazioni simili che devono estrarre le 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 alla funzione in seguito al caricamento o all'annullamento del caricamento delle DLL, EnumProcessModules potrebbe non riuscire o restituire informazioni non corrette.
È consigliabile specificare una matrice di valori HMODULE di grandi dimensioni, perché è difficile stimare il numero di moduli presenti nel processo al momento in cui si chiama EnumProcessModules. Per determinare se la matrice lphModule è troppo piccola per contenere tutti gli handle del modulo per il processo, confrontare il valore restituito in lpcbNeed con il valore specificato in cb. Se lpcbNeeded è maggiore di cb, aumentare le dimensioni della matrice e chiamare nuovamente EnumProcessModules .
Per determinare il numero di moduli enumerati dalla chiamata a EnumProcessModules, dividere il valore risultante nel parametro lpcbNeeded by sizeof(HMODULE)
.
La funzione EnumProcessModules non recupera handle per i moduli caricati con i flag LOAD_LIBRARY_AS_DATAFILE o simili. Per altre informazioni, vedere LoadLibraryEx.
Non chiamare CloseHandle in uno degli handle restituiti da questa funzione. Le informazioni provengono da uno snapshot, quindi non ci sono risorse da liberare.
Se questa funzione viene chiamata da un'applicazione a 32 bit in esecuzione in WOW64, può enumerare solo i moduli di un processo a 32 bit. Se il processo è un processo a 64 bit, questa funzione ha esito negativo e l'ultimo codice di errore è ERROR_PARTIAL_COPY (299).
Per acquisire uno snapshot dei processi specificati e degli heaps, dei moduli e dei thread usati da questi processi, usare la funzione CreateToolhelp32Snapshot .
A partire da Windows 7 e Windows Server 2008 R2, Psapi.h stabilisce i numeri di versione per le funzioni PSAPI. Il numero di versione PSAPI influisce sul nome usato per chiamare la funzione e la libreria che un programma deve caricare.
Se PSAPI_VERSION è 2 o successiva, questa funzione viene definita come K32EnumProcessModules in Psapi.h ed esportata in Kernel32.lib e Kernel32.dll. Se PSAPI_VERSION è 1, questa funzione viene definita come EnumProcessModules in Psapi.h ed esportata in Psapi.lib e Psapi.dll come wrapper che chiama K32EnumProcessModules.
I programmi che devono essere eseguiti nelle versioni precedenti di Windows e windows 7 e versioni successive devono sempre chiamare questa funzione come EnumProcessModules. Per garantire la risoluzione corretta dei simboli, aggiungere Psapi.lib alla macro TARGETLIBS e compilare il programma con -DPSAPI_VERSION=1. Per usare il collegamento dinamico in fase di esecuzione, caricare Psapi.dll.
Esempio
Per un esempio, vedere Enumerazione di tutti i processi o enumerazione di tutti i moduli per un processo.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows XP [solo app desktop] |
Server minimo supportato | Windows Server 2003 [solo app desktop] |
Piattaforma di destinazione | Windows |
Intestazione | psapi.h |
Libreria | Kernel32.lib in Windows 7 e Windows Server 2008 R2; Psapi.lib (se PSAPI_VERSION=1) in Windows 7 e Windows Server 2008 R2; Psapi.lib in Windows Server 2008, Windows Vista, Windows Server 2003 e Windows XP |
DLL | Kernel32.dll in Windows 7 e Windows Server 2008 R2; Psapi.dll (se PSAPI_VERSION=1) in Windows 7 e Windows Server 2008 R2; Psapi.dll in Windows Server 2008, Windows Vista, Windows Server 2003 e Windows XP |