【问题标题】:Why I have empty windows logs after success EventWrite function call为什么在成功调用 EventWrite 函数后我有空的 Windows 日志
【发布时间】:2019-11-06 10:05:34
【问题描述】:

我有一个包含多个事件和两个通道的清单文件。 我通过 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 并带有复制步骤

【问题讨论】:

  • 如果可能,请显示您的清单文件,以便我尝试重现此问题。
  • @RitaHan-MSFT 可能是我知道问题所在 - 我没有通过我的服务中的 StartTrace 命令启动 etw 会话。
  • @RitaHan-MSFT 我为这个问题创建了 github repo 和重现步骤 - github.com/synacker/windows_local_service

标签: c++ winapi logging windows-services wevtutil


【解决方案1】:

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

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

所以这里的问题是即使您的事件写入成功,您也无法在事件查看器中看到这些事件。这些事件错​​过了,因为您从未启动消费者来消费它们。

请参阅Events lost reasons

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

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

【讨论】:

  • 感谢您的回答!但是,如何在代码中写入事件查看器?
  • @synacker 参考Reporting Events
  • 我还是不明白。我在日志查看器中通过 manifest 和 wevtutil 实用程序创建了两个频道。如何从服务应用程序将事件写入这些通道?
  • @synacker ETW 和事件查看器使用不同的 API (EventWrite/ReportEvent) 来发布事件。你似乎把它们混在一起了。您创建的频道用于 ETW,但 wevtutil 用于在事件查看器中检索事件。提到的报告事件示例用于从应用程序(与服务应用程序相同)向事件查看器发送事件。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2014-10-31
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    相关资源
    最近更新 更多