Определение каналов
События можно записывать в каналы журнала событий, файлы журнала трассировки событий или оба. Канал по сути является приёмником, который собирает события. Если целевая аудитория для событий использует такие потребители событий, как средство просмотра событий Windows, необходимо определить новые каналы для сбора событий или импорта существующего канала, определенного другим поставщиком.
Чтобы определить собственные каналы, используйте элемент канала. Чтобы определить импортированный канал, используйте элемент importChannel. Вы можете указать до восьми каналов в любом сочетании импортированных каналов или каналов, которые вы определяете.
Канал должен иметь один из четырех типов: административный, операционный, аналитический, и отладочный. Каждый тип канала имеет целевую аудиторию, которая определяет тип событий, которые вы записываете в канал. Описание каждого типа см. в разделе ChannelType сложного типа.
Чтобы указать канал, на который записывается событие, задайте для канала определения события атрибут то же значение, что и атрибута определения канала. События могут записываться только в один канал одновременно, но могут также собираться до 7 других сеансами ETW одновременно.
В следующем примере показано, как импортировать канал. Необходимо задать атрибуты chid и имя . Атрибут chid однозначно идентифицирует канал — каждый идентификатор канала в вашем списке каналов должен быть уникальным. Установите атрибут имени в то же имя, которое использовал поставщик при определении канала.
<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)">
<channels>
<channel chid="c1"
name="Microsoft-Windows-BaseProvider/Admin"
symbol="CHANNEL_BASEPROVIDER_ADMIN"
type="Admin"/>
</channels>
. . .
</provider>
</events>
</instrumentation>
<localization>
<resources culture="en-US">
<stringTable>
<string id="Provider.Name" value="Microsoft-Windows-SampleProvider"/>
</stringTable>
</resources>
</localization>
</instrumentationManifest>
Хотя Winmeta.xml определяет устаревшие каналы, которые можно импортировать, их не следует использовать, если вы не поддерживаете устаревших потребителей, которые используют события из устаревших каналов (например, Application или System). Файл Winmeta.xml включен в пакет SDK для Windows.
В следующем примере показано, как определить канал. Необходимо задать атрибуты chid, nameи type. Атрибут chid однозначно идентифицирует канал — каждый идентификатор канала в вашем списке каналов должен быть уникальным. Задайте для атрибута chid значение, уникальное для каналов, перечисленных вашим поставщиком, идентификатор канала ссылающийся на одно или несколько определений событий. Соглашение об именовании канала — использовать имя поставщика и тип канала в следующей форме: имя поставщика/тип канала.
<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)">
<channels>
<importChannel chid="c1"
name="Microsoft-Windows-BaseProvider/Admin"
symbol="CHANNEL_BASEPROVIDER_ADMIN"
/>
<channel chid="c2"
name="Microsoft-Windows-SampleProvider/Operational"
type="Operational"
enabled="true"
/>
</channels>
. . .
</provider>
</events>
</instrumentation>
<localization>
<resources culture="en-US">
<stringTable>
<string id="Provider.Name" value="Microsoft-Windows-SampleProvider"/>
</stringTable>
</resources>
</localization>
</instrumentationManifest>