Share via


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 힙 열거형을 시작하려면 lpDataNULL로 설정합니다.

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

힙 요소를 포함하는 힙 영역에 대한 핸들입니다. 힙은 각각 고유한 지역 인덱스가 있는 하나 이상의 가상 메모리 영역으로 구성됩니다.

대부분의 힙 지역에 대해 반환된 첫 번째 힙 항목에서 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 지정하면 블록 구조가 유효해집니다. 블록 구조의 hMem 멤버에는 할당된 이동 가능한 메모리 블록에 대한 핸들이 포함되어 있습니다.

PROCESS_HEAP_ENTRY_DDESHARE
0x0020
이 값은 힙 요소가 할당된 블록임을 나타내는 PROCESS_HEAP_ENTRY_BUSY 함께 사용해야 합니다.
PROCESS_HEAP_ENTRY_MOVEABLE
0x0010
이 값은 힙 요소가 할당된 블록임을 나타내는 PROCESS_HEAP_ENTRY_BUSY 함께 사용해야 합니다.

블록이 LMEM_MOVEABLE 또는 GMEM_MOVEABLE 할당되었으며 Block 구조가 유효해집니다. 블록 구조의 hMem 멤버에는 할당된 이동 가능한 메모리 블록에 대한 핸들이 포함되어 있습니다.

PROCESS_HEAP_REGION
0x0001
힙 요소는 힙에서 사용 중인 연속 가상 메모리 영역의 시작 부분에 있습니다.

구조체의 lpData 멤버는 지역에서 사용하는 첫 번째 가상 주소를 가리킵니다. cbData 멤버는 이 지역에 예약된 주소 공간의 총 크기(바이트)를 지정합니다. 및 cbOverhead 멤버는 지역을 설명하는 힙 제어 구조의 크기(바이트)를 지정합니다.

지역 구조가 유효해집니다. 구조체의 dwCommittedSize, dwUnCommittedSize, lpFirstBlocklpLastBlock 멤버에는 지역에 대한 추가 정보가 포함됩니다.

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

현재 사용 가능한 메모리 블록, 사용 중인 메모리 블록 또는 힙 제어 구조로 커밋된 힙 영역의 바이트 수입니다.

커밋된 바이트 수를 사용할 수 없는 경우 0으로 설정된 선택적 필드입니다.

DUMMYUNIONNAME.Region.dwUnCommittedSize

현재 커밋되지 않은 힙 지역의 바이트 수입니다.

커밋되지 않은 바이트 수를 사용할 수 없는 경우 0으로 설정된 선택적 필드입니다.

DUMMYUNIONNAME.Region.lpFirstBlock

이 힙 지역의 첫 번째 유효한 메모리 블록에 대한 포인터입니다.

DUMMYUNIONNAME.Region.lpLastBlock

이 힙 지역의 첫 번째 잘못된 메모리 블록에 대한 포인터입니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
머리글 minwinbase.h(Windows.h 포함)

추가 정보

GlobalAlloc

HeapAlloc

HeapWalk

VirtualAlloc

Virtualquery