如何选择和配置设备基础功能测试

适用于 Windows 8 的 WDK 提供了一个驱动程序测试框架,其中包括一组设备基础功能测试。 设备基础功能测试是在 Microsoft 内部用于测试 Windows 和 WDK 随附的驱动程序和驱动程序样本以及在外部作为 Windows 硬件认证计划一部分的一系列测试。 可以在开发环境中运行测试。 运行测试时,可以使用与 Windows 认证测试所使用的相同参数,或者可以根据测试和调试需要配置和自定义运行时参数。

充分利用设备基础功能测试

若要从设备基础测试中获得最大优势,设备必须受默认 I/O 插件支持。若要查看设备类型是否受支持并确定是否有特定测试要求,请参阅 提供的 WDTF 简单 I/O 插件。设备基础测试还包括一个实用工具,可用于测试设备,以查看它是否受支持。 如果设备不受支持,则可以在 Visual Studio 中 创建一个 WDTF 简单 I/O 插件。 有关详细信息,请参阅 How to customize I/O for your device using the WDTF Simple I/O Action Plug-in(如何使用 WDTF 简单 I/O 操作插件为你的设备自定义 I/O)。

关于设备基础功能测试

WDK 提供有两种配置的设备基础功能测试:基本和认证。 在两种配置下,都可以通过编辑测试参数来调整测试长度、要执行的测试周期数以及其他测试参数,具体取决于需要测试的目标设备或驱动程序。 基本配置适用于通用驱动程序和设备的测试和调试。 在开发周期早期及整个过程中均可使用基本配置。 基本配置下的测试所使用的设置与 Windows 认证测试使用的设置相同,但前者的运行时更短。 在认证配置下,测试使用的设置与 Windows 认证测试使用的设置完全相同。 使用认证配置来验证设备或驱动程序是否做好 Windows 硬件认证计划的准备。

设备基础功能测试包括以下类别的测试。

设置运行时测试参数

可以编辑多个设备基础功能测试的运行时参数。 在“驱动程序测试组”窗口中,测试名称旁边的箭头 (») 指示你可以更改此测试参数。 选择箭头 (») 即可显示运行时参数。

其中一个最常用的参数是 DQ,用于指定要测试的目标设备。 默认值 (IsDevice) 将测试目标计算机上的所有设备。 DQ 参数将通过 WDTF SDEL 查询来确定目标设备。 可以指定特定测试设备,如:

DeviceID='USB\ROOT_HUB\4&1CD5D022&0' 仅选择使用指定的 DeviceID 进行测试的设备。

有关 DQ 及其他运行时参数的详细信息,请参阅设备基础功能测试参数

设备基础功能测试参数

参数 说明

DQ

确定应当用于测试的设备。 DQ 参数将通过 WDTFSDEL 查询来确定目标设备。 此查询非常灵活,可用于表示任何数量的设备,从单个设备到系统中的所有设备。

常见示例:

若要测试使用特定 INF 文件安装的所有设备,请执行以下操作:

INF::FileName=INF_File_Name

例如,INF::OriginalInfFileName='KMDFTest.inf'

Inf::OriginalInFileName 可与任何 INF 一起使用。

若要测试具有特定设备 ID 的设备,请执行以下操作:

DeviceId=’DeviceId

例如,DeviceID=’USB\ROOT_HUB\4&1CD5D022&0’

若要使用特定接口测试设备,请执行以下操作:

Interfaces::InterfaceGUID

若要使用特定驱动程序字母测试设备,请执行以下操作:

Volume::DriverLetter=’DriveLetter

例如,Volume::DriverLetter=’c:\’

若要使用特定驱动程序测试设备,请执行以下操作:

DriverBinaryNames=mydriver.sys

其中 KMDFTest.inf 是用于安装驱动程序的 inf。 还可以使用以下语句将使用 KMDFTest.sys 驱动程序的设备作为目标。

(DriverBinaryNames='KMDFTest.sys') 起作用。

正确设置 SDEL 后,在运行测试时,控制台上应会显示以下输出。

