Freigeben über


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 Funktion EnumProcessModules 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 höchstwahrscheinlich aus einem anderen Prozess stammen, sodass Sie sie nicht mit Funktionen wie GetModuleFileName verwenden können. Sie können jedoch PSAPI-Funktionen verwenden, um Informationen zu einem Modul aus einem anderen Prozess abzurufen.

Im folgenden Verfahren wird beschrieben, wie Modulinformationen aus einem anderen Prozess abgerufen werden.

So erhalten Sie Modulinformationen aus einem anderen Prozess

  1. 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). Die zugehörige Funktion GetModuleFileNameEx verwendet dieselben Parameter wie die Eingabe, gibt jedoch den vollständigen Pfad zum Modul zurück (z. B. C:\Windows\System32\Kernel32.dll).
  2. Rufen Sie die GetModuleInformation-Funktion auf. Diese Funktion verwendet ein 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 einem Zeiger auf den Einstiegspunkt.

Wenn eine Anwendung Modulinformationen für den aktuellen Prozess benötigt, sollte sie die GetModuleFileName-Funktion anstelle der PSAPI-Modulfunktionen verwenden. Dies unterstützt die Anwendungsleistung auf zwei Arten: Die GetModuleFileName-Funktion ist effizienter als die PSAPI-Modulfunktionen, und eine Anwendung kann das Laden psapi.dll vermeiden, wenn sie keine PSAPI-Funktionen verwendet.

Die Funktionen GetModuleBaseName und GetModuleFileNameEx sind 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, können diese Funktionen fehlschlagen oder falsche Informationen zurückgeben.