|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
PROCESS_HEAP_ENTRY
The PROCESS_HEAP_ENTRY structure contains information about a heap element. The HeapWalk function uses a PROCESS_HEAP_ENTRY structure to enumerate the elements of a heap.
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; }; } PROCESS_HEAP_ENTRY;
Members
lpData
Points to the data portion of the heap element.
To initiate a HeapWalk heap enumeration, set lpData to NULL. If the PROCESS_HEAP_REGION bit flag is set in the wFlags member, lpData points to the first virtual address used by the region. If the PROCESS_HEAP_UNCOMMITTED_RANGE bit flag is set in wFlags, lpData points to the beginning of the range of uncommitted memory.
cbData
Specifies the size, in bytes, of the data portion of the heap element.
If the PROCESS_HEAP_REGION bit flag is set in wFlags, cbData specifies the total size, in bytes, of the address space that is reserved for this region. If the PROCESS_HEAP_UNCOMMITTED_RANGE bit flag is set in wFlags, cbData specifies the size, in bytes, of the range of uncommitted memory.
cbOverhead
Specifies the size, in bytes, of the data used by the system to maintain information about the heap element. These overhead bytes are in addition to the cbData bytes of the data portion of the heap element.
If the PROCESS_HEAP_REGION bit flag is set in wFlags, cbOverhead specifies the size, in bytes, of the heap control structures that describe the region. If the PROCESS_HEAP_UNCOMMITTED_RANGE bit flag is set in wFlags, cbOverhead specifies the size, in bytes, of the control structures that describe this uncommitted range.
iRegionIndex
Identifies the heap region that contains the heap element. A heap consists of one or more regions of virtual memory, each with a unique region index.
In the first heap entry returned for most heap regions, HeapWalk sets the PROCESS_HEAP_REGION flag in the wFlags member. When this flag is set, the members of the Region structure contain additional information about the region. The HeapAlloc function sometimes uses the VirtualAlloc function to allocate large blocks from a growable heap. The heap manager treats such a large block allocation as a separate region with a unique region index. HeapWalk does not set the PROCESS_HEAP_REGION flag in the heap entry returned for a large block region, so the members of the Region structure are not valid. You can use the VirtualQuery function to get additional information about a large block region.
wFlags
A set of bit flags that specify properties of the heap element. Some of these flags affect the meaning of other members of this PROCESS_HEAP_ENTRY data structure. The following bit-flag constants are defined:
Value Meaning PROCESS_HEAP_REGION If this flag is set, the heap element is located at the beginning of a region of contiguous virtual memory in use by the heap. If this flag is set, the lpData member of the structure points to the first virtual address used by the region; the cbData member specifies the total size, in bytes, of the address space that is reserved for this region; and the cbOverhead member specifies the size, in bytes, of the heap control structures that describe the region.If this flag is set, the Region structure becomes valid. The dwCommittedSize, dwUnCommittedSize, lpFirstBlock, and lpLastBlock members of the structure contain additional information about the region. PROCESS_HEAP_UNCOMMITTED_RANGE If this flag is set, the heap element is located in a range of uncommitted memory within the heap region. If this flag is set, the lpData member points to the beginning of the range of uncommitted memory; the cbData member specifies the size, in bytes, of the range of uncommitted memory; and the cbOverhead member specifies the size, in bytes, of the control structures that describe this uncommitted range. PROCESS_HEAP_ENTRY_BUSY If this flag is set, the heap element is an allocated block. If both this flag and the PROCESS_HEAP_ENTRY_MOVEABLE flag are set, the Block structure becomes valid. The hMem member of the Block structure contains a handle to the allocated, moveable memory block. PROCESS_HEAP_ENTRY_MOVEABLE This flag is only valid if the PROCESS_HEAP_ENTRY_BUSY flag is set, indicating that the heap element is an allocated block.If this flag is valid and set, the block was allocated with the LMEM_MOVEABLE or GMEM_MOVEABLE flag, and the Block structure becomes valid. The hMem member of the Block structure contains a handle to the allocated, moveable memory block. PROCESS_HEAP_ENTRY_DDESHARE This flag is only valid if the PROCESS_HEAP_ENTRY_BUSY flag is set, indicating that the heap element is an allocated block.If this flag is valid and set, the block was allocated with the GMEM_DDESHARE flag. For a discussion of the GMEM_DDESHARE flag, see GlobalAlloc .
Block
This structure is valid only if both the PROCESS_HEAP_ENTRY_BUSY and PROCESS_HEAP_ENTRY_MOVEABLE flags in wFlags are set.
The members of the Block structure are as follows:
Member Description hMem Contains a handle to the allocated, moveable memory block. dwReserved Reserved; not used.
Region
This structure is valid only if the PROCESS_HEAP_REGION flag is set in the wFlags member.
The members of the Region structure are as follows:
Member Description dwCommittedSize Specifies the number of bytes in the heap region that are currently committed as free memory blocks, busy memory blocks, or heap control structures.This is an optional field that is set to zero if the number of committed bytes is not available. dwUnCommittedSize Specifies the number of bytes in the heap region that are currently uncommitted.This is an optional field that is set to zero if the number of uncommitted bytes is not available. lpFirstBlock Pointer to the first valid memory block in this heap region. lpLastBlock Pointer to the first invalid memory block in thisheap region.
See Also
GlobalAlloc, HeapAlloc, HeapWalk, VirtualAlloc, VirtualQuery
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
PROCESS_HEAP_ENTRY
Структура PROCESS_HEAP_ENTRY содержит информацию об элементе кучи. Функция HeapWalk использует структуру PROCESS_HEAP_ENTRY, чтобы перечислять элементы кучи.
typedef struct _PROCESS_HEAP_ENTRY { PVOID lpData; DWORD cbData; БАЙТ cbOverhead; БАЙТ iRegionIndex; СЛОВО wFlags; союз { struct { РУЧКА hMem; DWORD dwReserved[ 3 ]; } Блок; struct { DWORD dwCommittedSize; DWORD dwUnCommittedSize; LPVOID lpFirstBlock; LPVOID lpLastBlock; } Область; }; } PROCESS_HEAP_ENTRY;
Участники
lpData
Точки на часть данных элемента кучи.
Для того, чтобы вводить перечисление кучи HeapWalk, установившее lpData на НЕДЕЙСТВИТЕЛЬНЫЙ. Если битовый флаг PROCESS_HEAP_REGION установлен в элементе wFlags, точки lpData на первый виртуальный адрес использованных областью. Если битовый флаг PROCESS_HEAP_UNCOMMITTED_RANGE установлен в wFlags, точках lpData на начало дипазона неприсоединившейся памяти.
cbData
Определяет размер, в байтах, части данных элемента кучи.
Если битовый флаг PROCESS_HEAP_REGION установлен в wFlags, cbData определяет общий размер, в байтах, пространства адреса, который зарезервирован для этой области. Если битовый флаг PROCESS_HEAP_UNCOMMITTED_RANGE установлен в wFlags, cbData определяет размер, в байтах, дипазона неприсоединившейся памяти.
cbOverhead
Определяет размер, в байтах, данных использованных системой, чтобы поддерживать информацию об элементе кучи. Эти подвесные байты - дополнительно к байтам cbData части данных элемента кучи.
Если битовый флаг PROCESS_HEAP_REGION установлен в wFlags, cbOverhead определяет размер, в байтах, управляющих структур кучи, который описывает область. Если битовый флаг PROCESS_HEAP_UNCOMMITTED_RANGE установлен в wFlags, cbOverhead определяет размер, в байтах, управляющих структур, который описывает этот неприсоединившийся дипазон.
iRegionIndex
Идентифицирует область кучи, которая содержит элемент кучи. Куча состоит из одной или более областей виртуальной памяти, каждая с уникальным индексом области.
На первом входе кучи возвращанном для большинства областей кучи, HeapWalk устанавливает флаг PROCESS_HEAP_REGION в элементе wFlags. Когда этот флаг установлен, участники структуры Области содержат дополнительную информацию об области. Функция HeapAlloc иногда использует функцию VirtualAlloc, чтобы распределять больших блоков из кучи growable. Менеджер кучи рассматривает такое большое блочное распределение как отдельную область с уникальным индексом области. HeapWalk НЕ делает устанавливать флаг PROCESS_HEAP_REGION на входе кучи возвращанном для большой блочной области, так что участники структуры Области недействительны. Вы можете использовать функцию VirtualQuery, чтобы получать дополнительную информацию о большой блочной области.
wFlags
Установка бита сигнализирует, что определяет свойства элемента кучи. Некоторые из них флаги влияют на значение других участников этой структуры данных PROCESS_HEAP_ENTRY. Битовый флаг следующих констант определен:
Значение Величины PROCESS_HEAP_REGION Если этот флаг установлен, элемент кучи расположен в начале области непрерывной виртуальной памяти в использовании кучей. Если этот флаг установлен, элемент lpData структуры указывает на первый виртуальный адрес использованный областью; элемент cbData определяет общий размер, в байтах, пространства адреса, который зарезервирован для этой области; и элемент cbOverhead определяет размер, в байтах, управляющих структур кучи, который описывает область.Если этот флаг установлен, структура Области становится правильной. dwCommittedSize, dwUnCommittedSize, lpFirstBlock, И участники lpLastBlock структуры содержат дополнительную информацию об области. PROCESS_HEAP_UNCOMMITTED_RANGE Если этот флаг установлен, элемент кучи расположен в дипазоне неприсоединившейся памяти в пределах области кучи. Если этот флаг установлен, элемент lpData указывает на начало дипазона неприсоединившейся памяти; элемент cbData определяет размер, в байтах, дипазона неприсоединившейся памяти; и элемент cbOverhead определяет размер, в байтах, управляющих структур, который описывает этот неприсоединившийся дипазон. PROCESS_HEAP_ENTRY_BUSY Если этот флаг установлен, элемент кучи является размещенным блоком. Если как этот флаг так и флаг PROCESS_HEAP_ENTRY_MOVEABLE установлены, Блок структуры становится правильным. Элемент hMem Блока структуры содержит ручку размещенному, перемещаемому блоку памяти. PROCESS_HEAP_ENTRY_MOVEABLE Этого флага только правильный если флаг PROCESS_HEAP_ENTRY_BUSY установлен, указывая, что элемент кучи является размещенным блоком.Если этот флаг - в силе и установленное, блок был распределен LMEM_MOVEABLE или флагом GMEM_MOVEABLE, и Блок структуры становится правильным. Элемент hMem Блока структуры содержит ручку размещенному, перемещаемому блоку памяти. PROCESS_HEAP_ENTRY_DDESHARE Этого флага только правильный если флаг PROCESS_HEAP_ENTRY_BUSY установлен, указывая, что элемент кучи является размещенным блоком.Если этот флаг - в силе и установленное, блок был распределен флагом GMEM_DDESHARE. Для дискуссии флага GMEM_DDESHARE, смотри GlobalAlloc.
Блок
Эта структура - в силе только если как PROCESS_HEAP_ENTRY_BUSY так и флаги PROCESS_HEAP_ENTRY_MOVEABLE в wFlags установлены.
Участники Блока структуры - следующим образом:
Описание Элемента hMem Содержит ручку размещенному, перемещаемому блоку памяти. dwReserved Зарезервированное; не использованное.
Область
Эта структура - в силе только если флаг PROCESS_HEAP_REGION установлен в элементе wFlags.
Участники структуры Области - следующим образом:
Описание Элемента dwCommittedSize ОПРЕДЕЛЯЕТ количество байтов в области кучи, которая к настоящему времени совершена как свободная память блокируется, занятые блоки памяти, или управляющие структуры кучи.Это - дополнительная область, которая установлена в нуль если количество совершенных байтов не доступно. dwUnCommittedSize ОПРЕДЕЛЯЕТ количество байтов в области кучи, которая к настоящему времени неприсоединившаяся.Это - дополнительная область, которая установлена в нуль если количество неприсоединившихся байтов не доступно. УКАЗАТЕЛЬ lpFirstBlock первому правильному блоку памяти в этой области кучи. УКАЗАТЕЛЬ lpLastBlock первому неправильному блоку памяти в thisheap области.
Смотри Также
GlobalAlloc, HeapAlloc, HeapWalk, VirtualAlloc, VirtualQuery
|
|
|
|
| |