排除对设备基本组件测试记录的 WLAN SimpleIO 插件故障

Windows Hardware Lab Kit (Windows HLK) 和 Windows Drivers Kit (WDK) 中的设备基本组件测试使用 Windows 设备测试框架 (WDTF)SimpleIO 插件在运行时测试特定于设备的 IO。 如果对于进行测试的设备类型,存在 WDTF 插件,则测试会使用 IWDTFSimpleIOStressAction2 接口对设备测试 I/O。

本文包含的信息可帮助对 WDTF WLAN SimpleIO 插件在 WDK 和 Windows HLK 中进行设备和系统测试期间用于对无线网络适配器测试 IO 时所记录的故障进行故障排除。

配置要求

WLAN SimpleIO 插件需要使用可在运行时连接到的 AES 的基本 WPA2-PSK 无线网络。 无线网络的 SSID 和密码必须作为参数传递给需要它们的测试。 这些参数在需要它们的测试中按如下所示进行命名:Wpa2PskAesSsid 和 Wpa2PskPassword。 这两个参数的默认值分别为 kitstestssid 和 password。

测试覆盖率概述

WLAN SimpleIO 插件对受测无线适配器执行以下测试:

  1. 通过调用 WlanEnumInterfaces 函数来查找进行测试的 Wlan 接口。

  2. 通过调用 WlanGetProfile() 函数WlanDeleteProfile() 函数来删除名为 WDTFWlanTestProfile 的测试配置文件(如果存在)。

  3. 通过调用 WlanSetProfile() 函数并使用配置文件 XML 来创建名为 WDTFWlanTestProfile 的新测试配置文件。 该配置文件使用无线网络的 SSID 和密码作为测试的输入参数。

  4. 通过调用 WlanConnect() 函数来连接到新创建的配置文件。 应在 30 秒内收到“连接完成”通知。

  5. 通过调用网络列表管理器 API 的 INetworkListManager::GetConnectivity 方法来检查连接,并查找要设置的 NLM_CONNECTIVITY 枚举 NLM_CONNECTIVITY_IPV4_INTERNET 或 NLM_CONNECTIVITY_IPV4_LOCALNETWORK 标志。 插件在等待连接时会多次调用 GetConnectivity() 函数(如果需要),直到它最终超时并报告错误。

  6. 调用 GetAdaptersInfo() 函数以确定对应于测试适配器的网关地址。

  7. 通过调用 IcmpCreateFile() 函数来打开 ICMP 句柄,并在循环中调用某个内部函数几分钟,该函数在每次调用时都会对 IPv4 网关地址执行 ping 操作 500 次(使用 IcmpSendEcho() 函数以及 1 秒超时),如果在任何时候调用它时,失败率 > 10%,则记录错误消息。

  8. 通过调用 WlanDisconnect() 函数与网络断开连接。

  9. 通过调用 WlanGetProfile() 函数WlanDeleteProfile() 函数来删除测试配置文件。

故障排除指南

标识 WLAN SimpleIO 插件记录的故障

插件记录的错误消息会包含文本“WirelessPlugin:”。 紧跟在“WirelessPlugin:”后面的文本提供了有关错误的更多上下文。 例如:

WDTF_SIMPLE_IO            : ERROR :  - Open(802.11n USB Wireless LAN Card USB\VID_XXXX&PID_XXXX\5&35DEE9D9&0&5 ) Failed : WirelessPlugin: ConnectToTestProfile() - Failed to connect to test profile; Reason string: "The specific network is not available." HRESULT=0x80004005

常规故障排除指南

建议按照列出的顺序执行故障排除步骤:

  1. 查看测试文档以了解测试方案。

  2. 查看测试覆盖率概述以了解插件如何测试设备或驱动程序。

  3. 仔细查看错误消息前面的日志条目以及错误消息本身,以了解测试方案和故障原因。

  4. 对路由器设置进行故障排除。 请确保你可以手动连接到路由器、在建立连接后可以对网关地址执行 ping 操作并且路由器处于到测试计算机的范围内。 如果路由器未通过其中任何测试,请重置路由器。

  5. 在测试驱动程序中启用跟踪,并查看从测试记录错误以来的驱动程序跟踪。

  6. 启用 WLAN OS 跟踪,并查看从记录错误以来所记录的跟踪。 有关 WLAN OS 跟踪的详细信息,请参阅在 Windows 7 中使用网络跟踪进行故障排除的工具

