針對裝置基本概念測試所記錄的 WLAN SimpleIO 外掛程式失敗進行疑難排解
Windows 硬體實驗室套件中的裝置基本概念測試 (Windows HLK) 和Windows 驅動程式套件 (WDK) 使用Windows Device Testing Framework (WDTF) SimpleIO 外掛程式,在執行時測試裝置特定的 IO。 如果測試的裝置類型存在 WDTF 外掛程式,則測試會使用 IWDTFSimpleIOStressAction2 介面 來測試裝置上的 I/O。
本文包含的資訊,可協助針對 WDTF WLAN SimpleIO 外掛程式在 WDK 和 Windows HLK 中的裝置和系統測試期間測試無線網路介面卡上的 IO 時所記錄的失敗進行疑難排解。
設定需求
WLAN SimpleIO 外掛程式需要基本的 WPA2-PSK 無線網路,其使用可在執行時連線到的 AES。 無線網路的 SSID 和密碼必須以參數的形式傳入需要它們的測試。 這些參數在需要這些參數的測試中會命名如下: Wpa2PskAesSsid 和 Wpa2PskPassword。 兩個參數的預設值分別是 kitstestssid 和 password。
測試涵蓋範圍概觀
WLAN SimpleIO 外掛程式會在受測無線介面卡上執行下列測試:
藉由呼叫 WlanEnumInterfaces 函式來尋找測試中的 Wlan 介面。
藉由呼叫WlanGetProfile () 函式和 WlanDeleteProfile () 函式,刪除名為 WDTFWlanTestProfile 的測試設定檔) (。
呼叫WlanSetProfile () 函式,並使用設定檔 XML,建立名為WDTFWlanTestProfile的新測試組態檔。 設定檔會使用無線網路的 SSID 和密碼作為測試的輸入參數。
呼叫 WlanConnect () 函式,以連線到新建立的設定檔。 預期會在 30 秒內收到 連線完成 通知。
呼叫網路清單管理員API 的INetworkListManager::GetConnectivity 方法來檢查連線能力,並尋找要設定的NLM_CONNECTIVITY列舉NLM_CONNECTIVITY_IPV4_INTERNET或NLM_CONNECTIVITY_IPV4_LOCALNETWORK旗標。 外掛程式會呼叫 GetConnectivity () 函式多次, (視需要) 等候連線,最後再逾時並回報錯誤。
呼叫 GetAdaptersInfo () 函式 ,以判斷對應至測試配接器的閘道位址。
藉由呼叫 IcmpCreateFile () 函式來開啟 ICMP 控制碼,並在每次呼叫 IPv4 閘道 (位址時呼叫內部函式數分鐘,以使用 IcmpSendEcho () 函式) 500 次,並在呼叫時記錄錯誤訊息, 失敗率為 > 10%。
藉由呼叫 WlanDisconnect () 函式來中斷網路連線。
藉由呼叫 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
一般疑難排解指引
建議您依照列出的順序遵循疑難排解步驟:
檢閱測試檔案以瞭解測試案例。
檢閱 測試涵蓋範圍概觀 ,以瞭解外掛程式如何測試裝置或驅動程式。
請仔細檢閱錯誤訊息前面的記錄專案,以及錯誤訊息本身,以瞭解測試案例和失敗的原因。
針對路由器設定進行疑難排解。 請確定您可以手動連線到路由器,您可以在進行連線之後偵測閘道位址,且路由器位於測試電腦的範圍內。 如果路由器失敗上述任何測試,請重設路由器。
在測試驅動程式中啟用追蹤,並從測試記錄錯誤的時間檢閱驅動程式追蹤, (s) 。
啟用 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