WDTF_TARGETS : INFO : - Query("IsDevice AND ((Inf::OriginalInfFileName='KMDFTest.inf'))") WDTF_TARGETS : INFO : Target: KMDFTest Device ROOT\SAMPLE\0000 ​ WDTF_TEST : INFO : WARNING: The test is not enforcing that Driver Verifier is enabled.​ WDTF_TEST : INFO : DV is enabled with Flag:=0x209bb​ WDTF_TEST : INFO : DV is successfully enabled for all drivers of this devnode(UniqueTargetName):=KMDFTest Device ROOT\SAMPLE\0000 ​ WDTF_TARGET : INFO : - GetInterface("Support")​ WDTF_TARGET : INFO : Target: DESKTOP-2OVFH3G​ WDTF_TARGETS : INFO : - Query("IsDevice")​ WDTF_TARGETS : INFO : Target: KMDFTest Device ROOT\SAMPLE\0000 ​ WDTF_TARGETS : INFO : - GetRelations("below-or-self/","IsDevice")​ WDTF_TARGETS : INFO : Target: KMDFTest Device ROOT\SAMPLE\0000 ​ WDTF_TARGETS : INFO : - GetInterfacesIfExist("SimpleIOStressProc")​ WDTF_SIMPLE_IO : INFO : - For Target:KMDFTest Device ROOT\SAMPLE\0000 no Simple IO Interface was found.​ WDTF_SIMPLE_IO : INFO : - For Target:KMDFTest Device ROOT\SAMPLE\0000 WDTF will use the ANY Simple IO Interface.​

有关更多详细信息,请参阅附加的文件配置和日志文件。 WDTF_TARGETS : INFO : Target: KMDFTest Device ROOT\SAMPLE\0000 ​ WDTF_TEST : INFO : Perform 1 cycle(s) of I/O termination test​ WDTF_TEST : INFO : I/O termination cycle #1​ WDTF_SIMPLEIO_STRESS_PROC : INFO : - StartAsync(KMDFTest Device ROOT\SAMPLE\0000 )​ WDTF_SIMPLEIO_STRESS_PROC : INFO : - WaitAsyncCompletion(KMDFTest Device ROOT\SAMPLE\0000 )​ WDTF_SIMPLE_IO : INFO : - For Target:KMDFTest Device ROOT\SAMPLE\0000 no Simple IO Interface was found.​ WDTF_SIMPLE_IO : INFO : - For Target:KMDFTest Device ROOT\SAMPLE\0000 WDTF will use the ANY Simple IO Interface.​ WDTF_SIMPLE_IO : INFO : - Open(KMDFTest Device ROOT\SAMPLE\0000 ) Try count 1​ WDTF_SUPPORT : INFO : - WaitForMinutes : 1​ WDTF_SIMPLE_IO : INFO : - PerformIO(KMDFTest Device ROOT\SAMPLE\0000 ) Count 1​ WDTF_SIMPLEIO_STRESS_PROC : INFO : - Terminate(KMDFTest Device ROOT\SAMPLE\0000 ) process

测试特定设备类的所有设备:

例如,Class=CDROM 将测试类为 CDROM 的所有设备。

例如,ClassGUID= {36fc9e60-c465-11cf-8056-444553540000} 将测试类 GUID 与指定 GUID 匹配的所有设备。 在本示例中,GUID 为 USB 类。

DoPoolCheck

True 或 False。 通过使用池标记和旁视列表监控驱动程序对分页和非分页系统内存池的使用情况。 此选项还可监控已处理的异常数量变化,这可能指示在异常处理时出错。

ChangeBufferProtectionFlags

True 或 False。 更改传递至已测试设备的缓冲区的内存保护标志。 此内存保护标志在无访问权限、只读和具有页防护的只读之间变化。

DoSimpleIO

True 或 False。 在执行 PNP 操作之前和之后,在测试设备上运行简单 I/O(如发现)。

DoConcurrentIO

