共用方式為


如何定義自定義數據類型?

Windows 事件追蹤 (ETW) 定義數個簡單且複雜的類型,以用於追蹤函式。 這些類型會在 Defaultwpp.ini 檔案中宣告。 不過,您可以建立自己的自定義數據類型。

當您想要宣告變數並使用有意義的字詞來描述變數的值時,請使用自定義數據類型,而不是 integers。

例如, DiskState 變數包含磁碟的狀態。 以下是 DiskState 的值:

DiskOffline = 0
DiskOnline = 1
DiskFailed = 2
DiskStalled = 3

您不必在追蹤訊息中讀取 「DiskState=2」,而必須查閱 2 的意義,您可以定義名為 DiskState 的自定義類型,以取得指出“ DiskState 為 Failed” 的追蹤訊息。

建立自定義數據類型

若要建立自定義數據類型,請完成下列步驟:

  1. 建立具有 .ini 擴展名的本機組態檔,例如 localwpp.ini。 您無法將自訂類型新增至標頭或原始程序檔。

  2. 使用 TYPEMACRO 常數來定義自訂數據類型。

  3. 識別來源或頭檔中的組態數據。

  4. -ini 參數新增至來源檔案中的 RUN_WPP 巨集。

  5. 在追蹤訊息中使用自定義數據類型。

定義 TYPEMACRO 常數

定義具有下列格式的 TYPEMACRO 常數。 這些值會定義為字串清單。

TYPEMACRO(Type,{ItemListLong | ItemListShort | ItemListByteShort | ItemListByteLong},(Value1,Value2...));

地點:

ItemListShort
帶正負號的16位整數。

ItemListLong
帶正負號或未帶正負號的 32 位整數。

ItemSetByteShort
帶正負號的16位值。

ItemSetByteLong
帶正負號或未帶正負號的 32 位值。

例如:

TYPEMACRO(DiskState,ItemListLong(DiskOffline,DiskOnline,DiskFailed,DiskStalled));

識別組態數據

如果您將自定義數據類型新增至具有其他程式代碼的檔案,例如原始程式檔或頭檔,請使用 begin_wpp組態end_wpp 語句來識別檔案中的組態數據。 例如:

// begin_wpp config
    //TYPEMACRO(DiskState,ItemListLong(DiskOffline,DiskOnline,DiskFailed,DiskStalled));
// end_wpp

如果您將自定義數據類型新增至本機組態檔,則不需要 begin_wpp組態end_wpp 語句。

新增 -ini 參數

當您建立自定義類型的本機組態檔時,必須將 -ini 參數新增至叫用 WPP 預處理器的 RUN_WPP 語句。

-ini 參數會指示 ETW 除了使用 Defaultwpp.ini之外,還搜尋組態檔 (.ini) 中的組態數據。 例如:

RUN_WPP -km -ini:localwpp.ini

這很重要

您不得在使用者模式應用程式或動態連結庫 (DLL) 的 RUN_WPP 指示詞中指定 -km 參數。

使用自訂數據類型

定義自定義數據類型之後,就可以在追蹤訊息中使用。 在類型名稱前面加上百分比符號 (%),並以驚嘆號 (!) 括住它。 例如:

DoTraceMessage(INFO,"Disk State is %!diskstate!",DiskState); 

產生的追蹤訊息會使用您定義的常數來表示值:

DiskState is Offline.