Поделиться через


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