智能卡驱动程序调试

注意

Windows 10 版本 1803 之前的旧版 Windows 上提供已检查的版本。 使用驱动程序验证器和 GFlags 等工具在更高版本的 Windows 中检查驱动程序代码。

智能卡驱动程序库支持多种调试功能。 每个调试功能由以下常量之一表示,这些常量在 Smclib.h 头文件中定义:

DEBUG_IOCTL
DEBUG_ATR
DEBUG_PROTOCOL
DEBUG_DRIVER
DEBUG_TRACE
DEBUG_ERROR
DEBUG_BREAK
DEBUG_ALL

组合的一组已启用的调试功能由称为 调试级别的值表示。 可以通过采用与要启用的功能相对应的常量的按位 OR 来计算此值。

有两种方法可以设置调试级别。 首先,可以使用 Windows 驱动程序工具包 (WDK) 附带的智能卡驱动程序测试程序 Scdrvtst。 第二种是使用 SmartcardSetDebugLevel 智能卡驱动程序库例程。

在这两种情况下,必须将所需调试级别的值传递给设置调试级别的程序或例程。 例如,若要使用智能卡库例程从驱动程序设置调试级别,请进行以下调用:

SmartcardSetDebugLevel(DebugLevel);

若要从读取器驱动程序编写调试消息,驱动程序必须调用以下例程:

SmartcardDebug(
 ULONG DebugLevel,
 PCHAR Message
);

重要

必须安装操作系统的已检查版本和驱动程序的已检查版本才能获取调试消息。

此例程还可用于通过以下方式将消息写入远程调试器。

  • 若要编写错误消息,请使用 debugLevel 的 DEBUG_ERROR 常量。

  • 若要编写标准驱动程序消息,请使用 DEBUG_DRIVER 常量。

  • 若要编写指示读取器驱动程序何时进入或退出例程的跟踪消息,请使用 DEBUG_TRACE 作为 DebugLevel

开发驱动程序时,请使用已检查版本的智能卡驱动程序库,并使用 DriverEntry 例程中的 SmartcardSetDebugLevel (DEBUG_ALL) 将调试级别设置为最大值。

有关设置远程调试会话的信息,请参阅 Windows 调试