Snapshot del sistema

Gli snapshot sono al centro delle funzioni della Guida degli strumenti. Uno snapshot è una copia di sola lettura dello stato corrente di uno o più degli elenchi seguenti che risiedono nella memoria di sistema: processi, thread, moduli e heaps.

I processi che usano gli strumenti consentono di accedere a questi elenchi da snapshot anziché direttamente dal sistema operativo. Gli elenchi nella memoria di sistema cambiano quando vengono avviati e terminati i thread, i thread vengono creati e eliminati, i moduli eseguibili vengono caricati e scaricati dalla memoria di sistema e vengono creati e eliminati. L'uso di informazioni da uno snapshot impedisce le incoerenze. In caso contrario, le modifiche a un elenco potrebbero causare l'attraversamento errato dell'elenco o la causa di una violazione di accesso (errore criteri di gruppo). Ad esempio, se un'applicazione attraversa l'elenco di thread mentre altri thread vengono creati o terminati, le informazioni che l'applicazione usa per attraversare l'elenco di thread potrebbe diventare obsoleto e potrebbe causare un errore per l'applicazione che attraversa l'elenco.

Per acquisire uno snapshot della memoria di sistema, usare la funzione CreateToolhelp32Snapshot . È possibile controllare il contenuto di uno snapshot specificando uno o più dei valori seguenti quando si chiama questa funzione:

  • TH32CS_SNAPHEAPLIST
  • TH32CS_SNAPMODULE
  • TH32CS_SNAPPROCESS
  • TH32CS_SNAPTHREAD

I valori TH32CS_SNAPHEAPLIST e TH32CS_SNAPMODULE sono specifici del processo. Quando vengono specificati questi valori, gli elenchi di heap e modulo del processo specificato vengono inclusi nello snapshot. Se si specifica zero come identificatore del processo, viene usato il processo corrente. Il valore TH32CS_SNAPTHREAD crea sempre uno snapshot a livello di sistema anche se un identificatore di processo viene passato a CreateToolhelp32Snapshot.

Per enumerare lo stato dell'heap o del modulo per tutti i processi, specificare il valore TH32CS_SNAPALL e l'identificatore del processo corrente. Quindi, per ogni processo aggiuntivo nello snapshot, chiamare di nuovo CreateToolhelp32Snapshot , specificando il relativo identificatore di processo e il TH32CS_SNAPHEAPLIST o TH32CS_SNAPMODULE valore.

È possibile recuperare un codice di stato di errore esteso per CreateToolhelp32Snapshot usando la funzione GetLastError .

Al termine del processo usando uno snapshot, eliminarlo usando la funzione CloseHandle . Se non si elimina uno snapshot, il processo perderà memoria finché non viene chiuso, al momento in cui il sistema recupera la memoria.

Nota

L'handle snapshot funge da handle di file ed è soggetto alle stesse regole relative ai processi e ai thread in cui può essere usato. Per specificare che l'handle è ereditabile, creare lo snapshot usando il valore TH32CS_INHERIT .

 

Creazione di uno snapshot e visualizzazione di processi