PROCESS_HEAP_ENTRY

【勇芳软件工作室】汉化HomePreviousNext

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

标识包含堆元素的堆区域。堆由一个或多个虚拟内存区域组成,每个区域都具有唯一的区域索引。

在大多数堆区域返回的第一个堆条目中,HeapWalkwFlags成员中设置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.成员指定描述该区域的堆控制结构的大小(以字节为单位)。

如果设置了此标志,则地区结构生效。该结构的dwCommittedSizedwUnCommittedSizelpFirstBlocklpLastBlock成员包含有关该地区的其他信息。

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