Freigeben über


RtlCaptureStackBackTrace-Funktion (ntifs.h)

Die RtlCaptureStackBackTrace Routine erfasst eine Stapelablaufverfolgung, indem sie den Stapel durchgehen und die Informationen für jeden Frame aufzeichnen.

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 Zurückablaufverfolgung übersprungen werden sollen.

[in] FramesToCapture

Anzahl der zu erfassenden Frames.

[out] BackTrace

Vom Aufrufer zugewiesenes Array, in dem Zeiger auf die von der aktuellen Stapelablaufverfolgung erfassten Absenderadressen zurückgegeben werden.

[out, optional] BackTraceHash

Optionaler Wert, der zum Organisieren von Hashtabellen verwendet werden kann. Wenn dieser Parameter NULL ist, wird RtlCaptureStackBackTrace keinen Hashwert berechnen und zurückgeben.

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

Rückgabewert

Die Anzahl der erfassten Frames.

Bemerkungen

RtlCaptureStackBackTrace erfasst eine Stapelablaufverfolgung für den Aufrufer, indem der Stapel durchlaufen wird (zurück in der Anrufzeit) und Aufzeichnungsinformationen für jeden Frame. Insbesondere gibt RtlCaptureStackBackTrace Zeiger auf die Absenderadressen der einzelnen Aufrufe im Stapel zurück, wobei der erste Zeiger im BackTrace Array auf die Absenderadresse des letzten Aufrufs verweist usw.

Mithilfe von Hashwerten für die Zurückverfolgung können Sie schnell ermitteln, 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 eigene Hashwerte berechnen möchten, legen Sie BackTraceHash- auf NULL fest.

Normalerweise können Sie auf 64-Bit-Computern den Kernelstapel nicht in bestimmten Kontexten erfassen, wenn Seitenfehler nicht zulässig sind. Um das Ausführen 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 temporäre Diagnosezwecke erfolgen, da dadurch die Arbeitsspeicherauslastung des Systems erhöht wird.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows XP
Zielplattform- Universal
Header- ntifs.h (einschließlich Ntifs.h, FltKernel.h)
Library NtosKrnl.lib; OneCoreUAP.lib unter Windows 10
DLL- NtDll.dll (Benutzermodus); NtosKrnl.exe (Kernelmodus)