sunpongber

生成基本的 v4 打印机驱动程序-CustomWppCommands.cpp

//
// File Name:
//
//    CustomWppCommands.cpp
//
// Abstract:
//
//    Custom WPP Tracing functions.
//

#include "precomp.h"
#include "WppTrace.h"

#include "CustomWppCommands.tmh"

namespace MyV4PrintDriver_Render_Filter
{

void TraceFailedHRESULT(
    HRESULT hr,
    char const *fileName,
    int lineNum,
    wchar_t const *extraText
    )
{
    DoTraceMessage(
        RENDERFILTER_TRACE_ERROR,
        "Failed HRESULT (%!HRESULT!) at %s:%d (%S)",
        hr,
        fileName,
        lineNum,
        extraText
        );
}

} // namespace MyV4PrintDriver_Render_Filter
  1. 文件头部
    文件说明,明确这是一个实现自定义WPP tracing功能的源码文件。WPP tracing是Windows驱动开发常用的日志和调试机制
  2. 头文件引用
    precomp.h:预编译头文件,通常包含一些常用的系统/WDK头。
    WppTrace.h:本项目的WPP tracing封装接口。
    CustomWppCommands.tmh:WPP编译器自动生成的trace message header,配合DoTraceMessage使用。
  3. 命名空间
    把函数限定在自定义命名空间,这里很明显是V4打印机驱动的渲染过滤器(Render Filter)相关的模块。
  4. 核心函数TraceFailedHRESULT
void TraceFailedHRESULT(
    HRESULT hr,
    char const *fileName,
    int lineNum,
    wchar_t const *extraText
    )

参数:
HRESULT hr:Windows API/COM 风格的返回码,表示函数执行结果(S_OK 成功,其它为错误)。 fileName:出错的源文件名。
lineNum:出错的行号。
extraText:额外的文本说明(Unicode 字符串)。
这个函数的作用:在驱动中输出失败的HRESULT错误信息。

  1. 日志实现
DoTraceMessage(
    RENDERFILTER_TRACE_ERROR,
    "Failed HRESULT (%!HRESULT!) at %s:%d (%S)",
    hr,
    fileName,
    lineNum,
    extraText
    );

DoTraceMessage(...):WPP tracing 提供的宏,用于写日志。
RENDERFILTER_TRACE_ERROR:日志类别(这里是错误级别)。
格式化字符串:
%!HRESULT!:WPP特有的格式化输出,会把hr转换为HRESULT错误码的名字和数值。
%s:%d:打印出错的文件名和行号。
%S:输出一个Unicode宽字符串(即extraText)。
示例输出:
Failed HRESULT (E_FAIL: 0x80004005) at RenderFilter.cpp:120 (InitPipeline failed)

  1. 总结
    这段程序的作用是:
    封装一个专门用于HRESULT错误日志输出的函数,让驱动开发者能快速定位失败位置和原因。
    使用WPP tracing,日志会输出到Windows Event Tracing系统,方便后续调试/诊断。
    带上文件名 + 行号 + 自定义提示文本,便于快速查错。

原始资料地址:
生成基本的 v4 打印机驱动程序
如有侵权联系删除 仅供学习交流使用