共用方式為


系統的快照集

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

使用工具協助函式的程式會從快照集存取這些清單,而不是直接從作系統存取這些清單。 啟動和結束進程、建立和終結線程、從系統記憶體載入和卸除可執行模組,以及建立和終結堆積時,系統記憶體中的清單會變更。 快照集的資訊使用可防止不一致。 否則,清單的變更可能會導致線程不正確地周遊清單或造成存取違規(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 值建立快照集。

 

擷取快照集和檢視程式