(ntifs.h) RtlCaptureStackBackTrace 函式

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 Memory Management 登錄值設定為 1。 DisablePagingExecutive 登錄值位於下列登錄機碼底下:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management。 這應該僅供暫時診斷之用,因為它會增加系統的記憶體使用量。

規格需求

需求
最低支援的用戶端 Windows XP
目標平台 Universal
標頭 ntifs.h (包括 Ntifs.h、FltKernel.h)
程式庫 NtosKrnl.lib;Windows 10 上的 OneCoreUAP.lib
Dll NtDll.dll (使用者模式) ;NtosKrnl.exe (核心模式)