Поделиться через


структура PROCESS_HEAP_ENTRY (minwinbase.h)

Содержит сведения об элементе кучи. Функция HeapWalk использует структуру PROCESS_HEAP_ENTRY для перечисления элементов кучи.

Синтаксис

typedef struct _PROCESS_HEAP_ENTRY {
  PVOID lpData;
  DWORD cbData;
  BYTE  cbOverhead;
  BYTE  iRegionIndex;
  WORD  wFlags;
  union {
    struct {
      HANDLE hMem;
      DWORD  dwReserved[3];
    } Block;
    struct {
      DWORD  dwCommittedSize;
      DWORD  dwUnCommittedSize;
      LPVOID lpFirstBlock;
      LPVOID lpLastBlock;
    } Region;
  } DUMMYUNIONNAME;
} PROCESS_HEAP_ENTRY, *LPPROCESS_HEAP_ENTRY, *PPROCESS_HEAP_ENTRY;

Члены

lpData

Указатель на часть данных элемента кучи.

Чтобы инициировать перечисление кучи HeapWalk , задайте для lpDataзначение NULL.

Если PROCESS_HEAP_REGION используется в элементе wFlags , lpData указывает на первый виртуальный адрес, используемый регионом.

Если вwFlags используется PROCESS_HEAP_UNCOMMITTED_RANGE, lpData указывает на начало диапазона незафиксированных операций памяти.

cbData

Размер части данных элемента кучи в байтах.

Если вwFlags используется PROCESS_HEAP_REGION, cbData указывает общий размер адресного пространства, зарезервированного для этого региона, в байтах.

Если вwFlags используется PROCESS_HEAP_UNCOMMITTED_RANGE, cbData указывает размер диапазона незафиксированных операций памяти в байтах.

cbOverhead

Размер данных, используемых системой для хранения сведений об элементе кучи, в байтах. Эти накладные байты являются дополнением к байтам cbData части данных элемента кучи.

Если вwFlags используется PROCESS_HEAP_REGION, cbOverhead указывает размер (в байтах) структур управления кучи, описывающих область.

Если вwFlags используется PROCESS_HEAP_UNCOMMITTED_RANGE, cbOverhead указывает размер в байтах структур управления, описывающих этот незафиксированный диапазон.

iRegionIndex

Дескриптор области кучи, содержащей элемент кучи. Куча состоит из одной или нескольких областей виртуальной памяти, каждая из которых имеет уникальный индекс региона.

В первой записи кучи, возвращаемой для большинства регионов кучи, HeapWalk использует PROCESS_HEAP_REGION в элементе wFlags . При использовании этого значения члены структуры Region содержат дополнительные сведения о регионе.

Функция HeapAlloc иногда использует функцию VirtualAlloc для выделения больших блоков из кучи с возможностью роста. Диспетчер кучи рассматривает такое выделение большого блока как отдельный регион с уникальным индексом региона. HeapWalk не использует PROCESS_HEAP_REGION в записи кучи, возвращаемой для большой области блоков, поэтому элементы структуры Region недопустимы. Функцию VirtualQuery можно использовать для получения дополнительных сведений о большой области блоков.

wFlags

Свойства элемента кучи. Некоторые значения влияют на значение других элементов этого PROCESS_HEAP_ENTRY структуры данных. Определены следующие значения.

Значение Значение
PROCESS_HEAP_ENTRY_BUSY
0x0004
Элемент кучи является выделенным блоком.

Если также указано PROCESS_HEAP_ENTRY_MOVEABLE , становится допустимой структура блоков . Элемент hMem структуры block содержит дескриптор выделенного перемещаемого блока памяти.

PROCESS_HEAP_ENTRY_DDESHARE
0x0020
Это значение необходимо использовать с PROCESS_HEAP_ENTRY_BUSY, указывая, что элемент кучи является выделенным блоком.
PROCESS_HEAP_ENTRY_MOVEABLE
0x0010
Это значение необходимо использовать с PROCESS_HEAP_ENTRY_BUSY, указывая, что элемент кучи является выделенным блоком.

Блок был выделен с LMEM_MOVEABLE или GMEM_MOVEABLE, и структура блока становится действительной. Элемент hMem структуры block содержит дескриптор выделенного перемещаемого блока памяти.

PROCESS_HEAP_REGION
0x0001
Элемент кучи находится в начале области непрерывной виртуальной памяти, используемой кучей.

Элемент lpData структуры указывает на первый виртуальный адрес, используемый регионом; член cbData указывает общий размер адресного пространства, зарезервированного для этого региона, в байтах; и элемент cbOverhead указывает размер (в байтах) структур управления кучей, описывающих область.

Становится допустимой структура регионов . Элементы dwCommittedSize, dwUnCommittedSize, lpFirstBlock и lpLastBlock структуры содержат дополнительные сведения о регионе.

PROCESS_HEAP_UNCOMMITTED_RANGE
0x0002
Элемент кучи находится в диапазоне незафиксированных памяти в области кучи.

Элемент lpData указывает на начало диапазона незафиксированных операций памяти; член cbData указывает размер (в байтах) диапазона незафиксированного объема памяти; и элемент cbOverhead указывает размер (в байтах) структур управления, описывающих этот незафиксированный диапазон.

DUMMYUNIONNAME

DUMMYUNIONNAME.Block

Эта структура действительна, только если PROCESS_HEAP_ENTRY_BUSY и PROCESS_HEAP_ENTRY_MOVEABLE указаны в wFlags.

DUMMYUNIONNAME.Block.hMem

Дескриптор выделенного перемещаемого блока памяти.

DUMMYUNIONNAME.Block.dwReserved[3]

Защищены; не используется.

DUMMYUNIONNAME.Region

Эта структура действительна, только если член wFlags указывает PROCESS_HEAP_REGION.

DUMMYUNIONNAME.Region.dwCommittedSize

Количество байтов в области кучи, которые в настоящее время зафиксированы как свободные блоки памяти, блоки занятой памяти или структуры управления кучей.

Это необязательное поле, которое имеет значение 0, если количество зафиксированных байтов недоступно.

DUMMYUNIONNAME.Region.dwUnCommittedSize

Число байтов в области кучи, которые в настоящее время не зафиксированы.

Это необязательное поле, которое имеет значение 0, если количество незафиксированных байтов недоступно.

DUMMYUNIONNAME.Region.lpFirstBlock

Указатель на первый допустимый блок памяти в этой области кучи.

DUMMYUNIONNAME.Region.lpLastBlock

Указатель на первый недопустимый блок памяти в этой области кучи.

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Верхняя часть minwinbase.h (включая Windows.h)

См. также раздел

GlobalAlloc

HeapAlloc

HeapWalk

VirtualAlloc

VirtualQuery