在某些情况下,从命令行手动运行失败测试(不使用 Windows HLK 或 WDK),然后查看插件的 WPP 跟踪会十分有用。 请参阅如何从命令行运行测试以及查看 WLAN 插件跟踪

如何从命令行运行测试

建议使用 Windows HLK 客户端手动运行测试,因为 Windows HLK 客户端上安装了 WDTF。 按照如何在命令行上运行 Windows HLK 设备基本组件测试中的步骤执行操作。 在 Ndis.sys 和测试 Wi-Fi 驱动程序中启用驱动程序验证程序。

查看 WLAN 插件跟踪

WLAN 插件会使用 WPP 跟踪来跟踪信息和错误,你在调查 WLAN 插件记录的故障时可能会发现这些内容十分有用。 有关如何收集和查看 WDTF 跟踪的说明,请参阅收集和查看 Windows 设备测试框架 (WDTF) 跟踪

注意

WDTF_Action_SimpleIO_Wireless 是可用于筛选的提供程序的名称。

示例跟踪输出

                               -->this(047BB318):?FinalConstruct@CWirelessImpl@@QEAAJXZ(void)
                               <--this(047BB318):?FinalConstruct@CWirelessImpl@@QEAAJXZ(): S_OK
                               o->this(047BB318):?SetTarget@CWirelessImpl@@UEAAJPEAUITarget@@UtagVARIANT@@@Z(pMainTarget = 0476BBAC, MoreTargets = 8)
                                    INFO:Calling WlanOpenHandle() function
                                    INFO:Calling WlanEnumInterfaces() function to find wlan interface under test: N300 USB Network Adapter" ({4138C082-E821-433C-ABB8-6FF864BF80B5})"
                                    INFO:Found 1 wlan interfaces in total
                                    INFO:Processing wlan interface: N300 USB Network Adapter""
                                    INFO:Found the wlan interface under test!
                                    INFO:Interface information: Interface Guid: {4138C082-E821-433C-ABB8-6FF864BF80B5}; Interface State: disconnected""
                               o<-this(047BB318):?SetTarget@CWirelessImpl@@UEAAJPEAUITarget@@UtagVARIANT@@@Z(): S_OK
           o->this(047BB318):?Open@CWirelessImpl@@UEAAJXZ(void)
                INFO:Calling WlanOpenHandle() function
                -->this(047BB318):?FindAndDeleteTestProfile@CWirelessImpl@@AEAAJXZ(void)
                     INFO:Test profile WDTFWlanTestProfile" doesn't exist"
                o<-this(047BB318):?FindAndDeleteTestProfile@CWirelessImpl@@AEAAJXZ(): S_OK
                -->this(047BB318):?CreateTestProfile@CWirelessImpl@@AEAAJXZ(void)
                     INFO:Calling WlanSetProfile() with a profile XML to create a profile with name: WDTFWlanTestProfile"
                o<-this(047BB318):?CreateTestProfile@CWirelessImpl@@AEAAJXZ(): S_OK
                -->this(047BB318):?ConnectToTestProfile@CWirelessImpl@@AEAAJXZ(void)
                     INFO:Calling WlanRegisterNotification() to get notified of connect complete event
                     INFO:Calling WlanConnect() to connect to test profile with name: WDTFWlanTestProfile""
                     INFO:Waiting to receive connect complete notification
                     INFO:Received connect complete notification: 0
                     INFO:Calling WlanRegisterNotification() to unregister from notifications
                o<-this(047BB318):?ConnectToTestProfile@CWirelessImpl@@AEAAJXZ(): S_OK
                INFO:Calling an internal helper function to check for the connectivity state of the network connection
                -->this(047BB318):?CheckForConnectivity@CWirelessImpl@@AEAAJPEA_N@Z(void)
                     INFO:Creating an instance of the NLM COM object
                     INFO:Calling NLM GetNetworkConnections() to get a list of network connections
                     INFO:Iterating through the network connections found looking for the connection corresponding to the test adapter ({4138C082-E821-433C-ABB8-6FF864BF80B5})
                     INFO:Calling NLM GetAdapterId() on a network connection found
                     INFO:Calling NLM GetAdapterId() on a network connection found
                     INFO:Found a network connection using the test adapter!
                     INFO:Calling NLM GetConectivity() on a network connection using the test adapter
                     INFO:NLM GetConectivity() reported the following connectivity state: 66
                     INFO:NLM GetConectivity() reported IPv4 connectivity!
                o<-this(047BB318):?CheckForConnectivity@CWirelessImpl@@AEAAJPEA_N@Z(): S_OK
                -->this(047BB318):?RefreshIPInfo@CWirelessImpl@@AEAAJXZ(void)
                     INFO:Calling GetAdaptersInfo() function to find IP address info for adapter {4138C082-E821-433C-ABB8-6FF864BF80B5}""
                     INFO:Found the adapter we are looking for!
                     INFO:Adapter Info: Index: 4, IPv4 Address: 192.168.1.147, Gateway Address: 192.168.1.1
                o<-this(047BB318):?RefreshIPInfo@CWirelessImpl@@AEAAJXZ(): S_OK
                INFO:Calling IcmpCreateFile() function
                INFO:Pinging gateway (192.168.1.1) 10 times
                -->this(047BB318):?TestPingGateway@CWirelessImpl@@AEAAJHH@Z(numPings: 10)
                     INFO:Calling IcmpSendEcho() to ping gateway (192.168.1.1) 10 times with a random input buffer of size 255 and a timeout value of 1000 milliseconds
                o<-this(047BB318):?TestPingGateway@CWirelessImpl@@AEAAJHH@Z(): S_OK
           o<-this(047BB318):?Open@CWirelessImpl@@UEAAJXZ(): S_OK
           o->this(047BB318):?RunIO@CWirelessImpl@@UEAAJXZ(void)
                -->this(047BB318):?TestPingGateway@CWirelessImpl@@AEAAJHH@Z(numPings: 500)
                     INFO:Calling IcmpSendEcho() to ping gateway (192.168.1.1) 500 times with a random input buffer of size 255 and a timeout value of 1000 milliseconds
                o<-this(047BB318):?TestPingGateway@CWirelessImpl@@AEAAJHH@Z(): S_OK
           o<-this(047BB318):?RunIO@CWirelessImpl@@UEAAJXZ(): S_OK
           o->this(047BB318):?RunIO@CWirelessImpl@@UEAAJXZ(void)
                -->this(047BB318):?TestPingGateway@CWirelessImpl@@AEAAJHH@Z(numPings: 500)
                     INFO:Calling IcmpSendEcho() to ping gateway (192.168.1.1) 500 times with a random input buffer of size 255 and a timeout value of 1000 milliseconds
                o<-this(047BB318):?TestPingGateway@CWirelessImpl@@AEAAJHH@Z(): S_OK
           o<-this(047BB318):?RunIO@CWirelessImpl@@UEAAJXZ(): S_OK
...
...
...
           o->this(047BB318):?Close@CWirelessImpl@@UEAAJXZ(void)
                -->this(047BB318):?DisconnectFromTestProfile@CWirelessImpl@@AEAAJXZ(void)
                     INFO:Calling WlanDisconnect() to disconnect
                o<-this(047BB318):?DisconnectFromTestProfile@CWirelessImpl@@AEAAJXZ(): S_OK
                -->this(047BB318):?FindAndDeleteTestProfile@CWirelessImpl@@AEAAJXZ(void)
                     INFO:Calling WlanDeleteProfile() to delete the previously created test profile with name WDTFWlanTestProfile""
                o<-this(047BB318):?FindAndDeleteTestProfile@CWirelessImpl@@AEAAJXZ(): S_OK
           o<-this(047BB318):?Close@CWirelessImpl@@UEAAJXZ(): S_OK

使用 Windows HLK 排查设备基本组件可靠性测试问题

排查 Windows HLK 问题

Windows HLK 支持