Составители:
HANDLE hHeap, // дескриптор кучи
DWORD dwFlags, // флаги
LPCVOID lpMem // указатель на блок
);
Может быть указан только один флаг: HEAP_NO_SERIALIZE.
19. HeapWalk
Функция HeapWalk позволяет получать информацию о блоках памяти в указанной
куче.
BOOL HeapWalk(
HANDLE hHeap, // дескриптор кучи
LPPROCESS_HEAP_ENTRY lpEntry // указатель на структуру, в которой
будет
// сохранена информация о блоке
);
Параметры:
hHeap - дескриптор кучи.
lpEntry - указатель на структуру PROCESS_HEAP_ENTRY, в которой будет
сохранена информация о конкретном блоке.
Возвращаемые значения:
В случае успеха,
функция возвращает значение TRUE, иначе - ноль. Для получения
более подробной информации нужно вызвать GetLastError. Если вызов
завершается успешно, но достигнут конец кучи, функция возвращает FALSE, а
GetLastError - код ошибки ERROR_NO_MORE_ITEMS.
Замечания:
Чтобы начать просмотр блоков кучи, нужно вызвать HeapWalk задав для поля
lpData структуры PROCESS_HEAP_ENTRY (см. ниже описание
PROCESS_HEAP_ENTRY) значение NULL. Получим информацию о первом блоке
кучи. Чтобы
продолжить, нужно вызвать HeapWalk с тем же самым значением
hHeap и lpEntry, не изменяя значения полей структуры PROCESS_HEAP_ENTRY.
Этот процесс можно продолжать, пока функция не вернет FALSE, а GetLastError -
ERROR_NO_MORE_ITEMS, что говорит о том, что все блоки в куче просмотрены.
В многопоточных приложениях HeapWalk может вернуть ошибку, если куча не
заблокирована. Используйте функции HeapLock и HeapUnlock для блокирования
кучи перед обращениями к HeapWalk и разблокирования после этих обращений
соответственно.
Эта функция не поддерживается в Win9x.
20. PROCESS_HEAP_ENTRY
Структура PROCESS_HEAP_ENTRY содержит информацию об элементе (блоке)
кучи. Используется функцией HeapWalk.
typedef struct _PROCESS_HEAP_ENTRY {
PVOID lpData;
DWORD cbData;
HANDLE hHeap, // дескриптор кучи DWORD dwFlags, // флаги LPCVOID lpMem // указатель на блок ); Может быть указан только один флаг: HEAP_NO_SERIALIZE. 19. HeapWalk Функция HeapWalk позволяет получать информацию о блоках памяти в указанной куче. BOOL HeapWalk( HANDLE hHeap, // дескриптор кучи LPPROCESS_HEAP_ENTRY lpEntry // указатель на структуру, в которой будет // сохранена информация о блоке ); Параметры: hHeap - дескриптор кучи. lpEntry - указатель на структуру PROCESS_HEAP_ENTRY, в которой будет сохранена информация о конкретном блоке. Возвращаемые значения: В случае успеха, функция возвращает значение TRUE, иначе - ноль. Для получения более подробной информации нужно вызвать GetLastError. Если вызов завершается успешно, но достигнут конец кучи, функция возвращает FALSE, а GetLastError - код ошибки ERROR_NO_MORE_ITEMS. Замечания: Чтобы начать просмотр блоков кучи, нужно вызвать HeapWalk задав для поля lpData структуры PROCESS_HEAP_ENTRY (см. ниже описание PROCESS_HEAP_ENTRY) значение NULL. Получим информацию о первом блоке кучи. Чтобы продолжить, нужно вызвать HeapWalk с тем же самым значением hHeap и lpEntry, не изменяя значения полей структуры PROCESS_HEAP_ENTRY. Этот процесс можно продолжать, пока функция не вернет FALSE, а GetLastError - ERROR_NO_MORE_ITEMS, что говорит о том, что все блоки в куче просмотрены. В многопоточных приложениях HeapWalk может вернуть ошибку, если куча не заблокирована. Используйте функции HeapLock и HeapUnlock для блокирования кучи перед обращениями к HeapWalk и разблокирования после этих обращений соответственно. Эта функция не поддерживается в Win9x. 20. PROCESS_HEAP_ENTRY Структура PROCESS_HEAP_ENTRY содержит информацию об элементе (блоке) кучи. Используется функцией HeapWalk. typedef struct _PROCESS_HEAP_ENTRY { PVOID lpData; DWORD cbData;