gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 12:20:32 25 4
gpt4 key购买 nike

我有一个包含多个事件和两个 channel 的 list 文件。我通过 mc 命令生成包含和资源文件:

mc -um manifest.man

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

我通过 wevtutil 命令在系统中安装 list :

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 中声明的 channel 已添加到 WinEvents 日志中,但为空。在应用程序中,我每隔一秒通过 writeEvent 写入日志并显示 ERROR_SUCCESS 结果,但我的日志文件仍然是空的。

更新:

我创建 github repo带有重现步骤

最佳答案

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

如果您想通过事件查看器查看事件,您可以引用Using Event Logging .

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

引用Events lost reasons .

您可以通过 ETW 登录 Windows Device Portal 找到它们像这样:

enter image description here

引用Consuming Events有关如何使用事件的详细信息。

关于c++ - 为什么在成功调用 EventWrite 函数后我的 Windows 日志为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58727573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com