다음을 통해 공유


HeapWalk 함수(heapapi.h)

지정된 힙의 메모리 블록을 열거합니다.

구문

BOOL HeapWalk(
  [in]      HANDLE               hHeap,
  [in, out] LPPROCESS_HEAP_ENTRY lpEntry
);

매개 변수

[in] hHeap

힙에 대한 핸들입니다. 이 핸들은 HeapCreate 또는 GetProcessHeap 함수에서 반환됩니다.

[in, out] lpEntry

특정 힙 열거형에 대한 상태 정보를 유지하는 PROCESS_HEAP_ENTRY 구조체에 대한 포인터입니다.

HeapWalk 함수가 성공하면 TRUE 값을 반환하면 이 구조체의 멤버는 힙의 다음 메모리 블록에 대한 정보를 포함합니다.

힙 열거형을 시작하려면 PROCESS_HEAP_ENTRY 구조체의 lpData 필드를 NULL로 설정합니다. 특정 힙 열거형을 계속하려면 hHeap, lpEntry 또는 PROCESS_HEAP_ENTRY 구조체의 멤버를 변경하지 않고 HeapWalk 함수를 반복적으로 호출합니다.

반환 값

함수가 성공하면 반환 값이 0이 아닙니다.

함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

힙의 끝에 도달하여 힙 열거가 성공적으로 종료되면 함수는 FALSE를 반환하고 GetLastErrorERROR_NO_MORE_ITEMS 오류 코드를 반환합니다.

설명

HeapWalk 함수는 힙 열거가 잠재적으로 시간이 많이 걸리는 작업이므로 디버깅에 주로 유용합니다. 열거 중에 힙을 잠그면 다른 스레드가 힙에 액세스하지 못하게 되며, 특히 대칭 SMP(다중 처리) 컴퓨터에서 성능이 저하할 수 있습니다. 부작용은 힙이 잠금 해제될 때까지 지속될 수 있습니다. HeapLockHeapUnlock 함수를 사용하여 힙 열거 중에 힙 잠금을 제어합니다.

힙 열거를 시작하려면 lpEntryNULL로 설정한 PROCESS_HEAP_ENTRY 구조체의 lpData 필드를 사용하여 HeapWalk를 호출합니다.

힙 열거형을 계속하려면 동일한 hHeaplpEntry 값을 사용하여 HeapWalk를 호출하고, 이전의 HeapWalk 호출에서 변경되지 않은 PROCESS_HEAP_ENTRY 구조를 사용합니다. 추가 열거가 필요하지 않거나 함수가 FALSE 를 반환하고 GetLastErrorERROR_NO_MORE_ITEMS 반환할 때까지 이 프로세스를 반복하여 힙의 모든 메모리 블록이 열거되었음을 나타냅니다.

PROCESS_HEAP_ENTRY 구조체의 내용 외부에서 열거형 상태 데이터가 유지 관리되지 않으므로 힙 열거형을 종료하기 위해 HeapWalk의 특별한 호출이 필요하지 않습니다.

힙 열거 중에 힙이 잠겨 있지 않으면 다중 스레드 애플리케이션에서 HeapWalk가 실패할 수 있습니다.

예제

힙 열거

요구 사항

   
지원되는 최소 클라이언트 Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 heapapi.h(Windows.h 포함)
라이브러리 Kernel32.lib
DLL Kernel32.dll

참고 항목

힙 함수

HeapLock

HeapReAlloc

HeapUnlock

HeapValidate

메모리 관리 함수

PROCESS_HEAP_ENTRY