RtlCaptureStackBackTrace 함수(ntifs.h)

RtlCaptureStackBackTrace 루틴은 스택을 걷고 각 프레임에 대한 정보를 기록하여 스택 추적을 캡처합니다.

구문

NTSYSAPI USHORT RtlCaptureStackBackTrace(
  [in]            ULONG  FramesToSkip,
  [in]            ULONG  FramesToCapture,
  [out]           PVOID  *BackTrace,
  [out, optional] PULONG BackTraceHash
);

매개 변수

[in] FramesToSkip

백 추적의 시작(현재 호출 지점)에서 건너뛸 프레임 수입니다.

[in] FramesToCapture

캡처할 프레임 수입니다.

[out] BackTrace

현재 스택 추적에서 캡처된 반환 주소에 대한 포인터가 반환되는 호출자 할당 배열입니다.

[out, optional] BackTraceHash

해시 테이블을 구성하는 데 사용할 수 있는 선택적 값입니다. 이 매개 변수가 NULL인 경우 RtlCaptureStackBackTrace 는 해시 값을 계산하고 반환하지 않습니다.

이 해시 값은 BackTrace 배열에서 반환된 포인터의 값을 기반으로 계산됩니다. 두 개의 동일한 스택 추적은 동일한 해시 값을 생성합니다.

반환 값

캡처된 프레임의 수입니다.

설명

RtlCaptureStackBackTrace 는 스택을 걷고(호출 시간에서 뒤로) 각 프레임에 대한 정보를 기록하여 호출자에 대한 스택 추적을 캡처합니다. 특히 RtlCaptureStackBackTrace 는 스택에서 각 호출의 반환 주소에 대한 포인터를 반환합니다. 여기서 BackTrace 배열의 첫 번째 포인터는 가장 최근 호출의 반환 주소를 가리킵니다.

백 추적 해시 값을 사용하여 두 스택 추적이 동일하거나 다른지 여부를 빠르게 확인할 수 있습니다. BackTraceHash에서 반환된 해시를 사용하여 스택 추적을 비교할 수 있습니다. 해시를 사용하지 않거나 고유한 해시 값을 계산하려는 경우 BackTraceHash 를 NULL로 설정합니다.

일반적으로 64비트 컴퓨터에서는 페이지 오류가 허용되지 않는 경우 특정 컨텍스트에서 커널 스택을 캡처할 수 없습니다. x64에서 커널 스택을 탐색할 수 있도록 하려면 DisablePagingExecutive Memory Management 레지스트리 값을 1로 설정합니다. DisablePagingExecutive 레지스트리 값은 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management 레지스트리 키 아래에 있습니다. 시스템의 메모리 사용량이 증가하므로 임시 진단 목적으로만 수행해야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows XP
대상 플랫폼 유니버설
헤더 ntifs.h(Ntifs.h, FltKernel.h 포함)
라이브러리 NtosKrnl.lib; Windows 10 OneCoreUAP.lib
DLL NtDll.dll(사용자 모드); NtosKrnl.exe(커널 모드)