事件追蹤 MOF 限定詞

建立提供者 MOF 類別事件 MOF 類別、事件種類 MOF 類別,以及事件種類 MOF 類別的屬性時,請使用本節中定義的限定詞。 如需包含其中一些限定詞的範例,請參閱 發佈您的事件架構

提供者 MOF 類別限定詞

下表列出您可以在提供者 MOF 類別上指定的限定詞。

Qualifier 資料類型 描述
Guid String 必要。 可唯一識別提供者的字串 Guid。 例如,Guid (「{3F92E6E0-9886-434e-85DB-0D11D3904C0A}」) 。 當您呼叫 RegisterTraceGuids 函式來註冊您的提供者時,這是您所使用的相同 GUID。

 

事件 MOF 類別限定詞

下表列出您可以在事件類別上指定的限定詞, (群組相關事件種類類別的父類別) 。

Qualifier 資料類型 描述
Guid String 必要。 識別事件類別的字串 Guid。 例如,Guid (「{3F92E6E0-9886-434e-85DB-0D11D3904C0A}」) 。 事件提供者會使用 Guid 來設定 EVENT_TRACE_HEADER。Guid 成員,讓取用者可以判斷他們接收的事件類別。
EventVersion 整數 這個限定詞對於最新版的事件追蹤類別而言是選擇性的,而且是類別所有舊版的必要專案。 類別的最新版本未指定 EventVersion 限定詞,或具有最高的版本號碼。 版本號碼開頭為 0,例如 EventVersion (0) 。一般而言,當您建立新版本的 類別時,也會將舊版重新命名為 < classname > _Vn,其中 n 是從 0 開始的累加編號。 如需範例,請參閱 FileIoFileIo_V0

 

事件種類 MOF 類別限定詞

下表列出您可以在事件種類類別上指定的限定詞, (定義事件屬性資料的類別) 。

Qualifier 描述
EventType 整數 必要。 識別事件種類類別。 例如,EventType (1) 。 事件提供者會使用相同的事件種類值來設定 EVENT_TRACE_HEADER。Class.Type。 如果多個事件種類使用相同的 MOF 類別 (,因為它們使用相同的事件資料) ,請將事件種類值指定為整數陣列,例如 EventType {12,15} 。
EventTypeName String 選擇性。 描述事件種類。 例如,EventTypeName (「Start」) 。 如果多個事件種類使用相同的 MOF 類別, (因為使用相同的事件資料) ,請將事件種類名稱值指定為字串陣列,例如 EventTypeName{「Start」、「End」}。 EventTypeName 陣列的專案會直接對應至 EventType 陣列。

 

屬性限定詞

下表列出您可以在 屬性上指定的限定詞。

Qualifier 描述
點陣圖 指定對應至字串值的位位置。 如果您指定此限定詞,您也必須指定 BitValues 限定詞。
BitValues 字串值。 如果同時指定 BitMap 限定詞,字串會直接對應至 BitMap 限定詞中的值。 否則,假設屬性值是值字串中的單一索引, (位一對應至清單中的第一個字串) 。
副檔名 提供有關如何取用 (解譯) 資料的其他資訊。 擴充值不區分大小寫。 以引號括住值,例如 Extension (「Guid」) 。 可能的延伸值包括:
Guid
表示屬性資料是 Guid。 MOF 資料類型必須是 物件。 承載必須是 GUID 結構。
IPAddr 和 IPAddrV4
資料是 IP V4 位址。 MOF 資料類型必須是 物件。 承載必須是未簽署的 long。 不帶正負號 long 的每個位元組都代表 ip 位址 (p1.p2.p3.p4) 的四個部分之一。 低序位元組包含 p1 的值、下一個位元組包含 p2 的值等等。
在 Windows Vista 之前: 不支援 IPAddrV4 擴充功能。
IPAddrV6
資料是 IP V6 位址。 MOF 資料類型必須是 物件。 承載必須是 IN6_ADDR 結構。
在 Windows Vista 之前: 不支援 IPAddrV6 擴充功能。
NoPrint
表示取用者不應該列印此資料。
港口
資料會識別埠號碼。 MOF 資料類型必須是 物件。 承載必須是未簽署的簡短。
RString
分行符號已取代為空格。 承載必須是以 Null 結尾的 ANSI 字串。
RWString
分行符號已取代為空格。 承載必須是以 Null 結尾的寬字元字串。
資料代表二進位 Blob SID。 MOF 資料類型必須是 物件
SID 是可變長度。 前 4 個位元組中包含的值 (ULONG) 指出 Blob 是否包含 SID。 如果 Blob 的前 4 個位元組 (ULONG) 為非零,Blob 就會包含 SID。 Blob 的第一個部分包含結構在 8 位元組界限上對齊TOKEN_USER () ,而第二個部分則包含 SID。 若要解決 Blob 的 SID 部分:
  • 設定 Blob 開頭的位元組指標
  • 將事件記錄檔的指標大小乘以 2,並將產品新增至位元組指標, (TRACE_LOGFILE_HEADERPointerSize成員包含指標大小值)

