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 메모리 관리 레지스트리 값을 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(커널 모드) |