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 陣列 中傳回的指標值來計算。 兩個相同的堆疊追蹤會產生相同的哈希值。
傳回值
擷取的畫面數。
言論
RtlCaptureStackBackTrace 藉由走回堆棧來擷取呼叫者的堆疊追蹤(在通話時間回溯),以及記錄每個畫面的資訊。 具體來說,RtlCaptureStackBackTrace 會將指標傳回堆棧上每個呼叫的傳回位址,其中 BackTrace 數位列中的第一個指標會指向最近呼叫的傳回位址等等。
回溯追蹤哈希值可用來快速判斷兩個堆疊追蹤是否相同或不同。 您可以使用 backTraceHash 中傳回 的哈希來比較堆棧追蹤。 如果您不想使用哈希,或想要計算自己的哈希值,請將 BackTraceHash 設為 NULL。
一般而言,在64位電腦上,當不允許頁面錯誤時,您無法在特定內容中擷取核心堆疊。 若要在 x64 上啟用逐步執行核心堆疊,請將 DisablePagingExecutive 記憶體管理登錄值設定為 1。 DisablePagingExecutive 登錄值位於下列登錄機碼底下:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management。 這應該僅用於暫時診斷,因為它會增加系統的記憶體使用量。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows XP |
目標平臺 | 普遍 |
標頭 | ntifs.h (include Ntifs.h, FltKernel.h) |
連結庫 | NtosKrnl.lib;Windows 10 上的 OneCoreUAP.lib |
DLL | NtDll.dll (使用者模式):NtosKrnl.exe (核心模式) |