ETW没有将事件记录到通道(事件日志)

ETW没有将事件记录到通道(事件日志)

问题描述:

我正在开发一个测试基于清单的事件的ETW跟踪的项目。我很难理解的是为什么我在日志文件中看不到任何事件。ETW没有将事件记录到通道(事件日志)

这里是清单:

<?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="WELTest-Provider" guid="{AAC04D94-4865-4C1A-9812-E2009390AAAB}" symbol="PROVIDER_GUID" resourceFileName="C:\Users\Robert\Documents\Visual Studio 2015\Projects\WELTest\x64\Debug\WELTest.exe" messageFileName="C:\Users\Robert\Documents\Visual Studio 2015\Projects\WELTest\x64\Debug\WELTest.exe"> 
       <events> 
        <event symbol="Event1" value="1" version="1" channel="WELTest-Provider/Admin" level="win:Informational" task="Task1" message="$(string.WELTest-Provider.event.1.message)"> 
        </event> 
       </events> 
       <tasks> 
        <task name="Task1" symbol="TASK_1" value="1" eventGUID="{7724744E-1BD0-45FB-8FB7-7A7176917C05}" message="$(string.WELTest-Provider.task.TASK_1.message)"> 
        </task> 
       </tasks> 
       <channels> 
        <channel name="WELTest-Provider/Admin" chid="WELTest-Provider/Admin" symbol="WELTest_Provider_Admin" type="Admin" enabled="true" message="$(string.WELTest-Provider.channel.WELTest_Provider_Admin.message)"> 
        </channel> 
       </channels> 
      </provider> 
     </events> 
    </instrumentation> 
    <localization> 
     <resources culture="en-US"> 
      <stringTable> 
       ..... 
      </stringTable> 
     </resources> 
    </localization> 
</instrumentationManifest> 

这里是从清单产生具有使用参数-um消息编译器(MC.EXE)的代码。

#include "stdafx.h" 

#include <windows.h> 
#include <stdio.h> 
#include <evntprov.h> 

#include "WELTestManifest.h" 


int main() 
{ 
    ULONG ulRet = EventRegisterWELTest_Provider(); 
    if(ulRet != ERROR_SUCCESS) 
    { 
     printf("EventRegisterWELTest_Provider returned with errror: %lu", ulRet); 
     return 1; 
    } 

    ulRet= EventWriteEvent1(); 
    if(ulRet != ERROR_SUCCESS) 
    { 
     printf("EventWriteEvent1 returned with errror: %lu", ulRet); 
     return 1; 
    } 

    EventUnregisterWELTest_Provider(); 


    return 0; 
} 

然后我登记我的供应商:

wevtutil im WELTestManifest.man 

没有警告或错误,当我运行此命令。我运行程序几次以上,它不报告任何错误,一切似乎工作。

然后,我调查事件查看器,查看是否有任何事件已写入事件日志,并且没有事件。

enter image description here

  • 我错过了一个设置或参数?

  • 使用ETW写入事件日志(文件)需要什么?

我找到了解决办法,用鼠标右键单击事件日志,选择“启用日志记录”

enter image description here