Fonction EnumProcessModules (psapi.h)
Récupère un handle pour chaque module dans le processus spécifié.
Pour contrôler si une application 64 bits énumère des modules 32 bits, des modules 64 bits ou les deux types de modules, utilisez la fonction EnumProcessModulesEx .
Syntaxe
BOOL EnumProcessModules(
[in] HANDLE hProcess,
[out] HMODULE *lphModule,
[in] DWORD cb,
[out] LPDWORD lpcbNeeded
);
Paramètres
[in] hProcess
Handle du processus.
[out] lphModule
Tableau qui reçoit la liste des descripteurs de module.
[in] cb
Taille du tableau lphModule , en octets.
[out] lpcbNeeded
Nombre d’octets requis pour stocker tous les handles de module dans le tableau lphModule .
Valeur retournée
Si la fonction réussit, la valeur de retour est différente de zéro.
Si la fonction échoue, la valeur de retour est égale à zéro. Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError.
Remarques
La fonction EnumProcessModules est principalement conçue pour être utilisée par les débogueurs et les applications similaires qui doivent extraire les informations de module d’un autre processus. Si la liste de modules dans le processus cible est endommagée ou n’est pas encore initialisée, ou si la liste des modules change pendant l’appel de fonction à la suite du chargement ou du déchargement des DLL, EnumProcessModules peut échouer ou retourner des informations incorrectes.
Il est judicieux de spécifier un grand tableau de valeurs HMODULE , car il est difficile de prédire le nombre de modules dans le processus au moment où vous appelez EnumProcessModules. Pour déterminer si le tableau lphModule est trop petit pour contenir tous les handles de module pour le processus, comparez la valeur retournée dans lpcbNeeded à la valeur spécifiée dans cb. Si lpcbNeeded est supérieur à cb, augmentez la taille du tableau et appelez à nouveau EnumProcessModules .
Pour déterminer le nombre de modules énumérés par l’appel à EnumProcessModules, divisez la valeur résultante dans le paramètre lpcbNeeded par sizeof(HMODULE)
.
La fonction EnumProcessModules ne récupère pas de handles pour les modules qui ont été chargés avec le LOAD_LIBRARY_AS_DATAFILE ou des indicateurs similaires. Pour plus d’informations, consultez LoadLibraryEx.
N’appelez pas CloseHandle sur les handles retournés par cette fonction. L’information provient d’un instantané, donc il n’y a pas de ressources à libérer.
Si cette fonction est appelée à partir d’une application 32 bits s’exécutant sur WOW64, elle peut énumérer uniquement les modules d’un processus 32 bits. Si le processus est un processus 64 bits, cette fonction échoue et le dernier code d’erreur est ERROR_PARTIAL_COPY (299).
Pour prendre une instantané des processus spécifiés et des tas, modules et threads utilisés par ces processus, utilisez la fonction CreateToolhelp32Snapshot.
À compter de Windows 7 et Windows Server 2008 R2, Psapi.h établit des numéros de version pour les fonctions PSAPI. Le numéro de version PSAPI affecte le nom utilisé pour appeler la fonction et la bibliothèque qu’un programme doit charger.
Si PSAPI_VERSION a la valeur 2 ou supérieure, cette fonction est définie comme K32EnumProcessModules dans Psapi.h et exportée dans Kernel32.lib et Kernel32.dll. Si PSAPI_VERSION a la valeur 1, cette fonction est définie en tant que EnumProcessModules dans Psapi.h et exportée dans Psapi.lib et Psapi.dll en tant que wrapper qui appelle K32EnumProcessModules.
Les programmes qui doivent s’exécuter sur des versions antérieures de Windows ainsi que sur Windows 7 et versions ultérieures doivent toujours appeler cette fonction EnumProcessModules. Pour garantir une résolution correcte des symboles, ajoutez Psapi.lib à la macro TARGETLIBS et compilez le programme avec -DPSAPI_VERSION=1. Pour utiliser la liaison dynamique au moment de l’exécution, chargez Psapi.dll.
Exemples
Pour obtenir un exemple, consultez Énumération de tous les processus ou Énumération de tous les modules pour un processus.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows XP [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows Server 2003 [applications de bureau uniquement] |
Plateforme cible | Windows |
En-tête | psapi.h |
Bibliothèque | Kernel32.lib sur Windows 7 et Windows Server 2008 R2 ; Psapi.lib (si PSAPI_VERSION=1) sur Windows 7 et Windows Server 2008 R2 ; Psapi.lib sur Windows Server 2008, Windows Vista, Windows Server 2003 et Windows XP |
DLL | Kernel32.dll sur Windows 7 et Windows Server 2008 R2 ; Psapi.dll (si PSAPI_VERSION=1) sur Windows 7 et Windows Server 2008 R2 ; Psapi.dll sur Windows Server 2008, Windows Vista, Windows Server 2003 et Windows XP |