True 或 False。 执行 PnP 操作时,使用 WDTF 并发 I/O 接口向目标设备堆栈发送 I/O 请求。

FillZeroPageWithNull

True 或 False。 映射零页并使用 NULL 值进行填充。 此测试用于确定在取消调用指针之前无法验证指针的驱动程序。

FuzzTestPeriod

模糊测试周期(分钟)。

HPU

指定高处理器使用率百分比。

Impersonate

True 或 False。 以用户身份(无管理员权限)运行测试。

IOPeriod

指定 I/O 周期(分钟)。

IOType

指定 I/O 压力测试的类型:SimpleIOStressEx 或 SimpleIOStressProc(单独进程中的 I/O)。

LPU

指定低处理器使用率百分比。

MaxInBuffer

指定测试传递至 FSCTL(或 IOCTL,对于 IOCTL 测试)中的驱动程序的输入缓冲区最大大小(字节)。

MinInBuffer

指定测试传递至 FSCTL(或 IOCTL,对于 IOCTL 测试)中的驱动程序的输入缓冲区最小大小(字节)。

MaxOutBuffer

指定测试传递至 FSCTL(或 IOCTL,对于 IOCTL 测试)中的驱动程序的输出缓冲区最大大小(字节)。

MinOutBuffer

指定测试传递至 FSCTL(或 IOCTL,对于 IOCTL 测试)中的驱动程序的输出缓冲区最小大小(字节)。

MaxRandomCalls

指定测试发出的最大调用次数。

MaxTailoredCalls

指定在定制的随机测试中测试发出的最大调用次数。

MaxDeviceType

指定 FSCTL(或 IOCTL,对于 IOCTL 测试)中的 DeviceType 字段的最大值。 可能的最大值是 65535。

MinDeviceType

指定 FSCTL(或 IOCTL,对于 IOCTL 测试)中的 DeviceType 字段的最小值。 可能的最小值为 0。

MaxFunctionCode

指定 FSCTL(或 IOCTL,对于 IOCTL 测试)中的 FunctionCode 字段的最大值。 可能的最大值是 4095。

MinFunctionCode

指定 FSCTL(或 IOCTL,对于 IOCTL 测试)中的 FunctionCode 字段的最小值。 可能的最小值为 0。

PU

指定处理器使用率百分比

PingPongPeriod

指定乒乓周期(分钟);它是指处理器在高 (HPU) 和低 (LPU) 处理器使用率水平之间变化的时间。

ResumeDelay

计算机从睡眠模式恢复之后与下一个 I/O 周期开始之前的延迟时间(秒)。 此延迟时间对于让设备恢复其工作状态(续订网络卡的 IP 地址等)来说是必要的。

TestCycles

指定要执行的测试周期数(迭代数)。

WDTFREMOTESYSTEM

仅当进行测试的设备或其子设备之一为没有 IPv6 网关地址的有线网络适配器时才需要使用此参数。 如果网络需要使用此参数,则必须提供一个测试网络适配器可用其连接至测试网络的 IPv6 地址。

示例:fe80::78b6:810:9c12:46cd

Wpa2PskAesSsid

仅当进行测试的设备或其子设备之一为 WLAN 适配器时才需要使用此参数。 提供测试可用其测试 WLAN 适配器的 WPA2 AES WLAN 网络 SSID。

默认值:kitstestssid

Wpa2PskPassword

仅当进行测试的设备或其子设备之一为 WLAN 适配器时才需要使用此参数。 提供由使用 Wpa2PskAesSsid 参数指定的 WPA2 AES WLAN 网络的密码。

默认值:password

实用程序测试

测试 说明

显示具有 WDTF 简单 I/O 插件的设备

参数:

显示已启用驱动程序验证程序的设备

参数:

显示设备

参数:

驱动程序验证程序

测试 说明

禁用驱动程序验证程序

禁用测试计算机上的驱动程序验证程序

参数:

启用驱动程序验证程序

可以使用此测试在测试计算机上为设备的所有驱动程序启用驱动程序验证程序

参数: - 请参阅驱动程序验证程序选项