Compartilhar via


Instantâneos do sistema

Os instantâneos estão no núcleo 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 a ferramenta ajudam as funções a acessar essas listas 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 encerrados, os threads são criados e destruídos, os módulos executáveis são carregados e descarregados da memória do sistema e os heaps são criados e destruídos. O uso de informações de uma instantâneo impede inconsistências. Caso contrário, as alterações em uma lista podem fazer com que um thread percorra incorretamente a lista ou cause uma violação de acesso (uma falha de GP). Por exemplo, se um aplicativo percorrer a lista de threads enquanto outros threads forem criados ou encerrados, as informações que o aplicativo está usando para percorrer a lista de threads poderão ficar desatualizadas e poderão causar um erro para o aplicativo que atravessa a lista.

Para obter um instantâneo da memória do sistema, use a função CreateToolhelp32Snapshot. 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 uma instantâneo em todo o sistema, mesmo que um identificador de processo seja passado para CreateToolhelp32Snapshot.

Para enumerar o estado do heap ou do módulo para todos os processos, especifique o valor TH32CS_SNAPALL e o identificador de processo do processo atual. Em seguida, para cada processo adicional no instantâneo, chame CreateToolhelp32Snapshot novamente, especificando seu identificador de processo e o valor TH32CS_SNAPHEAPLIST ou TH32CS_SNAPMODULE.

Você pode recuperar um erro estendido status código para CreateToolhelp32Snapshot usando a função GetLastError.

Quando o processo terminar de usar um instantâneo, destrua-o usando a função CloseHandle. Se você não destruir um instantâneo, o processo vai vazar memória até que ele saia, momento em que o sistema recupera a memória.

Observação

O identificador instantâneo age como um identificador de arquivo e está sujeito às mesmas regras relativas 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.

 

Como tirar um instantâneo e exibir processos