Windows驱动开发TraceView之日志打印

《Windows驱动开发技术详解》一书中,介绍了一种“Windows驱动程序日志打印和查看的方法”,具体就是:在需要打印日志的地方,调用“KdPrint”函数,该函数类似标准C的printf(print file)函数。然后用“DebugView.exe”软件查看日志。

一、引入

        事实上,微软也提供了一个日志打印和日志查看机制,它可以查看指定的驱动文件的日志,并根据“Level”和“Flag”进行日志过滤,也可以保存成文件。这套机制就是“WPP”和“TraceView.exe”。

        随便打开一份微软提供的驱动示例代码,如:PLX9x5x,都会看到它里面有WPP。

        在WDF框架中,有一个“trace.h”头文件,在驱动的入口函数中,会用到

   //
    // Initialize WDF WPP tracing.
    //
    WPP_INIT_TRACING( DriverObject, RegistryPath );
 
    //
    // TraceEvents function is mapped to DoTraceMessage provided by
    // WPP by using a directive in the sources file.
    //
    TraceEvents(TRACE_LEVEL_INFORMATION, DBG_INIT,
                "Pci9656 Sample - Driver Framework Edition.");

        此外在驱动中大量用到“TraceEvents”,取代之前的“KdPrint”,用于打印日志信息。

 二、使用

       WPP的使用比较简单,WDF的框架代码已将将它初始化好了,我们只需在用到的地方,调用“TraceEvent”  即可。其中,“TraceEvent”的前两个参数分别指定“Level”和“Flag”。

       然后,在安装了VS2015的PC上,“开始”->“Windows Kits”->“Windows Software Development Kits”,打开一个文件夹,再在其中的“Tools->X64”目录下找到“TraceView.exe”。

        安装它的说明书操作,先“创建一个新的会话”。

        然后“Add Provider”,并选择你驱动文件的“.pdb”文件即可。

        创建好后,使用应用程序调驱动进行测试,有时会发现traceview中没有反应。这是因为,默认的“Level”设置的是“Error”级别,你需要重新设置,比如设为“Infomation”级别。这个设置的“Level”表示的是最低过滤级。

你可能感兴趣的:(VC++,windows驱动程序WDF,windows驱动程序WDM)