如何使用TraceEvents?TRACE_DRIVER未定义及日志位置问题
问题解决:TRACE_DRIVER未定义与TraceEvents日志定位
一、解决TRACE_DRIVER未定义问题
TRACE_DRIVER是WPP追踪框架中的控制位标识,需要通过WPP配置或代码声明生成定义,按以下步骤处理:
检查WPP配置文件
项目中通常包含*.wpp文件(如Driver.wpp),确保其中定义了TRACE_DRIVER对应的控制位:// Driver.wpp 示例配置 -TRACEGUIDGUID={12345678-1234-1234-1234-123456789ABC} // 替换为你的驱动专属GUID -FLAGS TRACE_DRIVER=0x00000001 // 为TRACE_DRIVER分配唯一的位值手动声明控制GUID(无wpp文件时)
在驱动代码的头文件或源文件顶部添加以下代码,直接定义WPP控制GUID和TRACE_DRIVER位:#define WPP_CONTROL_GUIDS \ WPP_DEFINE_CONTROL_GUID(DriverTraceGuid, \ 0x12345678, 0x1234, 0x1234, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0), \ WPP_DEFINE_BIT(TRACE_DRIVER)确保编译启用WPP追踪
- 在Visual Studio项目属性中,进入「配置属性」→「WPP追踪」→「常规」,勾选「运行WPP」。
- 代码中必须包含生成的tmh文件,且放在所有头文件之后:
#include "YourDriverName.tmh" // 替换为你的驱动生成的tmh文件名
重新编译后,WPP工具会自动在tmh文件中生成
TRACE_DRIVER的定义。
二、TraceEvents日志的定位与查看
WPP的TraceEvents输出不会直接写入注册表,而是通过ETW(Windows事件追踪)机制工作,需主动捕获才能查看:
用tracelog捕获日志
以管理员身份打开命令提示符,执行以下命令启动追踪会话:tracelog.exe -start MyDriverTrace -guid #你的驱动GUID -f driver.etl -level 5 -flag 1-flag 1对应TRACE_DRIVER的位值(需和WPP配置一致)-level 5表示捕获TRACE_LEVEL_INFORMATION及以下级别的日志
停止追踪并解析日志
驱动加载完成后,停止追踪会话:tracelog.exe -stop MyDriverTrace使用
tracefmt解析生成的ETL文件:tracefmt.exe driver.etl -o driver.log打开
driver.log即可查看完整的TraceEvents输出。实时查看日志(可选)
使用DebugView工具,开启「Capture Kernel」选项,驱动加载时的TraceEvents信息会实时显示在窗口中(需系统开启内核调试支持)。
内容的提问来源于stack exchange,提问作者IgnoreExeption
相关产品推荐
相关产品推荐

