微軟的檔案:https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/setting-up-a-usb-3-0-debug-cable-connection 1,除錯驅動時要先打開testsiging,命令為: bcdedit /set testsigining on 2,bcdedit命令執行失敗,說由于安全策略的保護,執行失敗,解決方法:關掉Secure boot 3,新裝的系統不能安裝開發好的驅動,安裝時設備管理器提示當前沒有更好的驅動,這時 需確認我們使用的簽名是否已經安裝在測驗機中,并安裝在受信任的存盤位置, 同時要使用 bcdedit -set testsigning on 命令來啟用測驗簽名,測驗簽名啟用以后有的驅動可以直接安裝,有的驅動需要安裝簽名以后才能安裝, 4,關掉secureboot之前先要關掉bitlocker,否則重啟后無法進入系統, 5,dbgView或者用kernel debugger連接以后在windbg中,不能看到驅動列印的LOG,需增加如下注冊表資訊: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter,找到注冊表的這個項,在我機器上是沒有Debug Print Filter子項的,手動建好,在這個鍵下新建default的dword值,十六進制為0XF,然后重啟電腦,就可以看到日志輸出了, UMDF訊息顯示的開關在:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\ 6,USB kernel debugger連接不上的排查, 1)按WDK檔案中所說,先在目標機上設定(test為任意名稱, busparams后的字串是用usbview查找除錯線插入的USB根HUB上的資訊): bcdedit /debug on bcdedit /dbgsettings usb targetname:test bcdedit /set "{dbgsettings}" busparams 0.20.0 2)主控機上啟動windbg時,第一次一定要使用admin權限啟動與主控機CPU指令集一致版本(如X86,X64,ARM等),否則“USB Connection Device”不能自動安裝, 3)做完之前的設定,打開windbg,選USB kernel debugger, windbg中如果顯示:USB: Write opened,就說明已經建立了連接,不需要重啟目標機,WDK的檔案里說的重啟,只是說明下次重啟時它會自動連接, 4)如果不能建立連接,或者插入USB線以后PC機上的USB HUB不能正常作業(設備管理器中顯示嘆號),需要關閉兩端的USB口(除錯用到的)的電源管理頁中的 “允許計算機關閉此設備以節約電源”(清除該文字前邊的勾選) 5)如果還有問題,可以把USB線換到其它USB口上試試,我就為此花過挺多時間, 6)記得一定要用USB3.0的交叉線,判斷是否是USB3.0的方法: USB3.0交叉線一旦插入,主控機上會顯示“USB Connection Device”連接,非3.0版本的線插入后設備管理器里不會有反應, 7,WHCK問題排查: 測驗:PCI Root Port Surprise Remove Test(PCI devcies only)(Reliability)時報告:
WDTF_PNP : Target: I/O LPC Controller - 0284 for Intel(R) 400 Series Chipset Family On-Package Platform Controller Hub PCI\VEN_8086&DEV_0284&SUBSYS_380C17AA&REV_00\3&11583659&0&F8 WexTraceInfo ThreadId=212 ProcessId=10440 TimeStamp=1798605197 LogSessionId=1 SessionTraceCount=293
Result: TestSurpriseRemove operation timed out waiting for IRP_MN_REMOVE_DEVICE.. WexTraceInfo ThreadId=212 ProcessId=10440 TimeStamp=4799338572 LogSessionId=1 SessionTraceCount=294
Result: Failed to receive IRP_MN_REMOVE_DEVICE after receiving IRP_MN_SURPRISE_REMOVAL. Ensure that there are no open handles or references to the test device (in user mode or in kernel mode) preventing IRP_MN_REMOVE_DEVICE from being sent. You may need to terminate any processes or services that may have open user mode handles to this device. ( 80004005 )
因為出錯時的驅動名字里帶HUB,一開始想到了除錯用的USB,所以關掉kernel debug,沒有用,去設備管理器找 LPC Controller - 0284 for Intel(R) 400 Series Chipset Family On-Package Platform Controller Hub這個設備,發現它有一個沒有簽名的驅動:msdmfilt.sys, 搞不清楚其出現的原因,將驅動版本回滾,該設備變成了PCI 標準ISA橋,我猜測該設備是PCI總線,而我的驅動掛在PCI總線上,所以需要測驗它,再次測驗時發現測驗開始前有一個確認引數的視窗,其中有一項叫DriverVerfifierAdditionalDrivers,其值為:msdmfilt.sys,將其設定為空字串,并將設備驅動恢復(以洗掉msdmfilt.sys) ,也一樣會失敗, 后來將系統重裝,該測驗用例可以通過,但我的功能不起作用,將系統更新,沒有安裝驅動的兩個設備安好,需要的應用也都安好,確認功能正常以后,測驗用例又會失敗, 所以判斷是新加入的應用及驅動有影響,將新加入的兩個驅動禁用之后測驗可以通過,但這兩個驅動都是通過WHCK測驗的,懷疑是我的使用方法有問題,對兩個驅動做同一個WHCK測驗,發現會失敗, 它也有同樣的提示,說可能設備被其它程式打開了,只是它不再提示PCI\VEN_8086&DEV_0 有問題,直接提示正在測驗的驅動有這個問題,到此恍然大悟,該驅動被它的應用打開了(應用程式啟動就會打開),修改設定,使該程式開機時不自動啟動, 再測驗可以通過了,轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/40785.html
標籤:C++
上一篇:尋找兩個有序陣列的中位數
下一篇:括號生成
