共用方式為


事件追蹤MOF限定符

在建立 提供者 MOF 類別事件 MOF 類別事件類型 MOF 類別時定義的限定符,事件類型 MOF 類別的屬性。 如需包含其中一些限定符的範例,請參閱 發佈事件架構

提供者MOF類別限定符

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

限定 符 數據類型 描述
Guid 字串 必填。 可唯一識別提供者的字串 Guid。 例如,Guid(“{3F92E6E0-9886-434e-85DB-0D11D3904C0A}” 當您呼叫 RegisterTraceGuids 函式來註冊提供者時,這是您所使用的相同 GUID。

 

事件MOF類別限定符

下表列出您可以在事件類別上指定的限定元(將相關事件類型類別分組的父類別)。

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

 

事件類型MOF類別限定符

下表列出您可以在事件類型類別上指定的限定元(定義事件屬性數據的類別)。

限定 符 價值 描述
EventType 整數 必填。 識別事件類型類別。 例如 EventType(1)。 事件提供者會使用相同的事件類型值來設定 EVENT_TRACE_HEADER。Class.Type。 如果多個事件類型使用相同的 MOF 類別(因為它們使用相同的事件資料),請將事件類型值指定為整數陣列,例如 EventType{12,15}。
EventTypeName 字串 自選。 描述事件類型。 例如,EventTypeName(“Start”)。 如果多個事件類型使用相同的MOF類別(因為它們使用相同的事件數據),請將事件類型名稱值指定為字串陣列,例如EventTypeName{“Start”,“End”}。 EventTypeName 陣列的專案會直接對應至 EventType 陣列。

 

屬性限定元

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

限定 符 描述
BitMap 指定對應至字串值的位位置。 如果您指定此限定符,也必須指定 BitValues 限定符。
BitValues 字串值。 如果同時指定 BitMap 限定符,字串會直接對應至 BitMap 限定符中的值。 否則,假設屬性值是值字串中的一個基底索引(位一個對應至清單中的第一個字串)。
擴充功能 提供有關如何使用(解譯)數據的其他資訊。 擴充值不區分大小寫。 以引弧括住值,例如 Extension(“Guid” )。 可能的擴充值包括:
Guid
指出屬性數據是 Guid。 MOF 資料類型必須 物件。 承載必須是 GUID 結構。
IPAddr 和 IPAddrV4
數據是IP V4位址。 MOF 資料類型必須 物件。 承載必須是未簽署的長。 未帶正負號長的每個位元組都代表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 結尾的寬字元字串。
Sid
數據代表二進位 Blob SID。 MOF 資料類型必須 物件
SID 是可變長度。 前 4 個字節中所包含的值 (ULONG) 表示 Blob 是否包含 SID。 如果 Blob 的前 4 個字節 (ULONG) 為非零,Blob 會包含 SID。 Blob 的第一個部分包含TOKEN_USER(結構在 8 位元組界限上對齊),而第二個部分則包含 SID。 若要處理 Blob 的 SID 部分:
  • 設定 Blob 開頭的位元組指標
  • 將事件記錄檔的指標大小乘以 2,並將產品新增至位元組指標(PointerSize 成員 TRACE_LOGFILE_HEADER 包含指標大小值)

您可以使用下列巨集來判斷 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。
Variant
數據代表 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

字串的長度會內嵌在字串開頭,做為以 big-endian 格式 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 必須是位 (flag) 值。 ValueDescriptions 限定符是選擇性的,但您應該使用它來提供每個可能值的描述。 當有人呼叫 TdhEnumerateProviderFieldInformationTdhQueryProviderFieldInformation 函式,以取得提供者的可能層級並啟用旗標 (keywords) 值時,就會使用描述。

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

[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;
};