我正在尝试使用“Message Analyzer”和“TraceView”之类的软件从“Microsoft-Windows-Security-Auditing”或“Microsoft-Windows-Eventlog”提供程序接收事件,但是我没有收到任何事件。
我做了什么:
- 我在 Windows 10 和 Windows 7 中测试了这些软件
- 以管理员身份执行的软件
- 也可以作为系统帐户
其他观察和意见:
我可以获取其他事件,例如内核事件或 NDIS 事件,但无法获取我专门配置接收的所提及的提供程序。
我对所提到的软件使用的方法(进行实时跟踪会话)很感兴趣,而没有其他解决方案,例如查询事件......
更新 1
我在上述软件中使用的提供商 GUID
Microsoft-Windows-Security-Auditing: {54849625-5478-4994-A5BA-3E3B0328C30D}
Microsoft-Windows-Eventlog: {fc65ddd8-d6ef-4962-83d5-6e5cfe9ce148}
更新2
我也做了更多的调查事件日志通道视图从 NirSoft 和其他一些工具中,我意识到有一些渠道和提供商/发布者。提供商会通知任何想要了解渠道上新事件的消费者。
有趣的是,EventLogChannelsView 甚至没有列出某些提供商的名称,这可能意味着它们根本不活跃(就像我提到的那样)。而且还有一些频道没有任何提供商。
我很好奇事件查看器如何发现新事件,因为它会立即显示“有新事件可用”消息。我发现事件查看器使用 EvtSubscribe API 接收频道而不是提供商上的事件。
我不知道为什么像微软创建的“Message Analyzer”和“TraceView”这样的软件对提供程序的状态表现得非常麻木。
答案1
警告:以下方法使用一些需要管理权限的工具。请在使用这些工具之前先了解 Windows 中的事件跟踪及其所有相关选项。
为了捕获实时事件日志,我使用的工具微软开发工具包和软件开发工具包。您可以在%ProgramFiles(x86)%\Windows Kits\10\bin\<SDK-Version>\<bitness>
路径中找到这些程序。以下是两种方法:
使用命令行界面:以管理员身份运行所有命令。将 GUID 放在命令中,如下所示。
- 启动实时会话而不保存 ETL 文件:
tracelog.exe -start MyTraceSession -rt -guid #{place-guid-here}
- 实时显示事件日志:
tracefmt.exe -displayonly -rt MyTraceSession
- 停止会话:
tracelog.exe -stop MyTraceSession
- 启动实时会话而不保存 ETL 文件:
使用的选项:
Usage: tracelog [actions] [options] | [-h | -help | -?]
-start <LoggerName> Starts the <LoggerName> trace session.
-stop <LoggerName> Stops the <LoggerName> trace session.
-guid #<guid> Enable tracing for a provider by guid.
-rt Enable tracing in real time mode.
Usage: tracefmt [<EtlFile>|-rt [<SessionName>]] [-tmf [<TMFFiles>]|-p <TMFPath>|-pdb <PdbPath>] [Options]
-rt <SessionName> - Format messages from the named real-time trace session.
-displayonly - Print formatted traces messages only to console (no output file).
- 使用图形用户界面:双击打开 TraceView 程序。请按照以下步骤操作:文件 > 创建新日志会话 > 手动输入控制 GUID > 确定 > 自动 > 下一步 > 实时显示 > 完成。
在 TraceView 窗口中右键单击会话名称可以停止或删除该会话。
进一步阅读:
要了解这些工具与 Windows API 的配合使用,请参阅我的开源项目追踪事件在 GitHub 上。