Instantâneos do sistema
Os instantâneos estão no centro das funções de ajuda da ferramenta. Um instantâneo é uma cópia somente leitura do estado atual de uma ou mais das seguintes listas que residem na memória do sistema: processos, threads, módulos e heaps.
Os processos que usam funções de ajuda da ferramenta acessam essas listas a partir de instantâneos em vez de diretamente do sistema operacional. As listas na memória do sistema mudam quando os processos são iniciados e terminados, threads são criados e destruídos, módulos executáveis são carregados e descarregados da memória do sistema e pilhas são criadas e destruídas. O uso de informações de um snapshot evita inconsistências. Caso contrário, as alterações em uma lista podem fazer com que um thread percorra incorretamente a lista ou causar uma violação de acesso (uma falha de GP). Por exemplo, se um aplicativo atravessar a lista de threads enquanto outros threads são criados ou encerrados, as informações que o aplicativo está usando para atravessar a lista de threads podem ficar desatualizadas e podem causar um erro para o aplicativo que atravessa a lista.
Para tirar um instantâneo da memória do sistema, use a funçãoCreateToolhelp32Snapshot. Você pode controlar o conteúdo de um instantâneo especificando um ou mais dos seguintes valores ao chamar essa função:
- TH32CS_SNAPHEAPLIST
- TH32CS_SNAPMODULE
- TH32CS_SNAPPROCESS
- TH32CS_SNAPTHREAD
Os valores TH32CS_SNAPHEAPLIST e TH32CS_SNAPMODULE são específicos do processo. Quando esses valores são especificados, as listas de heap e módulo do processo especificado são incluídas no instantâneo. Se você especificar zero como o identificador do processo, o processo atual será usado. O valor TH32CS_SNAPTHREAD sempre cria um instantâneo em todo o sistema, mesmo que um identificador de processo seja passado para CreateToolhelp32Snapshot.
Para enumerar o estado da pilha ou do módulo para todos os processos, especifique o valor TH32CS_SNAPALL e o identificador do processo atual. Em seguida, para cada processo adicional no snapshot, chame CreateToolhelp32Snapshot novamente, especificando seu identificador de processo e o valor TH32CS_SNAPHEAPLIST ou TH32CS_SNAPMODULE.
Você pode recuperar um código de status de erro estendido para CreateToolhelp32Snapshot usando a funçãoGetLastError.
Quando o processo terminar usando um instantâneo, destrua-o usando a função CloseHandle. Se você não destruir um snapshot, o processo vazará memória até que ele saia, momento em que o sistema recupera a memória.
Observação
O identificador de instantâneo age como um identificador de arquivo e está sujeito às mesmas regras em relação aos processos e threads nos quais ele pode ser usado. Para especificar que o identificador é herdável, crie o instantâneo usando o valor TH32CS_INHERIT.
Tópicos relacionados