Почему ETW EventWriteString имеет двоичную полезную нагрузку

Я хотел расширить свой журнал событий (отслеживание событий для Windows) дополнительным компонентом, в котором я просто хочу регистрировать строки. Я использую код, подобный следующему.

#include <Evntprov.h>
#include <evntrace.h>
#include <minwindef.h>

// {38F4122A-4D8C-465A-9EFC-F7E632A84ABF}
static const GUID MyApplicationGuid = { 0x38f4122a, 0x4d8c, 0x465a, { 0x9e, 0xfc, 0xf7, 0xe6, 0x32, 0xa8, 0x4a, 0xbf } };

REGHANDLE regHandle = nullptr;
EventRegister(MyApplicationGuid, nil, nil, &regHandle);

EventWriteString(regHandle, TRACE_LEVEL_INFORMATION, 0x0, L"Hello");
EventWriteString(regHandle, TRACE_LEVEL_INFORMATION, 0x0, L", ");
EventWriteString(regHandle, TRACE_LEVEL_INFORMATION, 0x0, L"world");
EventWriteString(regHandle, TRACE_LEVEL_INFORMATION, 0x0, L"!");

EventUnregister(regHandle);

Я зарегистрировал поставщика, который отображается правильно, и эти события являются частью файлов журнала etl как общие события. На данный момент все кажется в порядке, но когда я хочу добавить сообщение в виде столбца, я не могу видеть зарегистрированные строки, потому что они хранятся в двоичном элементе полезной нагрузки.

У меня есть способ определить событие/шаблон для форматирования трассировки, выполненной с помощью EventWriteString, в строку сообщения. Что-то вроде "%1"? (атрибут заголовка STRING_ONLY устанавливается автоматически.)


person Totonga    schedule 23.10.2015    source источник


Ответы (1)


Выяснилось, что добавление события с идентификатором 0 и выводом одной строки отобразит строки в «Microsoft Messge Analyzer».

Добавьте следующее содержимое в свой файл manifest.

<?xml version="1.0" encoding="UTF-16"?>
<instrumentationManifest xsi:schemaLocation="http://schemas.microsoft.com/win/2004/08/events eventman.xsd" xmlns="http://schemas.microsoft.com/win/2004/08/events" xmlns:win="http://manifests.microsoft.com/win/2004/08/windows/events" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:trace="http://schemas.microsoft.com/win/2004/08/events/trace">
  <instrumentation>
    <events>
      <provider name="COMPANY-PRODUCT-PART" guid="{??????-????-????-????-????????????}" symbol="COMPANY_PRODUCT_PART" resourceFileName="UNKNOWN.dll" messageFileName="UNKNOWN.dll">
        <events>
          <event symbol="DbgStr" value="0" version="0" template="OneStringParamTemplate" message="$(string.Product.1.message)">
          </event>
        </events>
        <templates>
          <template tid="OneStringParamTemplate">
            <data name="param" inType="win:UnicodeString" outType="xs:string">
            </data>
          </template>
        </templates>
      </provider>
    </events>
  </instrumentation>
  <localization>
    <resources culture="en-US">
      <stringTable>
        <string id="Product.1.message" value="%1">
        </string>
      </stringTable>
    </resources>
  </localization>
</instrumentationManifest>
person Totonga    schedule 28.10.2015