定義用來分類事件類型的關鍵詞
ETW 關鍵詞是 64 位掩碼,用來指出事件類別集合中的事件成員資格。 關鍵詞中的每個位元都對應至一個類別。 如果事件的關鍵詞具有設定的位元,則該事件屬於該位元對應的事件類別。
關鍵詞的低 48 位(位掩碼0x0000FFFFFFFFFFFF)是由事件提供者(指令清單的作者)所定義。 關鍵詞的前16位(位掩碼0xFFFF000000000000)是由 Microsoft 所定義。 如需Microsoft定義關鍵詞的定義,請參閱 Windows Kits include 資料夾中的 winmeta.h
或 winmeta.xml
。
提供者會使用關鍵詞來分類不同類型的事件。 例如,您可以將關鍵詞位 0(關鍵詞值 0x1
)定義為 讀取 類別,然後將 讀取 關鍵詞套用至任何執行讀取作業的事件,例如從檔案或登錄進行讀取。 取用者接著可以使用關鍵字位值來篩選事件的不同分類。 例如,取用者可以將事件集合會話的 MatchAnyKeyword 屬性設定為 0x1
,讓會話只收集 讀取 類別中的事件。
ETW 事件收集會話可以使用 關鍵詞(與其使用層級相同)來限制 ETW 服務寫入其事件追蹤記錄檔的事件。 追蹤會話可以使用兩組關鍵詞位掩碼來啟用:”MatchAnyKeyword” 位掩碼用於當事件的任何關鍵詞位與此掩碼中的位匹配時寫入事件,而在針對符合 “MatchAnyKeyword” 條件的事件,只有當 “MatchAllKeyword” 位掩碼中的所有位都存在於事件的關鍵詞位掩碼中時,才會寫入事件。
例如,如果提供者定義了一個事件,指定了讀取關鍵詞(bit 0 = 0x1
)和本機存取關鍵詞(bit 1 = 0x2
),以及第二個事件,指定了讀取關鍵詞(bit 0 = 0x1
)和遠端訪問關鍵詞(bit 2 = 0x4
),您可以將事件收集會話的 "MatchAnyKeyword" 位掩碼設為 0x1
(讀取),並將 "MatchAllKeyword" 位掩碼設為 0x0
(不設關鍵字)以接收所有讀取事件;或者,您可以將 "MatchAnyKeyword" 位掩碼設為 0x1
,將 "MatchAllKeyword" 位掩碼設為 0x3
(讀取 + 本機)以只接收本機讀取。
若要為您的提供者定義關鍵詞,請使用 關鍵詞 元素。 為提供者定義關鍵詞之後,您可以使用 事件 元素的 關鍵詞 屬性,將 關鍵詞指派給任何提供者的事件。
您必須指定關鍵詞 名稱 和 遮罩 屬性。 掩碼必須是介於位元0到位元47之間的整數,且僅有一位元被設定,例如 mask="256"
或 mask="0x100"
用來設定關鍵詞位元8。 位 48 到 63 是由 Microsoft 定義(請參閱 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>