Snapshot del sistema
Gli snapshot sono alla base delle funzioni della Guida dello strumento. 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 heap.
I processi che usano lo strumento consentono alle funzioni di accedere a questi elenchi da snapshot anziché direttamente dal sistema operativo. Gli elenchi nella modifica della memoria di sistema quando i processi vengono avviati e terminati, i thread vengono creati e eliminati definitivamente, i moduli eseguibili vengono caricati e scaricati dalla memoria di sistema e vengono creati ed eliminati definitivamente. L'uso di informazioni da uno snapshot impedisce incoerenze. In caso contrario, le modifiche apportate a un elenco potrebbero causare l'attraversamento non corretto dell'elenco da parte di un thread 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 sta usando per attraversare l'elenco di thread potrebbero diventare obsolete e potrebbero causare un errore per l'applicazione che attraversa l'elenco.
Per creare 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 si specificano questi valori, gli elenchi di heap e moduli 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 valore TH32CS_SNAPHEAPLIST o TH32CS_SNAPMODULE.
È possibile recuperare un codice di stato di errore esteso per CreateToolhelp32Snapshot usando la funzioneGetLastError.
Al termine dell'uso di uno snapshot, eliminarlo usando la funzione CloseHandle. Se non si elimina definitivamente uno snapshot, il processo perderà memoria fino a quando non viene chiuso, al momento in cui il sistema recupera la memoria.
Nota
L'handle di snapshot agisce come un 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.
Argomenti correlati