Momentaufnahmen des Systems

Momentaufnahmen sind der Kern der Hilfefunktionen des Tools. Eine Momentaufnahme ist eine schreibgeschützte Kopie des aktuellen Zustands einer oder mehrerer der folgenden Listen, die sich im Systemspeicher befinden: Prozesse, Threads, Module und Heaps.

Prozesse, die das Tool verwenden, helfen Funktionen beim Zugriff auf diese Listen aus Momentaufnahmen und nicht direkt über das Betriebssystem. Die Listen im Systemspeicher ändern sich, wenn Prozesse gestartet und beendet werden, Threads erstellt und zerstört werden, ausführbare Module aus dem Systemspeicher geladen und entladen und Heaps erstellt und zerstört werden. Die Verwendung von Informationen aus einem Momentaufnahme verhindert Inkonsistenzen. Andernfalls könnten Änderungen an einer Liste möglicherweise dazu führen, dass ein Thread die Liste fälschlicherweise durchquert oder eine Zugriffsverletzung (gp-Fehler) verursacht. Wenn beispielsweise eine Anwendung die Threadliste durchläuft, während andere Threads erstellt oder beendet werden, können Informationen, die die Anwendung zum Durchlaufen der Threadliste verwendet, veraltet sein und einen Fehler für die Anwendung verursachen, die die Liste durchläuft.

Verwenden Sie die Funktion CreateToolhelp32Snapshot, um einen Momentaufnahme des Systemspeichers zu übernehmen. Sie können den Inhalt einer Momentaufnahme steuern, indem Sie beim Aufrufen dieser Funktion mindestens einen der folgenden Werte angeben:

  • TH32CS_SNAPHEAPLIST
  • TH32CS_SNAPMODULE
  • TH32CS_SNAPPROCESS
  • TH32CS_SNAPTHREAD

Die werte TH32CS_SNAPHEAPLIST und TH32CS_SNAPMODULE sind prozessspezifisch. Wenn diese Werte angegeben werden, werden die Heap- und Modullisten des angegebenen Prozesses in die Momentaufnahme eingeschlossen. Wenn Sie null als Prozessbezeichner angeben, wird der aktuelle Prozess verwendet. Der TH32CS_SNAPTHREAD Wert erstellt immer eine systemweite Momentaufnahme, auch wenn ein Prozessbezeichner an CreateToolhelp32Snapshot übergeben wird.

Um den Heap- oder Modulstatus für alle Prozesse aufzulisten, geben Sie den TH32CS_SNAPALL Wert und den Prozessbezeichner des aktuellen Prozesses an. Rufen Sie dann für jeden weiteren Prozess in der Momentaufnahme createToolhelp32Snapshot erneut auf, und geben Sie den Prozessbezeichner und den TH32CS_SNAPHEAPLIST- oder TH32CS_SNAPMODULE-Wert an.

Sie können einen erweiterten Fehler status Code für CreateToolhelp32Snapshot mithilfe der GetLastError-Funktion abrufen.

Wenn Ihr Prozess mit der Verwendung eines Momentaufnahme abgeschlossen ist, zerstören Sie ihn mithilfe der CloseHandle-Funktion. Wenn Sie einen Momentaufnahme nicht zerstören, wird durch den Prozess Arbeitsspeicher verloren, bis er beendet wird, und zu diesem Zeitpunkt wird der Arbeitsspeicher vom System zurückerobert.

Hinweis

Das Momentaufnahme-Handle verhält sich wie ein Dateihandle und unterliegt den gleichen Regeln für die Prozesse und Threads, in denen es verwendet werden kann. Um anzugeben, dass das Handle vererbt werden kann, erstellen Sie den Momentaufnahme mithilfe des TH32CS_INHERIT-Werts.

 

Erstellen einer Momentaufnahme und Anzeigen von Prozessen