共用方式為


定義用來分類事件類型的關鍵詞

ETW 關鍵詞是 64 位掩碼,用來指出事件類別集合中的事件成員資格。 關鍵詞中的每個位元都對應至一個類別。 如果事件的關鍵詞具有設定的位元,則該事件屬於該位元對應的事件類別。

關鍵詞的低 48 位(位掩碼0x0000FFFFFFFFFFFF)是由事件提供者(指令清單的作者)所定義。 關鍵詞的前16位(位掩碼0xFFFF000000000000)是由 Microsoft 所定義。 如需Microsoft定義關鍵詞的定義,請參閱 Windows Kits include 資料夾中的 winmeta.hwinmeta.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.hwinmeta.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>