Freigeben über


RtlCaptureStackBackTrace-Funktion (ntifs.h)

Die RtlCaptureStackBackTrace-Routine erfasst eine Stapelüberwachung, indem der Stapel durchlaufen und die Informationen für jeden Frame aufgezeichnet werden.

Syntax

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

Parameter

[in] FramesToSkip

Anzahl der Frames, die vom Startpunkt (aktueller Aufrufpunkt) der Rückverfolgung übersprungen werden sollen.

[in] FramesToCapture

Anzahl der zu erfassenden Frames.

[out] BackTrace

Vom Aufrufer zugeordnetes Array, in dem Zeiger auf die Rückgabeadressen zurückgegeben werden, die aus der aktuellen Stapelüberwachung erfasst wurden.

[out, optional] BackTraceHash

Optionaler Wert, der zum Organisieren von Hashtabellen verwendet werden kann. Wenn dieser Parameter NULL ist, wird rtlCaptureStackBackTrace nicht berechnet und gibt keinen Hashwert zurück.

Dieser Hashwert wird basierend auf den Werten der im BackTrace-Array zurückgegebenen Zeiger berechnet. Zwei identische Stapelablaufverfolgungen generieren identische Hashwerte.

Rückgabewert

Die Anzahl der erfassten Frames.

Bemerkungen

RtlCaptureStackBackTrace erfasst eine Stapelablaufverfolgung für den Aufrufer, indem der Stapel durchlaufen (in der Anrufzeit zurück) und Informationen für jeden Frame aufgezeichnet werden. Insbesondere gibt RtlCaptureStackBackTrace Zeiger auf die Rückgabeadressen jedes Aufrufs im Stapel zurück, wobei der erste Zeiger im BackTrace-Array auf die Rückgabeadresse des letzten Aufrufs verweist usw.

Back-Trace-Hashwerte können verwendet werden, um schnell zu bestimmen, ob zwei Stapelablaufverfolgungen identisch oder unterschiedlich sind. Sie können den in BackTraceHash zurückgegebenen Hash verwenden, um Stapelablaufverfolgungen zu vergleichen. Wenn Sie keine Hashes verwenden oder Ihre eigenen Hashwerte berechnen möchten, legen Sie BackTraceHash auf NULL fest.

In der Regel können Sie auf 64-Bit-Computern den Kernelstapel in bestimmten Kontexten nicht erfassen, wenn Seitenfehler nicht zulässig sind. Um das Durchlaufen des Kernelstapels auf x64 zu aktivieren, legen Sie den Registrierungswert DisablePagingExecutive Memory Management auf 1 fest. Der Registrierungswert DisablePagingExecutive befindet sich unter dem folgenden Registrierungsschlüssel: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management. Dies sollte nur für vorübergehende Diagnosezwecke erfolgen, da dadurch die Speicherauslastung des Systems erhöht wird.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP
Zielplattform Universell
Header ntifs.h (include Ntifs.h, FltKernel.h)
Bibliothek NtosKrnl.lib; OneCoreUAP.lib auf Windows 10
DLL NtDll.dll (Benutzermodus); NtosKrnl.exe (Kernelmodus)