自动生成的manifest.h不包含ProviderGuid值

问题描述 投票:0回答:1

我正在尝试编译检测清单,以便构建基于清单的 Windows 事件日志provider。我希望编译后的

manifest.h
文件包含
ProviderGuid
符号,因为示例 here 有此符号。

我的

manifest.xml
文件:

<?xml version="1.0" encoding="utf-8"?>
<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="MySampleProvider"
                guid="{e585d1ba-488c-4adc-b752-f360e410d365}"
                symbol="MyProvider"
                resourceFileName="%SystemRoot%\\System32\\MySampleProvider.dll"
                messageFileName="%SystemRoot%\\System32\\MySampleProvider.dll">

        <events>
          <event symbol="EVENT_MY_EVENT" value="1"
                 version="0" level="win:Informational"
                 template="MyEventTemplate"
                 message="$(string.MyEvent.Message)"/>
        </events>

        <templates>
          <template tid="MyEventTemplate">
            <data name="Message" inType="win:UnicodeString" outType="xs:string"/>
          </template>
        </templates>

        <keywords>
          <keyword name="MyKeyword" mask="0x1"/>
        </keywords>

        <tasks>
          <task name="MyTask" eventGUID="{642836ec-9270-4b16-aacb-b971bcf357ae}" value="1"/>
        </tasks>

        <opcodes>
          <opcode name="MyOpcode" value="10"/>
        </opcodes>

        <levels>
          <level name="MyLevel" value="16" symbol="Informational"/>
        </levels>

        <channels>
          <channel name="MyChannel" chid="MySampleProvider/Operational" type="Operational" enabled="true"/>
        </channels>

      </provider>
    </events>
  </instrumentation>

  <localization>
    <resources culture="en-US">
      <stringTable>
        <string id="MyEvent.Message" value="This is a sample event message."/>
      </stringTable>
    </resources>
  </localization>
</instrumentationManifest>

我用

"C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64\mc.exe" -h . -r . manifest.xml
编译这个文件。当我运行此命令时,控制台中没有显示任何错误或警告。

编译后,我搜索了生成的

manifest.h
文件,但该文件任何地方都不包含
ProviderGuid

这是预期的吗?我是否误解了here的示例的用途?

c++ c windows event-log
1个回答
0
投票

我找到了解决办法。我需要将

symbol="MyProvider"
对象中的
provider
更改为
symbol="ProviderGuid"
,然后重新编译。然后
ProviderGuid
出现在
manifest.h
文件中。

当我注意到文档说时我意识到了这一点

该示例引用了为基于清单的提供程序发布事件架构中定义的事件。

为基于清单的提供者发布您的事件架构页面使用

ProviderGuid
作为示例中的符号名称
manifest.xml

工作

manifest.xml

<?xml version="1.0" encoding="utf-8"?>
<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="MySampleProvider"
                guid="{e585d1ba-488c-4adc-b752-f360e410d365}"
                symbol="ProviderGuid"
                resourceFileName="%SystemRoot%\\System32\\MySampleProvider.dll"
                messageFileName="%SystemRoot%\\System32\\MySampleProvider.dll">

        <events>
          <event symbol="EVENT_MY_EVENT" value="1"
                 version="0" level="win:Informational"
                 template="MyEventTemplate"
                 message="$(string.MyEvent.Message)"/>
        </events>

        <templates>
          <template tid="MyEventTemplate">
            <data name="Message" inType="win:UnicodeString" outType="xs:string"/>
          </template>
        </templates>

        <keywords>
          <keyword name="MyKeyword" mask="0x1"/>
        </keywords>

        <tasks>
          <task name="MyTask" eventGUID="{642836ec-9270-4b16-aacb-b971bcf357ae}" value="1"/>
        </tasks>

        <opcodes>
          <opcode name="MyOpcode" value="10"/>
        </opcodes>

        <levels>
          <level name="MyLevel" value="16" symbol="Informational"/>
        </levels>

        <channels>
          <channel name="MyChannel" chid="MySampleProvider/Operational" type="Operational" enabled="true"/>
        </channels>

      </provider>
    </events>
  </instrumentation>

  <localization>
    <resources culture="en-US">
      <stringTable>
        <string id="MyEvent.Message" value="This is a sample event message."/>
      </stringTable>
    </resources>
  </localization>
</instrumentationManifest>
© www.soinside.com 2019 - 2024. All rights reserved.