ETW未将事件记录到频道(事件日志)

时间:2015-11-01 10:03:39

标签: windows winapi visual-c++ event-log 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写入事件日志(文件)需要什么?

1 个答案:

答案 0 :(得分:1)

我找到了解决方案,右键单击事件日志并选择“启用日志记录”

enter image description here