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 (カーネル モード) |