Функция 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; OneCoreUAP.lib в Windows 10
DLL NtDll.dll (пользовательский режим); NtosKrnl.exe (режим ядра)