Моментальные снимки системы

Моментальные снимки являются основой функций справки средства. Snapshot — это доступная только для чтения копия текущего состояния одного или нескольких следующих списков, которые находятся в системной памяти: процессы, потоки, модули и кучи.

Процессы, использующие функции справки средства, обращаются к этим спискам из моментальных снимков, а не непосредственно из операционной системы. Списки в системной памяти изменяются при запуске и завершении процессов, создании и уничтожении потоков, загрузке и выгрузке исполняемых модулей из системной памяти, а также создании и уничтожении кучи. Использование информации из snapshot предотвращает несоответствия. В противном случае изменения в списке могут привести к неправильному проходу потока по списку или нарушению доступа (ошибке GP). Например, если приложение проходит по списку потоков, а другие потоки создаются или завершаются, сведения, которые приложение использует для обхода списка потоков, могут устареть и вызвать ошибку при обходе списка.

Чтобы получить snapshot системной памяти, используйте функцию CreateToolhelp32Snapshot. Вы можете управлять содержимым snapshot, указав одно или несколько следующих значений при вызове этой функции:

  • TH32CS_SNAPHEAPLIST
  • TH32CS_SNAPMODULE
  • TH32CS_SNAPPROCESS
  • TH32CS_SNAPTHREAD

Значения TH32CS_SNAPHEAPLIST и TH32CS_SNAPMODULE зависят от процесса. При указании этих значений списки кучи и модулей указанного процесса включаются в snapshot. Если в качестве идентификатора процесса указать ноль, используется текущий процесс. Значение TH32CS_SNAPTHREAD всегда создает общесистемный snapshot даже если идентификатор процесса передается в CreateToolhelp32Snapshot.

Чтобы перечислить состояние кучи или модуля для всех процессов, укажите значение TH32CS_SNAPALL и идентификатор текущего процесса. Затем для каждого дополнительного процесса в snapshot снова вызовите CreateToolhelp32Snapshot, указав идентификатор процесса и значение TH32CS_SNAPHEAPLIST или TH32CS_SNAPMODULE.

Вы можете получить расширенный код состояния ошибки для CreateToolhelp32Snapshot с помощью функции GetLastError .

После завершения процесса с помощью snapshot удалите его с помощью функции CloseHandle. Если не уничтожить snapshot, процесс будет утечь память до тех пор, пока не завершится, и в это время система освободит память.

Примечание

Дескриптор snapshot действует как дескриптор файла и подчиняется тем же правилам в отношении процессов и потоков, в которых его можно использовать. Чтобы указать, что дескриптор наследуется, создайте snapshot, используя значение TH32CS_INHERIT.

 

Создание моментального снимка и просмотр процессов