您可以使用下列宏來判斷 SID 的長度。
#define SeLengthSid( Sid ) \
  (8 + (4 * ((SID *)Sid)->SubAuthorityCount))
SizeT
表示 屬性包含指標值。 指標值的大小取決於用來記錄事件的作業系統;承載將包含 32 位系統的 4 位元組值,或 64 位系統的 8 位元組值。 MOF 資料類型必須是 物件
如果屬性包含SizeT延伸模組,取用者應該忽略資料類型和Format限定詞。 若要判斷要讀取屬性的資料大小,請使用:
在 Windows Vista 之前:PointerSize值可能不正確。 例如,在 64 位電腦上,32 位應用程式會記錄 4 位元組指標;不過,會話會將 PointerSize 設定為 8。
變異
資料代表 Blob。 前四個位元組 (uint32) 表示 Blob 的大小。 MOF 資料類型必須是 物件
WmiTime
將時間戳記轉譯為系統時間。 MOF 資料類型必須是 物件。 承載必須是不帶正負號的 64 位整數。
在 Windows Vista 之前: 無法使用。
格式 定義屬性資料的格式。 例如,在字串屬性上包括 Format (「w」) ,表示字串是寬字元串。 可能的值包括:
詞彙 描述
C
將屬性值顯示為 ASCII 字元。 您可以使用此限定詞搭配 uint8 資料類型。
s
將字元陣列視為以 Null 結尾的字串。 如果資料類型為 char16,則字串為寬字元字串;否則,字串是 ASCII 字元字串。
w
屬性值是寬字元字串。 您可以搭配 字串 資料類型使用此限定詞。
X
將屬性值顯示為十六進位數。 您可以使用這個限定詞搭配 16-、32 和 64 位整數資料類型。

 

指標

表示 屬性包含指標值。 指標值的大小取決於用來記錄事件的作業系統;承載將包含 32 位系統的 4 位元組值,或 64 位系統的 8 位元組值。 MOF 資料類型必須是 物件

如果屬性包含SizeT延伸模組,取用者應該忽略資料類型和Format限定詞。 若要判斷要讀取屬性的資料大小,請使用:

在 Windows Vista 之前:PointerSize值可能不正確。 例如,在 64 位電腦上,32 位應用程式會記錄 4 位元組指標;不過,會話會將 PointerSize 設定為 8。

請注意,某些事件使用 PointerType ,而不是 Pointer;請勿使用 PointerType

StringTermination 指出字串屬性如何終止。 例如,StringTermination (「NullTerminated」) 表示字串屬性為 null 終止。 可能的值包括:

字串的長度會內嵌在字串開頭做為 USHORT 值。

NotCounted

字串不是以 Null 結尾,字串的長度不會內嵌在字串的開頭。 在此情況下,字串應該是最後一個專案,並佔用事件資料結尾的所有空間。

NullTerminated

字串是以 Null 結尾。 如果您未指定 StringTermination 限定 符,則會假設字串為 Null 終止。

ReverseCounted

字串的長度會內嵌在字串開頭,以大端格式作為 USHORT 值。

ValueDescriptions 提供 限定詞中每個值的描述。 當您嘗試擷取關鍵字和層級資訊時, TdhEnumerateProviderFieldInformationTdhQueryProviderFieldInformation 函式會傳回這些描述。 描述是選擇性的。 如果您未提供描述,函式會傳回 Null。 如需詳細資訊 ,請參閱指定層級並啟用提供者的旗標值
ValueMap 指定對應至字串值的整數索引或旗標值。 如果您指定此限定詞,您也必須指定 Values 限定詞,並選擇性地指定 ValueType 限定詞。 請注意,ETW 不支援具有值對應值的字串的 WMI 選項。

