進行中追蹤記錄器 (IFR) 是一項追蹤功能,可讓追蹤提供者,例如核心模式驅動程式或 UMDF 驅動程式,建立一組記憶體內部循環緩衝區,其中會保留最新的記錄訊息。 您可以使用偵錯工具檢視記錄訊息。
IFR 建立在 WPP 軟體追蹤之上。 IFR 相對於 WPP 的主要優點是它會自動開啟,而且您不需要事先啟動追蹤會話。
適用於:
- 最低作業系統:適用於 KMDF 和 WDM 驅動程式開發人員的 Windows 8
- 最低操作系統:適用於 UMDF (2.15) 驅動程序開發人員的 Windows 10
如何在 Visual Studio 中啟用進行中追蹤記錄器
首先,請遵循 將 WPP 軟體追蹤新增至 Windows 驅動程式中的步驟。
接下來,在 [專案] 屬性頁面的 [組態屬性->WPP 追蹤->函式和巨集選項->啟用飛行中追蹤記錄器] 底下,選取是。
最後,僅針對 UMDF,還有一個額外的步驟:在 [WPP 追蹤->函式] 和 [宏選項->前置處理器定義] 底下,新增 WPP_MACRO_USE_KM_VERSION_FOR_UM=1。
如何從命令列啟用進行中追蹤記錄器
如果您手動編輯.vcxproj檔案,請設定下列項目:
針對 KMDF 或 WDM 驅動程式:
<ClCompile Include=...>
<WppEnabled>true</WppEnabled>
<WppKernelMode>true</WppKernelMode>
<WppRecorderEnabled>true</WppRecorderEnabled>
...
</ClCompile>
針對 UMDF 驅動程式:
<ClCompile Include=...>
<WppEnabled>true</WppEnabled>
<WppRecorderEnabled>true</WppRecorderEnabled>
<WppPreprocessorDefinitions>WPP_MACRO_USE_KM_VERSION_FOR_UM=1</WppPreprocessorDefinitions>
...
</ClCompile>
如何配置飛行中追蹤記錄器參數
您可以在驅動程式的 [參數] 索引鍵下設定下列選擇性登錄項目來設定 IFR。
使用下列登錄項目:
日誌頁面:REG_DWORD
設定頁數以儲存預設日誌。 預設值為一個。
VerboseOn: REG_DWORD
預設值為零會導致 IFR 記錄錯誤、警告及參考事件。 設定為 1 可將詳細輸出新增至記錄檔。
WppRecorder_UseTimeStamp:REG_DWORD (從 WDK 組建 22557 開始提供)
驅動程式會將此條目設定為 1,以將時間戳記新增至記錄項目,然後可以使用 rcdrkd.rcdrlogdump 或 wdfkd.wdflogdump 檢視這些項目。
WppRecorder_PreciseTimeStamp:REG_DWORD (從 WDK 組建 22557 開始提供)
如果您想要更精確的時間戳記,除了 WppRecorder_UseTimeStamp之外,請使用上述相同的語法新增 WppRecorder_PreciseTimeStamp 。
範例
在下列範例中,在開始和結束註解之間新增行,將日誌頁數設定為兩個,並開啟時間戳記。
針對核心模式驅動程式:
[IfrSample_Service_Inst]
DisplayName = %IfrSample.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 3 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %12%\IfrSample.sys
; =============== START
AddReg = IfrSample_Service_Inst.AddReg
[IfrSample_Service_Inst.AddReg]
HKR, "Parameters", "LogPages", %REG_DWORD%, 2
HKR, "Parameters", "WppRecorder_UseTimeStamp", %REG_DWORD%, 1
; =============== END
[Strings]
REG_DWORD = 0x00010001
針對 UMDF 驅動程式:
[IfrSampleUm_Install]
UmdfLibraryVersion=$UMDFVERSION$
ServiceBinary=%13%\IfrSampleUm.dll
; =============== START
AddReg=IfrSampleUm_Install.AddReg
[IfrSampleUm_Install.AddReg]
HKR, "Parameters", "LogPages", %REG_DWORD%, 2
HKR, "Parameters", "WppRecorder_UseTimeStamp", %REG_DWORD%, 1
; =============== END
如何將追蹤訊息傳送至預設記錄檔
請遵循 將 WPP 軟體追蹤新增至 Windows 驅動程式中的指示。 例如:
- 在 DriverEntry 中,呼叫
WPP_INIT_TRACING(DriverObject, RegistryPath)。 - 在 EvtDriverUnload 中,呼叫
WPP_CLEANUP(WdfDriverWdmGetDriverObject(Driver))。
現在驅動程式可以視需要自由呼叫追蹤函式。 例如:TraceEvents(TRACE_LEVEL_ERROR, DBG_INIT, "WdfDriverCreate failed, %!STATUS!", ntStatus);
如需詳細資訊,請參閱 WPP_INIT_TRACING 和 WPP_CLEANUP。
如何將追蹤訊息傳送至自訂記錄
這僅適用於核心模式驅動程式 (KMDF 或 WDM) 。
對於大多數驅動程式來說,單一預設日誌就足夠了。 不過,在某些情況下,為不同的實體設定個別的記錄緩衝區會很有幫助。
例如,撰寫匯流排驅動程式時,您可能希望每個子裝置都有自己的緩衝區。 然後,您可以使用偵錯工具只導出特定子裝置的日誌。
若要設定自訂記錄,驅動程式必須包含 <WppRecorder.h>。 然後呼叫下列 API:
- WppRecorderLogCreate 來建立多個記錄緩衝區
- WppRecorderLogDelete ,然後再呼叫 WPP_CLEANUP。
- WppRecorderLogSetIdentifier 來設定指定記錄器記錄的字串識別碼 (選擇性)
- WppRecorderConfigure 以停用預設記錄檔 (選擇性)
驅動程式也必須定義新的追蹤巨集,以日誌句柄作為第一個參數。 如需範例,請參閱 Toaster 範例驅動程式。
如何將時間戳記資訊新增至自訂記錄
如果您的驅動程式呼叫 WppRecorderLogCreate 來建立其他記錄控制碼,則可以啟用某些記錄控制碼的時間戳記,但無法啟用其他記錄控制碼。
若要這樣做,您必須針對每個應該使用時間戳記的記錄句柄,在驅動程式程式碼中新增一行。 如需程式碼範例,請參閱 WppRecorderLogCreate。
備註
這項功能從 WDK 組建 22557 開始提供。 如需以特定版本為目標的資訊,請參閱 建置不同 Windows 版本的驅動程式。
如何在偵錯工具中檢視追蹤訊息
針對 KMDF 和 UMDF 驅動程式,請像往常一樣使用 !wdfkd.wdflogdump 。 它會列印出架構 IFR 記錄和驅動程式 IFR 記錄。
針對 WDM 驅動程式,請使用 !rcdrkd.rcdrloglist 和 !rcdrkd.rcdrlogdump。