系統的快照集

快照集位於工具說明函式的核心。 快照集是下列一或多個位於系統記憶體中的目前狀態唯讀複本:進程、執行緒、模組和堆積。

使用工具的程式可協助函式從快照集存取這些清單,而不是直接從作業系統存取這些清單。 啟動和結束進程、建立和終結執行緒、從系統記憶體載入和卸載可執行模組,以及建立和終結堆積時,系統記憶體中的清單會變更。 快照集的資訊使用可防止不一致。 否則,清單的變更可能會導致執行緒不正確地周遊清單,或在 GP 錯誤) (造成存取違規。 例如,如果應用程式在建立或終止其他執行緒時周遊執行緒清單,則應用程式用來周遊執行緒清單的資訊可能會過期,而且可能會導致應用程式周遊清單的錯誤。

若要擷取系統記憶體的快照集,請使用 CreateToolhelp32Snapshot 函式。 呼叫此函式時,您可以指定下列一或多個值來控制快照集的內容:

  • TH32CS_SNAPHEAPLIST
  • TH32CS_SNAPMODULE
  • TH32CS_SNAPPROCESS
  • TH32CS_SNAPTHREAD

TH32CS_SNAPHEAPLISTTH32CS_SNAPMODULE值是特定的程式。 當指定這些值時,指定的進程的堆積和模組清單會包含在快照集內。 如果您將零指定為進程識別碼,則會使用目前的進程。 即使進程識別碼傳遞至CreateToolhelp32SnapshotTH32CS_SNAPTHREAD值一律會建立全系統快照集。

若要列舉所有進程的堆積或模組狀態,請指定 TH32CS_SNAPALL 值和目前進程的進程識別碼。 然後,針對快照集中的每個額外進程,再次呼叫 CreateToolhelp32Snapshot ,並指定其進程識別碼和 TH32CS_SNAPHEAPLISTTH32CS_SNAPMODULE 值。

您可以使用GetLastError函式來擷取CreateToolhelp32Snapshot的擴充錯誤狀態碼。

當您的程式使用快照集完成時,請使用 CloseHandle 函 式加以終結。 如果您未終結快照集,進程將會流失記憶體,直到其結束為止,此時系統會回收記憶體。

注意

快照集控制碼的作用就像是檔案控制代碼,而且受限於與可使用它所在的進程和執行緒相同的規則。 若要指定控制碼是可繼承的,請使用 TH32CS_INHERIT 值建立快照集。

 

擷取快照集和檢視程式