下列範例示範如何使用 ValueMap、Values 和 ValueType 限定詞。

ValueType("flag"),
ValueMap {"0x01", "0x02", "0x04", "0x08"},
Values {"ValueMapFlag1", "ValueMapFlag2", "ValueMapFlag4", "ValueMapFlag8"}]
字串值。 如果也指定 ValueMap 限定詞,字串會直接對應至 ValueMap 限定詞中的值。 否則,假設屬性值是值字串中以零起始的索引。
ValueType 指出 ValueMap 值是否為整數索引值或位旗標值。 如果您未指定此限定詞,則會假設有整數索引值。 若要指定值為整數索引值,請使用 ValueType (「index」) 。 若要指定值是位旗標值,請使用 ValueType (「flag」) 。
WmiDataId 每個屬性都必須包含 WmiDataId 限定詞。 WmiDataId 會定義取用者讀取事件資料的順序。 WmiDataId的值從 1 開始,並遞增 類別中的每個屬性。 例如,WmiDataId (1) 。
XMLFragment 表示資料是 XML 格式,且準備好顯示,而不需進一步格式化。

 

指定層級並啟用提供者的旗標值

若要記錄控制器用來啟用提供者的層級和啟用旗標,請在提供者 MOF 類別中包含「層級」和「旗標」屬性。 Level 和 Flags 屬性名稱區分大小寫。 屬性必須包含 ValuesValueMap 限定詞,以指定可能的層級並啟用旗標值。 啟用旗標值的 ValueMap 必須是位 (旗標) 值。 ValueDescriptions限定詞是選擇性的,但您應該使用它來提供每個可能值的描述。 當有人呼叫 TdhEnumerateProviderFieldInformationTdhQueryProviderFieldInformation 函式以取得可能的層級,並啟用旗標 (關鍵字) 提供者的值時,就會使用描述。

以下顯示提供者類別,指定可能的層級和啟用旗標值。

[Dynamic,
 Description("IIS_Trace") : amended,
 guid("{3a2a4e84-4c21-4981-ae10-3fda0d9b0f83}"),
 locale("MS\\0x409")]
class IIS_Trace : EventTrace
{
    [Description ("Enable Flags") : amended,
        ValueDescriptions{
             "Allow_tracing_only_selected_requests ",
             "IIS_authentication_events ",
             "IIS_security_events ",
             "IIS_filter_events ",
             "IIS_static_file_events ",
             "IIS_CGI_events ",
             "IIS_compression_events ",
             "IIS_cache_events ",
             "IIS_request_notifications_events ",
             "IIS_module_events ",
             "IIS_FastCGI_events "},
        DefineValues{
             "UseUrlFilter",
             "IISAuthentication",
             "IISSecurity",
             "IISFilter",
             "IISStaticFile",
             "IISCGI",
             "IISCompression",
             "IISCache",
             "IISRequestNotification",
             "IISModule",
             "IISFastCGI"},
        Values{
             "UseUrlFilter",
             "IISAuthentication",
             "IISSecurity",
             "IISFilter",
             "IISStaticFile",
             "IISCGI",
             "IISCompression",
             "IISCache",
             "IISRequestNotification",
             "IISModule",
             "IISFastCGI"},
        ValueMap{
             "0x00000001",
             "0x00000002",
             "0x00000004",
             "0x00000008",
             "0x00000010",
             "0x00000020",
             "0x00000040",
             "0x00000080",
             "0x00000100",
             "0x00000200",
             "0x00001000"}: amended
    ]
    uint32 Flags;

    [Description ("Levels") : amended,
        ValueDescriptions{
            "Abnormal exit or termination",
            "Severe errors that need logging",
            "Warnings such as allocation failure",
            "Includes non-error cases",
            "Detailed traces from intermediate steps" } : amended,
         DefineValues{
            "TRACE_LEVEL_FATAL",
            "TRACE_LEVEL_ERROR",
            "TRACE_LEVEL_WARNING"
            "TRACE_LEVEL_INFORMATION",
            "TRACE_LEVEL_VERBOSE" },
        Values{
            "Fatal",
            "Error",
            "Warning",
            "Information",
            "Verbose" },
        ValueMap{
            "0x1",
            "0x2",
            "0x3",
            "0x4",
            "0x5" },
        ValueType("index")
    ]
    uint32 Level;
};