定義用來分類事件種類的關鍵字
ETW 關鍵字是 64 位位元遮罩,用來指出一組事件類別中的事件成員資格。 關鍵字中的每個位都會對應至類別。 如果事件的關鍵字已設定一個位,則事件會屬於對應至該位的事件類別目錄。
關鍵字的低 48 位 (位元遮罩0x0000FFFFFFFFFFFF) 是由事件提供者所定義, (資訊清單) 的作者。 Microsoft 會定義關鍵字的前 16 位 (位元遮罩0xFFFF000000000000) 。 如需 Microsoft 定義關鍵字的定義,請參閱 winmeta.h
Windows Kits include 資料夾中的 或 winmeta.xml
。
提供者會使用關鍵字來分類不同類型的事件。 例如,您可以將關鍵字位 0 (關鍵字值 0x1
定義為 讀取 類別) ,然後將 read 關鍵字套用至執行讀取作業的任何事件,例如從檔案或登錄讀取。 取用者接著可以使用關鍵字位值來篩選事件的不同分類。 例如,取用者可以將事件集合會話的 MatchAnyKeyword 屬性設定為 0x1
,讓會話只收集 讀取 類別中的事件。
ETW 事件集合會話可以使用關鍵字 (,其使用層級) 來限制 ETW 服務寫入其事件追蹤記錄檔的事件。 追蹤會話可以使用兩組關鍵字位元遮罩來啟用提供者:「MatchAnyKeyword」 位元遮罩,其中如果事件的任何一個關鍵字位符合此遮罩中設定的任何位,就會寫入事件。 和 「MatchAllKeyword」 位元遮罩,其中對於符合 「MatchAnyKeyword」 案例的事件而言,只有當事件關鍵字位元遮罩中的所有位都存在於事件的關鍵字位元遮罩中時,才會寫入事件。
例如,如果提供者定義事件,該事件會指定 read 關鍵字 (位 0 = 0x1
) ,而本機存取關鍵字 (位 1 = 0x2
) , 和第二個事件,指定 read 關鍵字 (bit 0 = 0x1
) ,而遠端存取關鍵字 (位 2 = 0x4
) ,您可以將事件集合會話的 「MatchAnyKeyword」 位元遮罩設定為 (讀取) ,並將 「MatchAllKeyword」 位元遮罩設定為 0x1
0x0
(無) 接收所有讀取事件。 或者,您可以將 「MatchAnyKeyword」 位元遮罩設定為 0x1
,並將 「MatchAllKeyword」 位元遮罩設定為 0x3
(讀取 + 本機) 只接收本機讀取。
若要定義提供者的關鍵字,請使用 關鍵字 元素。 為提供者定義關鍵字之後,您可以使用事件元素的 keywords 屬性,將 關鍵字指派給任何提供者 的事件 。
您必須指定關鍵字 的名稱 和 遮罩 屬性。 遮罩必須是設定一個位的整數,介於位 0 到位 47 之間,例如 mask="256"
或 mask="0x100"
,以設定關鍵字位 8。 Bits 48 到 63 是由 Microsoft (see winmeta.h
或 winmeta.xml
) 所定義,而且不能用在 關鍵字 元素中。
符號和訊息屬性是選擇性的。
下列範例示範如何定義 關鍵字。
<instrumentationManifest
xmlns="http://schemas.microsoft.com/win/2004/08/events"
xmlns:win="http://manifests.microsoft.com/win/2004/08/windows/events"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
<instrumentation>
<events>
<provider name="Microsoft-Windows-SampleProvider"
guid="{1db28f2e-8f80-4027-8c5a-a11f7f10f62d}"
symbol="PROVIDER_GUID"
resourceFileName="<path to the exe or dll that contains the metadata resources>"
messageFileName="<path to the exe or dll that contains the string resources>"
message="$(string.Provider.Name)">
. . .
<keywords>
<keyword name="Read" mask="0x1" symbol="READ_KEYWORD"/>
<keyword name="Write" mask="0x2" symbol="WRITE_KEYWORD"/>
<keyword name="Local" mask="0x4" symbol="LOCAL_KEYWORD"/>
<keyword name="Remote" mask="0x8" symbol="REMOTE_KEYWORD"/>
</keywords>
. . .
</provider>
</events>
</instrumentation>
<localization>
<resources culture="en-US">
<stringTable>
<string id="Provider.Name" value="Sample Provider"/>
</stringTable>
</resources>
</localization>
</instrumentationManifest>