Функция 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 (режим ядра) |