我在驱动程序中有 ETW 跟踪; list 文件已正确创建,资源已全部编译等。在目标机器上,我以管理员身份运行此命令:
wevtutil im myManifest.xml
我没有收到任何错误。然后,我运行(以管理员身份):
logman create trace myProviderName -o Log.etl -p "{myProviderGUID}" -f bincirc -max 1000
没有错误。然后我等待足够的时间来执行一些跟踪,然后我运行这些命令(作为管理员):
logman stop myProviderName
tracerpt Log000001.etl
现在我遇到的问题是生成的文件 dumpfile.xml
显示的记录根本没有我的踪迹。它显示了设置详细信息的基本结构,包括提供程序 GUID 等。
所以我的问题是:在上述过程中我是否遗漏了一个步骤,或者问题一定出在我的跟踪代码上吗?
最佳答案
原来是有问题;虽然它不是我的代码。我没有在 list 中包含我的事件的操作码,因此没有记录任何事件。
如果有人无意中看到这篇文章,它可能会帮助您注意到您的事件必须具有 channel 、级别、操作码和模板,甚至是基本功能。此外,上述过程缺少一个步骤。我需要执行以下操作:
- 右键单击“我的电脑”并选择“管理”
- 单击性能 > 数据收集器集 > 用户定义 > myProvider
- 在右侧 Pane 中右键单击 myProvider,选择“属性”
- 根据我在 list 中指定的设置关键字(任意)、关键字(全部)和级别
- 重新启动我的机器,并通过 logman 重新启用跟踪。
上述过程(在问题中+上面的补充)将创建一个日志 session 并从生成的 ETL 文件中生成一个基本的可读日志输出。
关于c++ - 驱动程序中的 ETW 跟踪——过程后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10953793/