将ETW事件发送到全局“应用程序”日志

我想让我的应用程序在Windows事件查看器中的全局“应用程序”日志中显示警告和错误。 我已经成功地遵循了这里的指导,帮助我启动并运行了ETW,但是当我通过跟踪程序显式启用日志时,我只能看到事件,即使这样,它们也只会显示在生成的.etl文件中,而不是全局login。

如何以编程方式向全局应用程序日志注册和写入事件,以便用户运行事件查看器时,他们将从我的应用程序中看到事件? 这甚至有可能吗? 简而言之,我想最终得到类似下面的屏幕截图,只需less量的图片购买:

在这里输入图像说明

ETW似乎对于您的目的来说相当复杂,下面是写入事件日志的过程:

a)一次性安装(在安装应用程序时通常会这样做)将您的应用程序注册为事件提供程序 ; 只有EventMessageFile条目确实是必需的:
– key = HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ eventlog \ Application \ MyCoolGame
– 字符串名称(REG_EXPAND_SZ)= EventMessageFile
– 字符串值= C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ EventLogMessages.dll

b)程序启动时: 注册事件源并接收句柄:

 hEventLog = RegisterEventSource(NULL, lpszAppNameName); 

c)使用ReportEvent函数将条目写入事件日志:

 TCHAR szLogBuffer[] = _T("Started new multiplayer server."); const TCHAR *lpszEventStrings[2] = {szLogBuffer, NULL}; ReportEvent(hEventLog, EVENTLOG_INFORMATION_TYPE, 0, 1, NULL, 1, 0, lpszEventStrings, NULL) 

d)程序关闭时:

 DeregisterEventSource(hEventLog);