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 はリージョンで使用される最初の仮想アドレスを指します。

wFlagsPROCESS_HEAP_UNCOMMITTED_RANGEが使用されている場合、lpData はコミットされていないメモリの範囲の先頭を指します。

cbData

ヒープ要素のデータ部分のサイズ (バイト単位)。

wFlagsPROCESS_HEAP_REGIONを使用する場合、cbData は、このリージョン用に予約されているアドレス空間の合計サイズ (バイト単位) を指定します。

wFlagsPROCESS_HEAP_UNCOMMITTED_RANGEを使用する場合、cbData はコミットされていないメモリの範囲のサイズをバイト単位で指定します。

cbOverhead

ヒープ要素に関する情報を保持するためにシステムによって使用されるデータのサイズ (バイト単位)。 これらのオーバーヘッド バイトは、ヒープ要素のデータ部分の cbData バイトに追加されます。

wFlagsPROCESS_HEAP_REGIONを使用する場合、cbOverhead は、領域を記述するヒープ制御構造体のサイズをバイト単位で指定します。

wFlagsPROCESS_HEAP_UNCOMMITTED_RANGEを使用する場合、cbOverhead は、このコミットされていない範囲を記述するコントロール構造体のサイズをバイト単位で指定します。

iRegionIndex

ヒープ要素を含むヒープ領域へのハンドル。 ヒープは、仮想メモリの 1 つ以上のリージョンで構成され、それぞれが一意のリージョン インデックスを持つ。

ほとんどのヒープ領域で返される最初のヒープ エントリでは、HeapWalkwFlags メンバーの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_MOVEABLE または GMEM_MOVEABLEで割り当てられ、 Block 構造体が有効になります。 Block 構造体の hMem メンバーには、割り当てられた移動可能なメモリ ブロックへのハンドルが含まれています。

PROCESS_HEAP_REGION
0x0001
heap 要素は、ヒープで使用されている連続する仮想メモリの領域の先頭にあります。

構造体の lpData メンバーは、リージョンで使用される最初の仮想アドレスを指します。 cbData メンバーは、このリージョン用に予約されているアドレス空間の合計サイズをバイト単位で指定します。 cbOverhead メンバーは、領域を記述するヒープ制御構造体のサイズをバイト単位で指定します。

Region 構造体が有効になります。 構造体の dwCommittedSizedwUnCommittedSizelpFirstBlock、および lpLastBlock メンバーには、リージョンに関する追加情報が含まれています。

PROCESS_HEAP_UNCOMMITTED_RANGE
0x0002
ヒープ要素は、ヒープ領域内のコミットされていないメモリの範囲内にあります。

lpData メンバーは、コミットされていないメモリの範囲の先頭を指します。cbData メンバーは、コミットされていないメモリの範囲のサイズをバイト単位で指定します。cbOverhead メンバーは、このコミットされていない範囲を記述するコントロール構造体のサイズをバイト単位で指定します。

DUMMYUNIONNAME

DUMMYUNIONNAME.Block

この構造体は、 PROCESS_HEAP_ENTRY_BUSYPROCESS_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 (デスクトップ アプリのみ)
Header minwinbase.h (Windows.h を含む)

こちらもご覧ください

GlobalAlloc

HeapAlloc

HeapWalk

VirtualAlloc

VirtualQuery