为什么成功调用EventWrite函数后我的Windows日志为空

我有一个包含几个事件和两个通道的清单文件。 我通过mc命令生成包含和资源文件:

mc -um manifest.man

我将资源文件链接到应用程序中。

我通过wevtutil命令将清单安装在系统中

wevtutil.exe im manifest.man

在应用程序中,我将EventRegister用于初始化日志,并将EventWrite用于日志写入。 用于生成日志事件的下一个代码返回ERROR_SUCCESS: EVENT_DATA_DESCRIPTOR数据;

 ULONG writeEvent(const std::string& message){
   std::string log_message_str( message );
   EVENT_DATA_DESCRIPTOR data;
   EVENT_DESCRIPTOR description;
   EventDataDescCreate( &data,message.c_str(),static_cast<ULONG>(log_message_str.size() + 1) );

   return EventWrite(log_handle,&description,1,&data);
 }

我还向我的LocalService应用程序授予读取权限:

icacls "service_win.exe" /grant "NT AUTHORITY\LocalService":R /Q

我使用“ NT AUTHORITY \ LocalService”帐户启动诸如服务之类的应用程序:

sc.exe create service_win binpath=D:\service_win.exe type=own obj='NT AUTHORITY\LocalService'
net start service_win

在我的manifest.man中声明的通道已添加到WinEvents日志中,但为空。 在应用程序中,我每秒通过writeEvent写入日志,并显示ERROR_SUCCESS结果,但是我的日志文件仍然为空。

更新:

我创建了github repo,其中包含复制步骤

fanzongqi 回答:为什么成功调用EventWrite函数后我的Windows日志为空

您正在使用Event Tracing技术。它要求提供者创建事件和消费者消费事件。

如果要通过事件查看器查看事件,可以参考Using Event Logging

因此,这里的问题是即使事件成功写入,您也无法在事件查看器中看到这些事件。错过了这些事件是因为您从未开始让消费者消费它们。

请参阅Events lost reasons

您可以通过登录Windows Device Portal的ETW来找到它们,如下所示:

enter image description here

有关如何使用事件的详细信息,请参见Consuming Events

,

我找到了解决方案。 问题出在跟踪会话和从mc utility自动生成的代码中。 需要使用-um标志调用mc,并使用自动生成的函数进行日志写入。 工作示例为here

本文链接:https://www.f2er.com/3153281.html

大家都在问