PROCESS_HEAP_ENTRY结构包含有关堆元素的信息。HeapWalk函数使用PROCESS_HEAP_ENTRY结构来枚举堆的元素。
typedef struct _PROCESS_HEAP_ENTRY {
PVOID lpData;
DWORD cbData;
BYTE cbOverhead;
BYTE iRegionIndex;
WORD wFlags;
工会{
struct {
HANDLE hMem;
DWORD dwReserved[ 3 ];
} Block;
struct {
DWORD dwCommittedSize;
DWORD dwUnCommittedSize;
LPVOID lpFirstBlock;
LPVOID lpLastBlock;
} Region;
};
} PROCESS_HEAP_ENTRY;
会员
的lpData
指向堆元素的数据部分。
要启动HeapWalk堆枚举,请将的lpData设置为NULL。
如果在wFlags成员中设置了PROCESS_HEAP_REGION位标志,则的lpData指向该区域使用的第一个虚拟地址。
如果在wFlags中设置了PROCESS_HEAP_UNCOMMITTED_RANGE位标志,则的lpData指向未提交内存范围的开头。
cbData
指定堆元素的数据部分的大小(以字节为单位)。
如果在wFlags中设置了PROCESS_HEAP_REGION位标志,则cbData指定为该区域保留的地址空间的总大小(以字节为单位)。
如果在wFlags中设置了PROCESS_HEAP_UNCOMMITTED_RANGE位标志,则cbData指定未提交内存范围的大小(以字节为单位)。
Identifies the heap region that contains the heap element.
指定系统使用的数据大小(以字节为单位),以维护关于堆元素的信息。这些开销字节是堆元素的数据部分的cbData字节之外。
如果在wFlags中设置了PROCESS_HEAP_REGION位标志,则Identifies the heap region that contains the heap element.指定描述该区域的堆控制结构的大小(以字节为单位)。
如果在wFlags中设置了PROCESS_HEAP_UNCOMMITTED_RANGE位标志,则Identifies the heap region that contains the heap element.指定描述此未提交范围的控制结构的大小(以字节为单位)。
iRegionIndex
标识包含堆元素的堆区域。堆由一个或多个虚拟内存区域组成,每个区域都具有唯一的区域索引。
在大多数堆区域返回的第一个堆条目中,HeapWalk在wFlags成员中设置PROCESS_HEAP_REGION标志。设置此标志时,地区结构的成员包含有关该区域的其他信息。
HeapAlloc函数有时使用VirtualAlloc函数从可扩展堆中分配大块。堆管理器将这样大的块分配视为具有唯一区域索引的单独区域。HeapWalk未在大块区域返回的堆条目中设置PROCESS_HEAP_REGION标志,因此地区结构的成员无效。您可以使用VirtualQuery功能获取有关大块区域的其他信息。
wFlags
一组位标志,用于指定堆元素的属性。其中一些标志影响了此PROCESS_HEAP_ENTRY数据结构的其他成员的含义。定义了以下位标志常量:
值 | 含义 |
PROCESS_HEAP_REGION | 如果设置此标志,则堆元素位于堆使用的连续虚拟内存区域的开头。 如果设置了此标志,则结构的的lpData成员指向该区域使用的第一个虚拟地址; cbData成员指定为该区域保留的地址空间的总大小(以字节为单位);并且Identifies the heap region that contains the heap element.成员指定描述该区域的堆控制结构的大小(以字节为单位)。 如果设置了此标志,则地区结构生效。该结构的dwCommittedSize,dwUnCommittedSize,lpFirstBlock和lpLastBlock成员包含有关该地区的其他信息。 |
PROCESS_HEAP_UNCOMMITTED_RANGE | 如果设置了此标志,则堆元素位于堆区域内未提交的存储器的范围内。 如果设置了此标志,则的lpData成员指向未提交内存范围的开头; cbData成员指定未提交内存范围的大小(以字节为单位)并且Identifies the heap region that contains the heap element.成员指定描述此未提交范围的控制结构的大小(以字节为单位)。 |
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. |
块
只有设置了wFlags中的PROCESS_HEAP_ENTRY_BUSY和PROCESS_HEAP_ENTRY_MOVEABLE标志,此结构才有效。
块结构的成员如下:
会员 | 描述 |
HMEM | 包含分配的可移动内存块的句柄。 |
//保留,必须设置为零 | Reserved; not used. |
地区
只有在wFlags成员中设置了PROCESS_HEAP_REGION标志,此结构才有效。
地区结构的成员如下:
会员 | 描述 |
dwCommittedSize | 指定当前作为空闲内存块,忙内存块或堆控制结构提交的堆区域中的字节数。 这是一个可选字段,如果已提交的字节数不可用,则设置为零。 |
dwUnCommittedSize | 指定当前未提交的堆区域中的字节数。 这是一个可选字段,如果未提交的字节数不可用,则设置为零。 |
lpFirstBlock | 指向此堆区域中第一个有效内存块的指针。 |
lpLastBlock | 指向本地区的第一个无效内存块。 |
也可以看看
GlobalAlloc, HeapAlloc, HeapWalk, VirtualAlloc, VirtualQuery