Freigeben über


PROCESS_HEAP_ENTRY-Struktur (minwinbase.h)

Enthält Informationen zu einem Heapelement. Die HeapWalk-Funktion verwendet eine PROCESS_HEAP_ENTRY-Struktur , um die Elemente eines Heaps aufzulisten.

Syntax

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;

Member

lpData

Ein Zeiger auf den Datenteil des Heapelements.

Um eine HeapWalk-Heapaufzählung zu initiieren, legen Sie lpData auf NULL fest.

Wenn PROCESS_HEAP_REGION im wFlags-Member verwendet wird, verweist lpData auf die erste virtuelle Adresse, die von der Region verwendet wird.

Wenn PROCESS_HEAP_UNCOMMITTED_RANGE in wFlags verwendet wird, verweist lpData auf den Anfang des Bereichs des Arbeitsspeichers ohne Commit.

cbData

Die Größe des Datenteils des Heapelements in Bytes.

Wenn PROCESS_HEAP_REGION in wFlags verwendet wird, gibt cbData die Gesamtgröße des Adressraums in Bytes an, der für diese Region reserviert ist.

Wenn PROCESS_HEAP_UNCOMMITTED_RANGE in wFlags verwendet wird, gibt cbData die Größe des Arbeitsspeicherbereichs ohne Commit in Bytes an.

cbOverhead

Die Größe der Daten, die vom System zum Verwalten von Informationen über das Heapelement in Bytes verwendet werden. Diese Mehraufwandbytes werden zusätzlich zu den cbData-Bytes des Datenteils des Heapelements verwendet.

Wenn PROCESS_HEAP_REGION in wFlags verwendet wird, gibt cbOverhead die Größe der Heapsteuerungsstrukturen in Bytes an, die den Bereich beschreiben.

Wenn PROCESS_HEAP_UNCOMMITTED_RANGE in wFlags verwendet wird, gibt cbOverhead die Größe der Steuerelementstrukturen in Bytes an, die diesen bereich ohne Commit beschreiben.

iRegionIndex

Ein Handle für den Heapbereich, der das Heapelement enthält. Ein Heap besteht aus einer oder mehreren Regionen mit virtuellem Arbeitsspeicher, die jeweils einen eindeutigen Regionsindex aufweisen.

Im ersten Heapeintrag, der für die meisten Heapregionen zurückgegeben wird, verwendet HeapWalk die PROCESS_HEAP_REGION im wFlags-Element . Wenn dieser Wert verwendet wird, enthalten die Member der Region-Struktur zusätzliche Informationen zur Region.

Die HeapAlloc-Funktion verwendet manchmal die VirtualAlloc-Funktion , um große Blöcke aus einem erweiterbaren Heap zuzuordnen. Der Heap-Manager behandelt eine solche große Blockzuordnung als separate Region mit einem eindeutigen Regionsindex. HeapWalk verwendet keine PROCESS_HEAP_REGION im Heapeintrag, der für einen großen Blockbereich zurückgegeben wird, sodass die Member der Region-Struktur ungültig sind. Sie können die VirtualQuery-Funktion verwenden, um zusätzliche Informationen zu einem großen Blockbereich abzurufen.

wFlags

Die Eigenschaften des Heapelements. Einige Werte wirken sich auf die Bedeutung anderer Member dieser PROCESS_HEAP_ENTRY Datenstruktur aus. Die folgenden Werte werden definiert.

Wert Bedeutung
PROCESS_HEAP_ENTRY_BUSY
0x0004
Das Heapelement ist ein zugeordneter Block.

Wenn auch PROCESS_HEAP_ENTRY_MOVEABLE angegeben ist, wird die Block-Struktur gültig. Das hMem-Element der Block-Struktur enthält ein Handle für den zugeordneten, beweglichen Speicherblock.

PROCESS_HEAP_ENTRY_DDESHARE
0x0020
Dieser Wert muss mit PROCESS_HEAP_ENTRY_BUSY verwendet werden, was angibt, dass das Heapelement ein zugeordneter Block ist.
PROCESS_HEAP_ENTRY_MOVEABLE
0x0010
Dieser Wert muss mit PROCESS_HEAP_ENTRY_BUSY verwendet werden, was angibt, dass das Heapelement ein zugeordneter Block ist.

Der Block wurde mit LMEM_MOVEABLE oder GMEM_MOVEABLE zugeordnet, und die Blockstruktur wird gültig. Das hMem-Element der Block-Struktur enthält ein Handle für den zugeordneten, beweglichen Speicherblock.

PROCESS_HEAP_REGION
0x0001
Das Heapelement befindet sich am Anfang eines bereichsübergreifenden virtuellen Speichers, der vom Heap verwendet wird.

Das lpData-Element der -Struktur verweist auf die erste virtuelle Adresse, die von der Region verwendet wird. der cbData-Member gibt die Gesamtgröße des Adressraums in Byte an, der für diese Region reserviert ist. und der cbOverhead-Member gibt die Größe der Heapsteuerungsstrukturen in Bytes an, die den Bereich beschreiben.

Die Region-Struktur wird gültig. Die Elemente dwCommittedSize, dwUnCommittedSize, lpFirstBlock und lpLastBlock der Struktur enthalten zusätzliche Informationen zur Region.

PROCESS_HEAP_UNCOMMITTED_RANGE
0x0002
Das Heapelement befindet sich in einem Bereich von Arbeitsspeicher ohne Commit innerhalb des Heapbereichs.

Der lpData-Member zeigt auf den Anfang des Bereichs des Arbeitsspeichers ohne Commit; der cbData-Member gibt die Größe des Speicherbereichs ohne Commit in Byte an. und das cbOverhead-Element gibt die Größe der Steuerelementstrukturen in Bytes an, die diesen Bereich ohne Commit beschreiben.

DUMMYUNIONNAME

DUMMYUNIONNAME.Block

Diese Struktur ist nur gültig, wenn sowohl die PROCESS_HEAP_ENTRY_BUSY als auch PROCESS_HEAP_ENTRY_MOVEABLE in wFlags angegeben sind.

DUMMYUNIONNAME.Block.hMem

Handle für den zugeordneten, beweglichen Speicherblock.

DUMMYUNIONNAME.Block.dwReserved[3]

Reserviert; nicht verwendet.

DUMMYUNIONNAME.Region

Diese Struktur ist nur gültig, wenn der wFlags-MemberPROCESS_HEAP_REGION angibt.

DUMMYUNIONNAME.Region.dwCommittedSize

Anzahl der Bytes in der Heapregion, die derzeit als freie Speicherblöcke, ausgelastete Speicherblöcke oder Heapsteuerungsstrukturen committet werden.

Dies ist ein optionales Feld, das auf 0 festgelegt wird, wenn die Anzahl der committeten Bytes nicht verfügbar ist.

DUMMYUNIONNAME.Region.dwUnCommittedSize

Anzahl der Bytes in der Heapregion, die derzeit nicht committiert werden.

Dies ist ein optionales Feld, das auf 0 festgelegt wird, wenn die Anzahl der bytes ohne Commit nicht verfügbar ist.

DUMMYUNIONNAME.Region.lpFirstBlock

Zeiger auf den ersten gültigen Speicherblock in dieser Heapregion.

DUMMYUNIONNAME.Region.lpLastBlock

Zeiger auf den ersten ungültigen Speicherblock in diesem Heapbereich.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [nur Desktop-Apps]
Kopfzeile minwinbase.h (windows.h einschließen)

Weitere Informationen

Globalalloc

HeapAlloc

HeapWalk

VirtualAlloc

Virtualquery