Моментальные снимки системы
Моментальные снимки находятся в основе функций справки средства. Моментальный снимок — это копия текущего состояния одного или нескольких следующих списков, находящихся в системной памяти: процессы, потоки, модули и кучи.
Процессы, использующие средства, помогают функциям обращаться к этим спискам из моментальных снимков, а не непосредственно из операционной системы. Списки изменений в системной памяти при запуске и завершении процессов создаются и уничтожаются потоки, исполняемые модули загружаются и выгружаются из системной памяти, а кучы создаются и уничтожаются. Использование информации из моментального снимка предотвращает несоответствия. В противном случае изменения списка могут привести к неправильному обходу списка или нарушению доступа (сбою групповой политики). Например, если приложение проходит по списку потоков во время создания или завершения других потоков, сведения о том, что приложение использует для обхода списка потоков, может стать устаревшим и может привести к ошибке для обхода списка приложений.
Чтобы создать моментальный снимок системной памяти, используйте функцию createToolhelp32Snapshot. Вы можете управлять содержимым моментального снимка, указав одно или несколько следующих значений при вызове этой функции:
- TH32CS_SNAPHEAPLIST
- TH32CS_SNAPMODULE
- TH32CS_SNAPPROCESS
- TH32CS_SNAPTHREAD
Значения TH32CS_SNAPHEAPLIST и TH32CS_SNAPMODULE являются конкретными процессами. При указании этих значений списки кучи и модулей указанного процесса включаются в моментальный снимок. Если в качестве идентификатора процесса указать ноль, используется текущий процесс. Значение TH32CS_SNAPTHREAD всегда создает системный моментальный снимок, даже если идентификатор процесса передается в CreateToolhelp32Snapshot.
Чтобы перечислить состояние кучи или модуля для всех процессов, укажите значение TH32CS_SNAPALL и идентификатор процесса текущего процесса. Затем для каждого дополнительного процесса в моментальном снимке вызовите CreateToolhelp32Snapsh ot еще раз, указав идентификатор процесса и значение TH32CS_SNAPHEAPLIST или TH32CS_SNAPMODULE.
Вы можете получить расширенный код состояния ошибки для CreateToolhelp32Snapshot с помощью функции GetLastError.
Когда процесс завершится с помощью моментального снимка, удалите его с помощью функции CloseHandle. Если не уничтожить моментальный снимок, процесс будет утечки памяти до тех пор, пока он не завершится, в то время как система освобождает память.
Заметка
Дескриптор моментального снимка действует как дескриптор файла и подчиняется тем же правилам, что и процессы и потоки, в которых он может использоваться. Чтобы указать, что дескриптор наследуется, создайте моментальный снимок с помощью значения TH32CS_INHERIT.
Связанные разделы