Freigeben über


EnumProcessModules-Funktion (psapi.h)

Ruft ein Handle für jedes Modul im angegebenen Prozess ab.

Verwenden Sie die EnumProcessModulesEx-Funktion , um zu steuern, ob eine 64-Bit-Anwendung 32-Bit-Module, 64-Bit-Module oder beide Typen von Modulen aufzählt.

Syntax

BOOL EnumProcessModules(
  [in]  HANDLE  hProcess,
  [out] HMODULE *lphModule,
  [in]  DWORD   cb,
  [out] LPDWORD lpcbNeeded
);

Parameter

[in] hProcess

Ein Handle für den Prozess.

[out] lphModule

Ein Array, das die Liste der Modulhandles empfängt.

[in] cb

Die Größe des lphModule-Arrays in Bytes.

[out] lpcbNeeded

Die Anzahl der Bytes, die zum Speichern aller Modulhandles im lphModule-Array erforderlich sind.

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich Null.

Wenn die Funktion fehlerhaft ist, ist der Rückgabewert null. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.

Hinweise

Die EnumProcessModules-Funktion ist in erster Linie für die Verwendung durch Debugger und ähnliche Anwendungen konzipiert, die Modulinformationen aus einem anderen Prozess extrahieren müssen. Wenn die Modulliste im Zielprozess beschädigt oder noch nicht initialisiert ist oder sich die Modulliste während des Funktionsaufrufs ändert, weil DLLs geladen oder entladen werden, schlägt EnumProcessModules möglicherweise fehl oder gibt falsche Informationen zurück.

Es empfiehlt sich, ein großes Array von HMODULE-Werten anzugeben, da es schwierig ist, vorherzusagen, wie viele Module zum Zeitpunkt des Aufrufs von EnumProcessModules im Prozess vorhanden sein werden. Um festzustellen, ob das lphModule-Array zu klein ist, um alle Modulhandles für den Prozess zu speichern, vergleichen Sie den in lpcbNeeded zurückgegebenen Wert mit dem in cb angegebenen Wert. Wenn lpcbNeeded größer als cb ist, erhöhen Sie die Größe des Arrays, und rufen Sie EnumProcessModules erneut auf.

Um zu bestimmen, wie viele Module durch den Aufruf von EnumProcessModules aufgezählt wurden, dividieren Sie den resultierenden Wert im lpcbNeeded-Parameter durch sizeof(HMODULE).

Die EnumProcessModules-Funktion ruft keine Handles für Module ab, die mit dem LOAD_LIBRARY_AS_DATAFILE oder ähnlichen Flags geladen wurden. Weitere Informationen finden Sie unter LoadLibraryEx.

Rufen Sie CloseHandle nicht für die von dieser Funktion zurückgegebenen Handles auf. Die Informationen stammen aus einem Momentaufnahme, sodass keine Ressourcen freigegeben werden müssen.

Wenn diese Funktion von einer 32-Bit-Anwendung aufgerufen wird, die auf WOW64 ausgeführt wird, kann sie nur die Module eines 32-Bit-Prozesses aufzählen. Wenn der Prozess ein 64-Bit-Prozess ist, schlägt diese Funktion fehl, und der letzte Fehlercode ist ERROR_PARTIAL_COPY (299).

Verwenden Sie die CreateToolhelp32Snapshot-Funktion, um eine Momentaufnahme der angegebenen Prozesse und der von diesen Prozessen verwendeten Heaps, Module und Threads zu erstellen.

Ab Windows 7 und Windows Server 2008 R2 erstellt Psapi.h Versionsnummern für die PSAPI-Funktionen. Die PSAPI-Versionsnummer wirkt sich auf den Namen aus, der zum Aufrufen der Funktion und der Bibliothek verwendet wird, die ein Programm laden muss.

Wenn PSAPI_VERSION 2 oder höher ist, wird diese Funktion in Psapi.h als K32EnumProcessModules definiert und in Kernel32.lib und Kernel32.dll exportiert. Wenn PSAPI_VERSION 1 ist, wird diese Funktion in Psapi.h als EnumProcessModules definiert und in Psapi.lib exportiert und Psapi.dll als Wrapper, der K32EnumProcessModules aufruft.

Programme, die unter früheren Versionen von Windows sowie Windows 7 und höheren Versionen ausgeführt werden müssen, sollten diese Funktion immer als EnumProcessModules aufrufen. Um die korrekte Auflösung von Symbolen sicherzustellen, fügen Sie Dem TARGETLIBS-Makro Psapi.lib hinzu, und kompilieren Sie das Programm mit -DPSAPI_VERSION=1. Laden Sie Psapi.dll, um die dynamische Laufzeitverknüpfung zu verwenden.

Beispiele

Ein Beispiel finden Sie unter Auflisten aller Prozesse oder Auflisten aller Module für einen Prozess.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile psapi.h
Bibliothek Kernel32.lib unter Windows 7 und Windows Server 2008 R2; Psapi.lib (wenn PSAPI_VERSION=1) unter Windows 7 und Windows Server 2008 R2; Psapi.lib unter Windows Server 2008, Windows Vista, Windows Server 2003 und Windows XP
DLL Kernel32.dll unter Windows 7 und Windows Server 2008 R2; Psapi.dll (wenn PSAPI_VERSION=1) unter Windows 7 und Windows Server 2008 R2; Psapi.dll unter Windows Server 2008, Windows Vista, Windows Server 2003 und Windows XP

Weitere Informationen

CreateToolhelp32Snapshot

EnumProcessModulesEx

EnumProcesses

Modulinformationen

PSAPI-Funktionen