Share via


Instantáneas del sistema

Las instantáneas se encuentran en el núcleo de las funciones de ayuda de la herramienta. Una instantánea es una copia de solo lectura del estado actual de una o varias de las siguientes listas que residen en la memoria del sistema: procesos, subprocesos, módulos y montones.

Los procesos que usan funciones de ayuda de herramientas acceden a estas listas desde instantáneas en lugar de directamente desde el sistema operativo. Las listas del cambio de memoria del sistema cuando se inician y finalizan los procesos, los subprocesos se crean y destruyen, los módulos ejecutables se cargan y descargan de la memoria del sistema, y los montones se crean y destruyen. El uso de información de una instantánea evita incoherencias. De lo contrario, los cambios en una lista podrían provocar que un subproceso recorra incorrectamente la lista o que se produzca una infracción de acceso (un error de GP). Por ejemplo, si una aplicación recorre la lista de subprocesos mientras se crean o finalizan otros subprocesos, la información que usa la aplicación para recorrer la lista de subprocesos podría quedar obsoleta y podría provocar un error para la aplicación que atraviesa la lista.

Para tomar una instantánea de la memoria del sistema, use la función CreateToolhelp32Snapshot . Puede controlar el contenido de una instantánea especificando uno o varios de los siguientes valores al llamar a esta función:

  • TH32CS_SNAPHEAPLIST
  • TH32CS_SNAPMODULE
  • TH32CS_SNAPPROCESS
  • TH32CS_SNAPTHREAD

Los valores TH32CS_SNAPHEAPLIST y TH32CS_SNAPMODULE son específicos del proceso. Cuando se especifican estos valores, las listas de montón y módulo del proceso especificado se incluyen en la instantánea. Si especifica cero como identificador de proceso, se usa el proceso actual. El valor de TH32CS_SNAPTHREAD siempre crea una instantánea en todo el sistema incluso si se pasa un identificador de proceso a CreateToolhelp32Snapshot.

Para enumerar el estado del montón o módulo para todos los procesos, especifique el valor de TH32CS_SNAPALL y el identificador de proceso del proceso actual. A continuación, para cada proceso adicional de la instantánea, llame a CreateToolhelp32Snapshot de nuevo, especificando su identificador de proceso y el valor de TH32CS_SNAPHEAPLIST o TH32CS_SNAPMODULE .

Puede recuperar un código de estado de error extendido para CreateToolhelp32Snapshot mediante la función GetLastError .

Cuando el proceso termine de usar una instantánea, destruyalo mediante la función CloseHandle . Si no destruye una instantánea, el proceso perderá memoria hasta que salga, en cuyo momento el sistema reclama la memoria.

Nota

El identificador de instantánea actúa como un identificador de archivo y está sujeto a las mismas reglas relacionadas con los procesos y subprocesos en los que se puede usar. Para especificar que el identificador se puede heredar, cree la instantánea con el valor de TH32CS_INHERIT .

 

Tomar una instantánea y ver procesos