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

如果在 wFlags 成员中使用PROCESS_HEAP_REGION则 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 使用 wFlags 成员中的PROCESS_HEAP_REGION。 使用此值时, Region 结构的成员包含有关该区域的其他信息。

HeapAlloc 函数有时使用 VirtualAlloc 函数从可增长的堆中分配大型块。 堆管理器将此类大型块分配视为具有唯一区域索引的单独区域。 HeapWalk 不使用为大型块区域返回的堆条目中的 PROCESS_HEAP_REGION ,因此 Region 结构的成员无效。 可以使用 VirtualQuery 函数获取有关大型块区域的其他信息。

wFlags

堆元素的属性。 某些值会影响此 PROCESS_HEAP_ENTRY 数据结构的其他成员的含义。 定义了以下值。

含义
PROCESS_HEAP_ENTRY_BUSY
0x0004
堆元素是分配的块。

如果还指定 了 PROCESS_HEAP_ENTRY_MOVEABLE则 Block 结构将变为有效。 Block 结构的 hMem 成员包含已分配的可移动内存块的句柄。

PROCESS_HEAP_ENTRY_DDESHARE
0x0020
此值必须与 PROCESS_HEAP_ENTRY_BUSY一起使用,指示堆元素是分配的块。
PROCESS_HEAP_ENTRY_MOVEABLE
0x0010
此值必须与 PROCESS_HEAP_ENTRY_BUSY一起使用,指示堆元素是分配的块。

块分配有 LMEM_MOVEABLEGMEM_MOVEABLE 结构变为有效。 Block 结构的 hMem 成员包含已分配的可移动内存块的句柄。

PROCESS_HEAP_REGION
0x0001
堆元素位于堆正在使用的连续虚拟内存区域的开头。

结构的 lpData 成员指向区域使用的第一个虚拟地址; cbData 成员指定为此区域保留的地址空间的总大小(以字节为单位); 和 cbOverhead 成员指定描述区域的堆控制结构的大小(以字节为单位)。

区域结构将变为有效。 结构的 dwCommittedSizedwUnCommittedSizelpFirstBlocklpLastBlock 成员包含有关该区域的其他信息。

PROCESS_HEAP_UNCOMMITTED_RANGE
0x0002
堆元素位于堆区域中的一系列未提交的内存中。

lpData 成员指向未提交的内存范围的开头;cbData 成员指定未提交的内存范围的大小(以字节为单位);和 cbOverhead 成员指定描述此未提交范围的控制结构的大小(以字节为单位)。

DUMMYUNIONNAME

DUMMYUNIONNAME.Block

仅当 wFlags 中同时指定了PROCESS_HEAP_ENTRY_BUSYPROCESS_HEAP_ENTRY_MOVEABLE时,此结构才有效。

DUMMYUNIONNAME.Block.hMem

已分配的可移动内存块的句柄。

DUMMYUNIONNAME.Block.dwReserved[3]

保留;未使用。

DUMMYUNIONNAME.Region

仅当 wFlags 成员指定 PROCESS_HEAP_REGION时,此结构才有效。

DUMMYUNIONNAME.Region.dwCommittedSize

堆区域中当前作为可用内存块、繁忙内存块或堆控制结构提交的字节数。

这是一个可选字段,如果提交的字节数不可用,则设置为零。

DUMMYUNIONNAME.Region.dwUnCommittedSize

堆区域中当前未提交的字节数。

这是一个可选字段,如果未提交的字节数不可用,则设置为零。

DUMMYUNIONNAME.Region.lpFirstBlock

指向此堆区域中第一个有效内存块的指针。

DUMMYUNIONNAME.Region.lpLastBlock

指向此堆区域中第一个无效内存块的指针。

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
标头 minwinbase.h (包括 Windows.h)

另请参阅

GlobalAlloc

HeapAlloc

HeapWalk

VirtualAlloc

VirtualQuery