Windows - 查看活动的ETW会话以便我关闭其中一个

10

我正在使用Windows API的事件跟踪功能,但有时候,当我运行我的应用程序后,无法在打开ETW跟踪控制器会话后关闭它。

基本上,我执行 ::StartTrace([out] handle...),但是在完成后没有关闭该句柄(可以使用::StopTrace()函数进行关闭)

我正在寻找一个工具来显示当前活动的会话,以便我手动关闭它。如果没有这个工具,我就必须重新启动电脑才能在关机时关闭控制器会话。

此外,在同一ETW区域(在Win 7上),我了解到我应该能够使用wbemtest.exe查看公共MOF描述的数据布局。在那里,我应该输入

- Connect -> Namespace = \\root\wmi\EventTrace

我想查看MOF数据,但是出现了"The RPC server is unavailable"的错误提示。在该屏幕上使用默认值:IWBemLocator(名称空间),如何解释密码= null、身份验证级别= packet。

在凭据区域中,我有用户名和密码(我已经尝试过),但还有另一个空字段——Authority。有没有办法查看MOF数据?我在Win 7下以管理员身份运行了此程序。


关于第一个问题,我寻找了相关的API/工具,但未能找到任何可用的。 - Uri Cohen
关于第二个问题,我能够在root\wmi\EventTrace中看到类。我猜这里显示的是已注册的MOF文件。只是不知道如何查看MOF描述(就像使用MOF编译器进行编译时使用的输入文件)。我用WMI CIM Studio来做这个。 - Ghita
3个回答

17
您可以使用命令logman query -ets查看当前正在运行的跟踪事件会话列表。例如,在Windows 10上,您将看到类似于以下内容:
C:\>logman query -ets

Data Collector Set                      Type                          Status
-------------------------------------------------------------------------------
AppModel                                Trace                         Running
FaceRecoTel                             Trace                         Running
FaceUnlock                              Trace                         Running
LwtNetLog                               Trace                         Running
Microsoft Security Client WMI Providers Trace                         Running
NtfsLog                                 Trace                         Running
TileStore                               Trace                         Running
WiFiSession                             Trace                         Running
SCM                                     Trace                         Running
UserNotPresentTraceSession              Trace                         Running
CldFltLog                               Trace                         Running
SHS-05042018-095434-7-5f                Trace                         Running
WDSC-05042018-095434-7-20               Trace                         Running
Diagtrack-Listener                      Trace                         Running
8696EAC4-1288-4288-A4EE-49EE431B0AD9    Trace                         Running
Cloud Files Diagnostic Event Listener   Trace                         Running

The command completed successfully.
如果您已经创建了自己的会话,例如使用Microsoft.Diagnostics.Tracing.Session.TraceEventSession,您将为会话指定一个唯一名称,如果它正在运行,您应该在列表中看到它。
要杀死现有会话,请按以下步骤操作(作为管理员):
logman stop <SessionName> -ets

还有一些PowerShell Cmdlets,可以完成类似的任务。


4

QueryAllTraces函数检索计算机上所有事件跟踪会话的属性和统计信息,调用者需要有权限进行查询。

我可以建议您将问题的第二部分发布为单独的问题吗?


这是一个用于查询跟踪的 API,而且还有一个关闭一些 WMI 会话的 API。我只是想知道是否有现成的工具可以简化这个过程(例如 WMI CIM Studio 或者其他什么)。 - Ghita
1
我相信logman query http://technet.microsoft.com/en-us/library/cc788030(WS.10).aspx或wevutil el http://windowsecurity.com/articles/WEVTUTIL-Manage-Event-Logs.html可以做到这一点。或者使用事件查看器GUI。 - Lars Truijens

2

Windows SDK自带的命令行实用程序tracelog可以通过tracelog -l命令实现与QueryAllTraces相同的功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接