Динамическое распределение памяти в MS Windows. Габрельян Б.В. - 19 стр.

UptoLike

Составители: 

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;