Momentaufnahmen des Systems
Momentaufnahmen sind der Kern der Toolhilfefunktionen. 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 Tool-Hilfsfunktionen verwenden, greifen von Momentaufnahmen aus Momentaufnahmen anstelle direkt vom Betriebssystem aus auf diese Listen zu. Die Listen im Systemspeicher ändern sich, wenn Prozesse gestartet und beendet werden, Threads erstellt und zerstört werden, ausführbare Module werden aus dem Systemspeicher geladen und entladen, und Heaps werden erstellt und zerstört. Die Verwendung von Informationen aus einer Momentaufnahme verhindert Inkonsistenzen. Andernfalls können Änderungen an einer Liste dazu führen, dass ein Thread die Liste falsch durchläuft oder eine Zugriffsverletzung verursacht (GP-Fehler). Wenn eine Anwendung beispielsweise die Threadliste durchläuft, während andere Threads erstellt oder beendet werden, können Informationen, die die Anwendung zum Durchlaufen der Threadliste verwendet, veraltet werden und einen Fehler für die Anwendung verursachen, die die Liste durchläuft.
Um eine Momentaufnahme des Systemspeichers zu erstellen, verwenden Sie die CreateToolhelp32Snapshot--Funktion. Sie können den Inhalt einer Momentaufnahme steuern, indem Sie beim Aufrufen dieser Funktion einen oder mehrere 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, sind die Heap- und Modullisten des angegebenen Prozesses in der Momentaufnahme enthalten. Wenn Sie null als Prozessbezeichner angeben, wird der aktuelle Prozess verwendet. Der wert TH32CS_SNAPTHREAD erstellt immer eine systemweite Momentaufnahme, auch wenn ein Prozessbezeichner an CreateToolhelp32Snapshotübergeben wird.
Wenn Sie den Heap- oder Modulstatus für alle Prozesse aufzählen möchten, geben Sie den TH32CS_SNAPALL Wert und den Prozessbezeichner des aktuellen Prozesses an. Rufen Sie dann für jeden zusätzlichen Prozess in der Momentaufnahme CreateToolhelp32Snapshot erneut auf, und geben Sie dessen Prozessbezeichner und den wert TH32CS_SNAPHEAPLIST oder TH32CS_SNAPMODULE an.
Sie können einen erweiterten Fehlerstatuscode für CreateToolhelp32Snapshot- mithilfe der GetLastError--Funktion abrufen.
Wenn der Vorgang mit einer Momentaufnahme abgeschlossen ist, zerstören Sie ihn mithilfe der CloseHandle--Funktion. Wenn Sie eine Momentaufnahme nicht zerstören, wird der Prozess speicherverlusten, bis der Vorgang beendet wird, zu dem das System den Speicher zurückgibt.
Anmerkung
Das Snapshot-Handle fungiert 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 vererbbar ist, erstellen Sie die Momentaufnahme mithilfe des TH32CS_INHERIT-Werts.
Verwandte Themen