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 配列で返されるポインターの値に基づいて計算されます。 同一の 2 つのスタック トレースでは、同一のハッシュ値が生成されます。

戻り値

キャプチャされたフレームの数。

解説

RtlCaptureStackBackTrace は、スタックを歩いて (呼び出し時間に戻る)、各フレームの情報を記録することで、呼び出し元のスタック トレースをキャプチャします。 具体的には、 RtlCaptureStackBackTrace は、スタック上の各呼び出しの戻りアドレスへのポインターを返します。 BackTrace 配列の最初のポインターは、最新の呼び出しの戻りアドレスを指します。

バック トレース ハッシュ値を使用すると、2 つのスタック トレースが同一か異なるかを迅速に判断できます。 BackTraceHash で返されるハッシュを使用して、スタック トレースを比較できます。 ハッシュを使用しない場合、または独自のハッシュ値を計算する場合 は、BackTraceHash を NULL に設定します。

通常、64 ビット コンピューターでは、ページ フォールトが許可されていない場合、特定のコンテキストでカーネル スタックをキャプチャすることはできません。 x64 でカーネル スタックのウォークを有効にするには、 DisablePagingExecutive Memory Management レジストリ値を 1 に設定します。 DisablePagingExecutive レジストリ値は、次のレジストリ キーの下にあります: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management。 これは、システムのメモリ使用量が増加するため、一時的な診断目的でのみ行う必要があります。

要件

要件
サポートされている最小のクライアント Windows XP
対象プラットフォーム ユニバーサル
Header ntifs.h (Ntifs.h、FltKernel.h を含む)
Library NtosKrnl.lib;Windows 10の OneCoreUAP.lib
[DLL] NtDll.dll (ユーザー モード);NtosKrnl.exe (カーネル モード)