共用方式為


飛行中追蹤記錄器 (IFR) 用於記錄追蹤

進行中追蹤記錄器 (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.rcdrlogdumpwdfkd.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_TRACINGWPP_CLEANUP

如何將追蹤訊息傳送至自訂記錄

這僅適用於核心模式驅動程式 (KMDF 或 WDM) 。

對於大多數驅動程式來說,單一預設日誌就足夠了。 不過,在某些情況下,為不同的實體設定個別的記錄緩衝區會很有幫助。

例如,撰寫匯流排驅動程式時,您可能希望每個子裝置都有自己的緩衝區。 然後,您可以使用偵錯工具只導出特定子裝置的日誌。

若要設定自訂記錄,驅動程式必須包含 <WppRecorder.h>。 然後呼叫下列 API:

驅動程式也必須定義新的追蹤巨集,以日誌句柄作為第一個參數。 如需範例,請參閱 Toaster 範例驅動程式

如何將時間戳記資訊新增至自訂記錄

如果您的驅動程式呼叫 WppRecorderLogCreate 來建立其他記錄控制碼,則可以啟用某些記錄控制碼的時間戳記,但無法啟用其他記錄控制碼。

若要這樣做,您必須針對每個應該使用時間戳記的記錄句柄,在驅動程式程式碼中新增一行。 如需程式碼範例,請參閱 WppRecorderLogCreate

備註

這項功能從 WDK 組建 22557 開始提供。 如需以特定版本為目標的資訊,請參閱 建置不同 Windows 版本的驅動程式

如何在偵錯工具中檢視追蹤訊息

針對 KMDF 和 UMDF 驅動程式,請像往常一樣使用 !wdfkd.wdflogdump 。 它會列印出架構 IFR 記錄和驅動程式 IFR 記錄。

針對 WDM 驅動程式,請使用 !rcdrkd.rcdrloglist!rcdrkd.rcdrlogdump