Modulinformationen
Ein Modul ist eine ausführbare Datei oder DLL. Jeder Prozess besteht aus einem oder mehreren Modulen. Sie können die Liste der Modulhandles für einen Prozess abrufen, indem Sie die EnumProcessModules-Funktion aufrufen. Diese Funktion füllt ein Array von HMODULE- Werten mit den Modulhandles für den angegebenen Prozess. Das erste Modul ist die ausführbare Datei. Denken Sie daran, dass diese Modulhandles wahrscheinlich von einem anderen Prozess stammen, sodass Sie sie nicht mit Funktionen wie GetModuleFileNameverwenden können. Sie können jedoch PSAPI-Funktionen verwenden, um Informationen zu einem Modul aus einem anderen Prozess abzurufen.
Das folgende Verfahren beschreibt, wie Modulinformationen aus einem anderen Prozess abgerufen werden.
So erhalten Sie Modulinformationen aus einem anderen Prozess
- Rufen Sie die GetModuleBaseName--Funktion auf. Diese Funktion verwendet ein Prozesshandle und ein Modulhandle als Eingabe und füllt einen Puffer mit dem Basisnamen eines Moduls (z. B. Kernel32.dll). Eine verwandte Funktion, GetModuleFileNameEx, verwendet dieselben Parameter wie Eingabe, gibt jedoch den vollständigen Pfad zum Modul zurück (z. B. C:\Windows\System32\Kernel32.dll).
- Rufen Sie die GetModuleInformation-Funktion auf. Diese Funktion verwendet einen Prozesshandle und ein Modulhandle und füllt eine MODULEINFO Struktur mit der Ladeadresse des Moduls, der Größe des linearen Adressraums, den es belegt, und einen Zeiger auf seinen Einstiegspunkt.
Wenn eine Anwendung Modulinformationen für den aktuellen Prozess benötigt, sollte sie anstelle der PSAPI-Modulfunktionen die GetModuleFileName- Funktion verwenden. Dies hilft der Anwendungsleistung auf zwei Arten: Die GetModuleFileName--Funktion ist effizienter als die PSAPI-Modulfunktionen, und eine Anwendung kann das Laden von psapi.dll vermeiden, wenn keine PSAPI-Funktionen verwendet werden.
Die funktionen GetModuleBaseName und GetModuleFileNameEx sind in erster Linie für die Verwendung durch Debugger und ähnliche Anwendungen vorgesehen, 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, da DLLs geladen oder entladen werden, können diese Funktionen fehlschlagen oder falsche Informationen zurückgeben.