欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種定位設(shè)備所連接的usb端口的方法

文檔序號:6333310閱讀:1027來源:國知局
專利名稱:一種定位設(shè)備所連接的usb端口的方法
技術(shù)領(lǐng)域
本發(fā)明涉及計(jì)算機(jī)通信領(lǐng)域,特別涉及一種定位設(shè)備所連接的USB端口的方法。
背景技術(shù)
USB HUB是一種可以將一個(gè)USB接口擴(kuò)展成為多個(gè)獨(dú)立工作的USB接口,并使這些 USB接口可以同時(shí)使用的設(shè)備,它是一種特殊的USB設(shè)備。并且USB HUB直接與電腦相連, 無須外接電源,簡單好用,電腦自動識別安裝,無須驅(qū)動程序,即插即用。
目前,隨著電腦的普及,相應(yīng)帶動了電腦包括USB HUB在內(nèi)的周邊產(chǎn)品的飛速發(fā) 展。USB HUB以其使用方便、可靠性好等特點(diǎn)受到了消費(fèi)者的普遍歡迎。但是由于USB HUB上沒有明確的標(biāo)識,因此當(dāng)一個(gè)USB HUB或多個(gè)USB HUB上連 接有多個(gè)同樣類型的設(shè)備時(shí),上位機(jī)無法獲得設(shè)備與端口的對應(yīng)關(guān)系,也就無法定位設(shè)備 所連接的USB端口。

發(fā)明內(nèi)容
為了解決現(xiàn)有技術(shù)中的不足,本發(fā)明提供了一種定位設(shè)備所連接的USB端口的方 法,所述方法包括上位機(jī)讀取連接在其自身上的第一設(shè)備的路徑;所述上位機(jī)對當(dāng)前USB HUB的當(dāng)前端口進(jìn)行查詢,獲取所述當(dāng)前端口上的設(shè)備連 接信息,并根據(jù)所述設(shè)備連接信息對所述當(dāng)前端口進(jìn)行判斷;當(dāng)判斷得到所述當(dāng)前端口上連接的是普通USB設(shè)備時(shí);所述上位機(jī)獲取所述普通USB設(shè)備在驅(qū)動程序下的路徑;所述上位機(jī)根據(jù)所述設(shè)備連接信息中的廠家標(biāo)識符信息和設(shè)備標(biāo)識符信息在所 述普通USB設(shè)備的注冊表路徑下查找第一信息;所述上位機(jī)判斷所述第一設(shè)備的路徑中是否包含所述第一信息;當(dāng)判斷得到所述第一設(shè)備的路徑中包含所述第一信息時(shí),則表示所述第一設(shè)備和 所述普通USB設(shè)備為同一設(shè)備,所述上位機(jī)將所述第一設(shè)備的路徑與所述當(dāng)前端口進(jìn)行關(guān) 聯(lián),定位所述第一設(shè)備所連接的USB端口。本發(fā)明的有益效果在于本發(fā)明提供了一種定位設(shè)備所連接的USB端口的方法, 通過本發(fā)明提供的方法就可以定位設(shè)備所連接的USB端口。


圖1為本實(shí)施例1提供的一種定位HID設(shè)備所連接的USB端口的方法的流程圖;圖2為本實(shí)施例2提供的一種定位CCID設(shè)備所連接的USB端口的方法的流程圖;圖3為本實(shí)施例3提供的一種定位SCSI設(shè)備所連接的USB端口的方法的流程圖。
具體實(shí)施例方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對本發(fā)明實(shí)施方 式做進(jìn)一步地詳細(xì)描述。
實(shí)施例1本發(fā)明實(shí)施例提供了一種定位設(shè)備所連接的USB端口的方法,具體地,在本實(shí)施 例中以HID設(shè)備為例進(jìn)行說明,HID設(shè)備通過USB HUB連接到上位機(jī)上,其中連接在上位機(jī) 與HID設(shè)備之間的USB HUB可以是一個(gè)或多個(gè)。參見圖1,一種定位HID設(shè)備所連接的USB端口的方法,具體實(shí)現(xiàn)步驟如下步驟101 上位機(jī)讀取連接在自身上的HID設(shè)備的HID路徑;其中,與上位機(jī)相連的HID設(shè)備可以是一個(gè)或多個(gè),當(dāng)有多個(gè)HID設(shè)備時(shí),則上位 機(jī)讀取所有HID設(shè)備的HID路徑,具體地,在本實(shí)施例中以一個(gè)HID設(shè)備為例進(jìn)行說明;進(jìn)一步地,HID路徑可以從WM_DEVICECHANGE消息傳入的參數(shù)中讀取,也可以通過 調(diào)用SetupDiGetDeviceInterfaceDetail來枚舉已連接的HID設(shè)備,獲取其HID路徑;具體地,讀取得到的HID 路徑為 \\ ? \hid#vid_096e&pid_0304#7&2c7bc087&0&0 000# {4dle55b2-f16f-llcf-88cb-001111000030}。步驟102 上位機(jī)對主控制器進(jìn)行查詢,獲取主控制器上連接的根USB HUB的名 稱;在本實(shí)施例中,上位機(jī)具體通過對主控制器發(fā)送I0CTL_USB_GET_R00T_HUB_NAME 請求,獲取連接在主控制器上的根USBHUB的名稱。步驟103 上位機(jī)打開當(dāng)前USB HUB,并對該當(dāng)前USB HUB進(jìn)行查詢,獲得當(dāng)前USB HUB的端口數(shù)目;在本實(shí)施例中,當(dāng)是第一次對該主控制器上連接的設(shè)備進(jìn)行查詢時(shí),則該主控制 器上連接的根USB HUB即是當(dāng)前USB HUB ;具體地,對當(dāng)前USB HUB進(jìn)行查詢的方法為上位機(jī)向當(dāng)前USB HUB 發(fā)送 I0CTL_USB_GET_N0DE_INF0RMATI0N 請求,獲取當(dāng)前 USB HUB的端口數(shù)目。步驟104 上位機(jī)對當(dāng)前USB HUB的當(dāng)前端口進(jìn)行查詢,獲取當(dāng)前端口上的設(shè)備連 接信息;在本實(shí)施例中,當(dāng)是第一次對此當(dāng)前USB HUB進(jìn)行查詢時(shí),則此當(dāng)前USBHUB的第 一端口則為當(dāng)前端口;其中,對當(dāng)前USB HUB的當(dāng)前端口進(jìn)行查詢的方法為上位機(jī)向當(dāng)前USB HUB 的當(dāng)前端 口發(fā)送 10CTL_USB_GET_N0DE_C0NNECT 10N_ INFORMATION請求,獲取該端口上的設(shè)備連接信息,其中設(shè)備連接信息中具體包括連接狀態(tài) 標(biāo)志位、HUB標(biāo)志位、廠家標(biāo)識符信息和設(shè)備標(biāo)識符信息等信息;具體地,獲得的其中一個(gè)設(shè)備連接信息為USB_N0DE_C0NNECTI0N_INFORMATION connectionlnfoconnectionlnfo. connectionlndex = 0x00000003connectionlnfo. DeviceDescriptor. blength = 0x12connectionlnfo. DeviceDescriptor. bDescriptorType = 0x01
connectionlnfo. DeviceDescriptor. bcdUSB = OxOllOconnectionlnfo. DeviceDescriptor. bDeviceClass = OxOOconnectionlnfo. DeviceDescriptor. bDeviceSubClass = OxOO
connectionlnfo. DeviceDescriptor. bDeviceProtocol = OxOOconnectionlnfo.DeviceDescriptor. bMaxPacketSizeO = OxlOconnectionlnfo. DeviceDescriptor. idVendor = 0x096econnectionlnfo. DeviceDescriptor. idProduct = 0x0304connectionlnfo. DeviceDescriptor. bcdDevice = 0x0104connectionlnfo. DeviceDescriptor. iManufacturer = OxOlconnectionlnfo. DeviceDescriptor. iProduct = 0x02connectionlnfo. DeviceDescriptor. iSerialNumber = OxOOconnectionlnfo. DeviceDescriptor. bNumConfigurations = OxOlconnectionlnfo. CurrentConfigurationValue = OxOlconnectionlnfo. LowSpeed = OxOOconnectionlnfo. DeviceIsHub = OxOOconnectionlnfo. DeviceAddress = 0x0002connectionlnfo. NumberOfOpenPipes = 0x00000002connectionlnfo. ConnectionStatus = 0x00000001connectionlnfo. PipeList = 0x00150f33。步驟105 根據(jù)獲得的設(shè)備連接信息對當(dāng)前端口進(jìn)行判斷,若判斷得到當(dāng)前端口 上沒有連接設(shè)備,則執(zhí)行步驟106,若判斷得到當(dāng)前端口上連接的是USBHUB,則執(zhí)行步驟 111,若判斷得到當(dāng)前端口上連接的是普通USB設(shè)備,則執(zhí)行步驟112 ;在本實(shí)施例中,根據(jù)獲得的設(shè)備連接信息對當(dāng)前端口進(jìn)行判斷的方法具體如下先對設(shè)備連接信息中的連接狀態(tài)標(biāo)志位connectionlnfo. ConnectionStatus進(jìn) 行判斷,當(dāng)判斷得到連接狀態(tài)標(biāo)志位connectionlnfo. ConnectionStatus為0x00000001 時(shí),則表示該當(dāng)前端口上連接了設(shè)備,當(dāng)判斷得到連接狀態(tài)標(biāo)志位connectionlnfo. ConnectionStatus為0x00000000時(shí),則表示該當(dāng)前端口上沒有連接設(shè)備;進(jìn)一步地,當(dāng)判斷得到連接狀態(tài)標(biāo)志位connectionlnfo. ConnectionStatus為 0x00000001時(shí),還需要判斷設(shè)備連接信息中的HUB標(biāo)志位connectionlnfo. DeviceIsHub是 為0x00還是為0x01,當(dāng)判斷得到HUB標(biāo)志位connectionlnfo. DeviceIsHub為0x01,則表 示該當(dāng)前端口上連接的是USB HUB,當(dāng)判斷得到HUB標(biāo)志位connectionlnfo. DeviceIsHub 為0x00,則表示該當(dāng)前端口上連接的是普通USB設(shè)備。步驟106 上位機(jī)判斷是否已查詢完當(dāng)前USB HUB的所有端口,若是,則執(zhí)行步驟 107,若否,則執(zhí)行步驟110;在本實(shí)施例中,上位機(jī)具體根據(jù)步驟103中所獲得的當(dāng)前USB HUB的端口數(shù)目來 判斷是否已查詢完當(dāng)前USB HUB的所有端口。步驟107 判斷當(dāng)前USB HUB是否存在上一級USB HUB,若是,則執(zhí)行步驟108,若 否,則執(zhí)行步驟109;步驟108 將當(dāng)前USB HUB的上一級USB HUB作為當(dāng)前USB HUB,然后返回到步驟106 ;步驟109 上位機(jī)判斷是否已查詢完所有的主控制器,若是,則結(jié)束操作,并提示無 法對步驟101中的HID設(shè)備進(jìn)行定位,若否,則返回到步驟102對下一個(gè)主控制器進(jìn)行查詢;在本實(shí)施例中,判斷是否已查詢完所有的主控制器的方法具體為上位機(jī)預(yù)先通過遍歷硬件 設(shè)備管理器可以知道主控制器的個(gè)數(shù),當(dāng)上位機(jī)查詢完 一個(gè)主控制器后則接著查詢下一個(gè)主控制器,直到查詢的主控制器的個(gè)數(shù)與上述遍歷得到 的主控制器的個(gè)數(shù)相等時(shí),則表示已查詢完所有的主控制器,當(dāng)預(yù)先知道主控制器的個(gè)數(shù) 為1時(shí),則查詢完一個(gè)主控制器后則直接結(jié)束操作,并提示無法對步驟101中的HID設(shè)備進(jìn) 行定位;或者,上位機(jī)依次打開設(shè)備名稱開頭為HDC的設(shè)備,如HDCl、HDC2、HDC3、......,若打
開成功,則說明還存在沒有查詢過的主控制器,若打開失敗,則說明已查詢完所有的主控制 器;具體以上位機(jī)上包含多個(gè)主控制器為例進(jìn)行說明,當(dāng)查詢完一個(gè)主控制器,及該 主控制器所連接的所有設(shè)備后,上位機(jī)繼續(xù)查詢下一個(gè)主控制器,以及該主控制器所連接 的所有設(shè)備,直到所有的主控制器都查詢完畢;或者,在本實(shí)施例中,當(dāng)上位機(jī)包含多個(gè)主控制器時(shí),查詢的方法還可以為上位 機(jī)先查詢一個(gè)主控制器,得到該主控制器上連接的根USB HUB的名稱,然后不接著繼續(xù)查詢 該根USB HUB,而是開始查詢下一個(gè)主控制器,直到所有的主控制器都查詢完畢,再開始查 詢主控制器上所連接的各個(gè)根USB HUB;進(jìn)一步地,在實(shí)際應(yīng)用過程中,上位機(jī)上也有可能只含有一個(gè)主控制器,此時(shí)本實(shí) 施例中則不需要再執(zhí)行步驟109,直接查詢該主控制器上連接的根USBHUB,以及根USB HUB 上連接的設(shè)備即可。步驟110 將當(dāng)前USB HUB的當(dāng)前端口的下一個(gè)端口作為當(dāng)前端口,并返回到步驟 104 ;步驟111 將連接的USB HUB作為當(dāng)前USB HUB,然后返回到步驟103 ;步驟112 上位機(jī)獲取該普通USB設(shè)備在驅(qū)動程序下面的路徑DriverKeyName ;具體地,由于在實(shí)際應(yīng)用過程中,上位機(jī)上可能連接了多個(gè)相同類型的設(shè)備,如多 個(gè)HID設(shè)備,因此僅憑步驟104獲得的設(shè)備連接信息中的廠家標(biāo)識符信息VID和設(shè)備標(biāo) 識符信息PID并不能正確定位到該HID設(shè)備所連接的端口,所以本實(shí)施例中還需要利用 DriverKeyName ;在本實(shí)施例中,獲取DriverKeyName的具體方法為上位機(jī)向該普通USB 設(shè)備發(fā)送 10CTL_USB_GET_N0DE_C0NNECT 10N_DRI VERKEY_ NAME請求,接收該普通USB設(shè)備返回的相關(guān)信息,其中返回的信息包括參數(shù) DriverKeyName,并且返回的信息的結(jié)構(gòu)具體定義為USB_N0DE_C0NNECTI0N_DRIVERKEY_ NAME ;其中,獲取DriverKeyName的實(shí)現(xiàn)代碼如下USB_N0DE_C0NNECTI0N_DRIVERKEY_NAME driverKeyNameS ;PCHARdriverKeyName ;
BOOLsuccess ;ULONGnBytes ;success = DeviceIoControl(HubHandle,IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME,& driverKeyNameS,sizeof(driverKeyNameS),&driverKeyNameS, sizeof(driverKeyNameS),&nBytes,NULL);If (success)driverKeyName = driverKeyNameS- > DriverKeyName ;//driverKeyName = {745A17A0-74D3-11D0-B6FE-00A0C90F57DA}\0120具體地,本實(shí)施例中獲取得到的DriverKeyName 為{745A17A0-74D3-11D0-B6FE-00A0C90F57DA}\0120步驟113 根據(jù)步驟104獲得的設(shè)備連接信息中的VID和PID,在該普通USB設(shè)備 的注冊表路徑下查找Driver鍵值的數(shù)據(jù)與driverKeyName匹配的子項(xiàng);在本實(shí)施例中,步驟104獲得的設(shè)備連接信息中的VID和PID分別為0x096e和 0x0304 ;查找Driver鍵值的數(shù)據(jù)與driverKeyName匹配的子項(xiàng)的方法具體為查找該普通USB設(shè)備的注冊表路徑HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet\Enum\USB\Vid_096e&Pid_0304 下面的所有子項(xiàng),找到 Driver 鍵值的 數(shù)據(jù)與driverKeyName匹配的子項(xiàng),即找到Driver鍵值的數(shù)據(jù)為{745A17A0-74D3-11D0-B 6FE-00A0C90F57DA} \0120 的子項(xiàng);具體地,在本實(shí)施例中找到的子項(xiàng)為6&cl95ce&0&3。步驟114 讀取查找到的子項(xiàng)下的ParentIdPrefix鍵值的數(shù)據(jù);具體地,在本實(shí)施例中,讀取得到的ParentIdPrefix鍵值的數(shù)據(jù)為 7&2c7bc087&0。步驟115 判斷步驟101讀取得到的HID路徑中是否包含步驟114讀取得到 ParentIdPrefix鍵值的數(shù)據(jù),若否,則返回到步驟106,若是,則表示目標(biāo)HID設(shè)備即連接在 該當(dāng)前端口上,執(zhí)行步驟116;在本實(shí)施例中,具體為判斷HID 路徑 \\ ? \hid#vid_096e&pid_0304#7&2c7bc087 &0&0000# {4dle55b2-f 16f-llcf-88cb-001111000030}中是否包含 ParentIdPrefix 鍵值的 數(shù)據(jù)7&2c7bc087&0,由此可知,步驟101HID路徑中包含ParentIdPrefix鍵值的數(shù)據(jù),因此 表示目標(biāo)HID設(shè)備即連接在該USB端口上,執(zhí)行步驟116。步驟116 上位機(jī)將步驟101中的HID設(shè)備的HID路徑與上述當(dāng)前端口進(jìn)行關(guān)聯(lián), 定位該HID設(shè)備所連接的當(dāng)前端口。進(jìn)一步地,在本實(shí)施例中,步驟105至步驟111還可以通過如下步驟實(shí)現(xiàn)步驟105’ 根據(jù)獲取的設(shè)備連接信息對當(dāng)前端口進(jìn)行判斷,若判斷得到當(dāng)前端口上沒有連接設(shè)備,則執(zhí)行步驟106’,若判斷得到當(dāng)前端口上連接的是USBHUB,則執(zhí)行步驟 111’,若判斷得到當(dāng)前端口上連接的是普通USB設(shè)備,則執(zhí)行步驟步驟112 ;步驟106’ 上位機(jī)判斷是否已查詢完當(dāng)前USB HUB的所有端口,若否,則執(zhí)行步驟 107,,若是,則執(zhí)行步驟108,;步驟107’ 將當(dāng)前USB HUB的當(dāng)前端口的下一個(gè)端口作為當(dāng)前端口,并返回到步 驟 104 ;步驟108’ 判斷是否存在已編號且未查詢過的USB HUB,若是,則執(zhí)行步驟109’, 若否,則執(zhí)行步驟110’ ;
步驟109’ 將編號最前面的USB HUB作為當(dāng)前USB HUB,并返回到步驟103 ;步驟110’ 上位機(jī)判斷是否已查詢完所有的主控制器,若是,則結(jié)束操作,并提示 無法對步驟101中的HID設(shè)備進(jìn)行定位,若否,則返回步驟102對下一個(gè)主控制器進(jìn)行查 詢;步驟111’:上位機(jī)判斷是否存在已經(jīng)編號的USB HUB,若否,則將此連接的USB HUB 編號為第一USB HUB,返回到步驟106’,若是,則接著已存在的編號繼續(xù)對此連接的USB HUB 進(jìn)行編號,返回到步驟106’。本實(shí)施例提供了一種定位HID設(shè)備所連接的USB端口的方法,通過本實(shí)施例提供 的方法就可以定位HID設(shè)備所連接的USB端口。實(shí)施例2本發(fā)明實(shí)施例提供了一種定位設(shè)備所連接的USB端口的方法,具體地,在本實(shí)施 例中以CCID設(shè)備為例進(jìn)行說明,CCID設(shè)備通過USB HUB連接到上位機(jī)上,其中連接在上位 機(jī)與CCID設(shè)備之間的USB HUB可以是一個(gè)或多個(gè)。參見圖2,一種定位CCID設(shè)備所連接的USB端口的方法,具體實(shí)現(xiàn)步驟如下步驟201 上位機(jī)讀取連接在自身上的CCID設(shè)備的USB路徑;其中,與上位機(jī)相連的CCID設(shè)備可以是一個(gè)或多個(gè),當(dāng)有多個(gè)CCID設(shè)備時(shí),則上 位機(jī)讀取所有CCID設(shè)備的USB路徑,具體地,在本實(shí)施例中以一個(gè)CCID設(shè)備為例進(jìn)行說 明;進(jìn)一步地,CCID設(shè)備的USB路徑可以從WM_DEVICECHANGE消息傳入的參數(shù)中讀 取,也可以通過調(diào)用SetupDiGetDeviceInterfaceDetail來枚舉已連接的CCID設(shè)備,獲取 其USB路徑;具體地,在本實(shí)施例中,讀取得到的CCID設(shè)備的USB路徑為W ? \usb#vid 096e &pid 070f#6&cl95ce&0&2#{a5dcbf10-6530-1Id2-901f-00c04fb951ed}步驟202 上位機(jī)對主控制器進(jìn)行查詢,獲取主控制器上連接的根USB HUB的名 稱;在本實(shí)施例中,上位機(jī)具體通過對主控制器發(fā)送I0CTL_USB_GET_R00T_HUB_NAME 請求,獲取連接在主控制器上的根USBHUB的名稱。步驟203 上位機(jī)打開當(dāng)前USB HUB,并對該當(dāng)前USB HUB進(jìn)行查詢,獲得該當(dāng)前 USB HUB的端口數(shù)目;在本實(shí)施例中,當(dāng)是第一次對該主控制器上連接的設(shè)備進(jìn)行查詢時(shí),則主控制器 上連接的根USB HUB即是當(dāng)前USB HUB ;
并且,對當(dāng)前USB HUB進(jìn)行查詢的方法具體為上位機(jī)向當(dāng)前USB HUB發(fā)送I0CTL_USB_GET_N0DE_INF0RMATI0N請求,獲得該當(dāng)前 USB HUB的端口數(shù)目。步驟204 上位機(jī)對當(dāng)前USB HUB的當(dāng)前端口進(jìn)行查詢,獲取當(dāng)前端口上的設(shè)備連 接信息;
在本實(shí)施例中,當(dāng)是第一次對此當(dāng)前USB HUB進(jìn)行查詢時(shí),則此當(dāng)前USBHUB的第 一端口即為當(dāng)前端口;其中,對當(dāng)前USB HUB的當(dāng)前端口進(jìn)行查詢的方法為;上位機(jī)向當(dāng)前USB HUB 的當(dāng)前端 口發(fā)送 10CTL_USB_GET_N0DE_C0NNECT 10N_ INFORMATION請求,獲取該當(dāng)前端口上的設(shè)備連接信息,其中設(shè)備連接信息中具體包括連接 狀態(tài)標(biāo)志位、HUB標(biāo)志位、廠家標(biāo)識符信息和設(shè)備標(biāo)識符信息等信息;具體地,本實(shí)施例中獲得的其中一個(gè)設(shè)備連接信息為USB_N0DE_C0NNECTI0N_INFORMATION connectionlnfo ;connectionlnfo. ConnectionIndex = 0x00000002 ;connectionlnfo. DeviceDescriptor. bLength = 0x12 ;connectionlnfo. DeviceDescriptor. bDescriptorType = OxOl ;connectionlnfo. DeviceDescriptor. bcdUSB = OxOllOconnectionlnfo. DeviceDescriptor. bDeviceClass = OxOOconnectionlnfo. DeviceDescriptor. bDeviceSubClass = OxOOconnectionlnfo. DeviceDescriptor. bDeviceProtocol =OxOOconnectionlnfo. DeviceDescriptor. bMaxPacketSizeO = 0x08connectionlnfo. DeviceDescriptor. idVendor = 0x096econnectionlnfo. DeviceDescriptor. idProduct = 0x070fconnectionlnfo. DeviceDescriptor. bcdDevice = 0x2100connectionlnfo.DeviceDescriptor. iManufacturer = OxOlconnectionlnfo. DeviceDescriptor. iProduct = 0x02connectionlnfo. DeviceDescriptor. iSerialNumber = OxOOconnectionlnfo. DeviceDescriptor. bNumConfigurations = OxOlconnectionlnfo. CurrentConfigurationValue = OxOlconnectionlnfo. LowSpeed = OxOOconnectionlnfo. DeviceIsHub = OxOOconnectionlnfo. DeviceAddress = 0x0002connectionlnfo. NumberOfOpenPipes = 0x00000002connectionlnfo. ConnectionStatus = 0x00000001connectionlnfo. PipeList = 0x00170093步驟205 根據(jù)獲得的設(shè)備連接信息對當(dāng)前端口進(jìn)行判斷,若判斷得到當(dāng)前端口 上沒有連接設(shè)備,則執(zhí)行步驟206,若判斷得到當(dāng)前端口上連接的是USBHUB,則執(zhí)行步驟 210,若判斷得到當(dāng)前端口上連接的是普通USB設(shè)備,則執(zhí)行步驟211 ;在本實(shí)施例中,根據(jù)獲得的設(shè)備連接信息對當(dāng)前端口進(jìn)行判斷的方法具體如下
先對設(shè)備連接信息中的連接狀態(tài)標(biāo)志位connectionlnfo. ConnectionStatus進(jìn) 行判斷,當(dāng)判斷得到連接狀態(tài)標(biāo)志位connectionlnfo. ConnectionStatus為0x00000001 時(shí),則表示該當(dāng)前端口上連接了設(shè)備,當(dāng)判斷得到連接狀態(tài)標(biāo)志位connectionlnfo. ConnectionStatus為0x00000000時(shí),則表示該當(dāng)前端口上沒有連接設(shè)備;
進(jìn)一步地,當(dāng)判斷得到連接狀態(tài)標(biāo)志位connectionlnfo. ConnectionStatus為 0x00000001時(shí),還需要判斷設(shè)備連接信息中的HUB標(biāo)志位connectionlnfo. DeviceIsHub是 為OxOO還是為0x01,當(dāng)判斷得到HUB標(biāo)志位connectionlnfo. DeviceIsHub為0x01,則表 示該當(dāng)前端口上連接的是USB HUB,當(dāng)判斷得到HUB標(biāo)志位connectionlnfo. DeviceIsHub 為0x00,則表示該當(dāng)前端口上連接的是普通USB設(shè)備。步驟206 上位機(jī)判斷是否已查詢完當(dāng)前USB HUB的所有端口,若是,則執(zhí)行步驟 207,若否,則執(zhí)行步驟209 ;在本實(shí)施例中,上位機(jī)具體根據(jù)步驟203中所獲得的當(dāng)前USB HUB的端口數(shù)目來 判斷是否已查詢完當(dāng)前USB HUB的所有端口。步驟207 判斷當(dāng)前USB HUB是否存在上一級USB HUB,若是,則執(zhí)行步驟208,若 否,則結(jié)束操作,并提示無法對步驟201中的CCID設(shè)備進(jìn)行定位;步驟208 將當(dāng)前USB HUB的上一級USB HUB作為當(dāng)前USB HUB,然后返回到步驟 206 ;步驟209 將當(dāng)前USB HUB的當(dāng)前端口的下一個(gè)端口作為當(dāng)前端口,并返回到步驟 204 ;步驟210 將連接的USB HUB作為當(dāng)前USB HUB,然后返回到步驟203 ;步驟211 上位機(jī)獲取該普通USB設(shè)備在驅(qū)動程序下面的路徑DriverKeyName ;具體地,由于在實(shí)際應(yīng)用過程中,上位機(jī)上可能連接了多個(gè)相同類型的設(shè)備,如多 個(gè)CCID設(shè)備,因此僅憑步驟204獲得的設(shè)備連接信息中的廠家標(biāo)識符信息VID和設(shè)備標(biāo)識 符信息PID并不能正確定位到步驟201中所說的CCID設(shè)備所連接的端口,所以本實(shí)施例中 還需要利用DriverKeyName ;在本實(shí)施例中,獲取DriverKeyName的方法具體為上位機(jī)向該普通USB設(shè)備發(fā) 送 I0CTL_USB_GET N0DE_C0NNECT10N_DRIVERKEY_NAME 請求,接收上述普通 USB 設(shè)備返回 的相關(guān)信息,其中返回的信息包括參數(shù)DriverKeyName,并且返回的信息的結(jié)構(gòu)具體定義為 USB_N0DE_C0NNECTI0N_DRIVERKEY_NAME);具體地,本實(shí)施例中獲取得到的DriverKeyName 為{50dd5230-ba8a-lldl_bf5d-0000f805f530;}\0005。步驟212 根據(jù)步驟204獲得的設(shè)備連接信息中的VID和PID,在上述普通USB設(shè) 備的注冊表路徑下查找Driver鍵值的數(shù)據(jù)與driverKeyName匹配的子項(xiàng);在本實(shí)施例中,步驟204獲得的設(shè)備連接信息中的VID和PID分別為0x096e和 0x070f ;查找Driver鍵值的數(shù)據(jù)與driverKeyName匹配的子項(xiàng)的方法為在HKEY_ L0CAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\Vid_096e&Pid_070f 路徑下面查找 Driver 鍵值的數(shù)據(jù)為{50dd5230-ba8a-lldl-bf5d_0000f805f530} \0005 的子項(xiàng),具體地, 在本實(shí)施例中找到的子項(xiàng)為6&c 195ce&0&2。
步驟213 判斷步驟201讀取得到的CCID路徑中是否包含步驟212查找得到的子 項(xiàng)的名稱,若否,則返回到步驟206,若是,則表示步驟201中所說的CCID設(shè)備即連接在該當(dāng) 前端口上,執(zhí)行步驟214;在本實(shí)施例中,具體為判斷CCID 路徑 W ? \usb#vid 096e&pid 070f#6&cl95ce& 0&2#ia5dcbf 10-6530-1 Id2-901f-00c04fb951edi 中是否包含子項(xiàng)的名稱 6&c 195ce&0&2, 由此可知,CCID路徑中包含子項(xiàng)的名稱,因此表示步驟201中所說的CCID設(shè)備即連接在該 當(dāng)前端口上,執(zhí)行步驟214。 步驟214 上位機(jī)將步驟201中所說的CCID設(shè)備路徑與當(dāng)前端口進(jìn)行關(guān)聯(lián),定位 該CCID設(shè)備所連接的USB端口。在本實(shí)施例中,具體以上位機(jī)只包含一個(gè)主控制器為例進(jìn)行說明,因此本實(shí)施例 中當(dāng)步驟207判斷當(dāng)前USB HUB不存在上一級USB HUB時(shí),則直接結(jié)束操作,并提示無法對 步驟301中的CCID設(shè)備進(jìn)行定位,不需要再去查詢下一個(gè)主控制器;或者,本實(shí)施例中還可以和實(shí)施例1 一樣,上位機(jī)包含多個(gè)主控制器,則上位機(jī)需 要對這多個(gè)主控制器進(jìn)行查詢,查詢方法與實(shí)施例1中所描述的查詢方法相同,具體為當(dāng) 本實(shí)施例步驟207判斷當(dāng)前USB HUB不存在上一級USBHUB時(shí),則上位機(jī)繼續(xù)判斷是否已查 詢完所有的主控制器,若是,則結(jié)束操作,并提示無法對步驟201中的CCID設(shè)備進(jìn)行定位, 若否,則返回到步驟202繼續(xù)對下一個(gè)主控制器進(jìn)行查詢,直到所有的主控制器都查詢完 畢;查詢的方法還可以為上位機(jī)先查詢一個(gè)主控制器,得到該主控制器上連接的根 USB HUB的名稱,然后不接著繼續(xù)查詢該根USB HUB,而是開始查詢下一個(gè)主控制器,直到所 有的主控制器都查詢完畢,再開始查詢主控制器上所連接的各個(gè)根USB HUB。本實(shí)施例提供了一種定位CCID設(shè)備所連接的USB端口的方法,通過本實(shí)施例提供 的方法就可以定位CCID設(shè)備所連接的USB端口。進(jìn)一步地,本實(shí)施例提供的是一種定位CCID設(shè)備所連接的USB端口的方法,并且 本實(shí)施例只以一種方法來進(jìn)行說明,而在實(shí)際應(yīng)用過程中存在多種定位方法,具體在本發(fā) 明中,實(shí)施例1提供的另一種定位HID設(shè)備所連接的USB端口的方法也適用于本實(shí)施例所 說的定位CCID設(shè)備所連接的USB端口,且實(shí)現(xiàn)步驟與其相似,因此在此不再重復(fù)。實(shí)施例3本發(fā)明實(shí)施例提供了一種定位設(shè)備所連接的USB端口的方法,具體地,在本實(shí)施 例中以SCSI設(shè)備為例進(jìn)行說明,SCSI設(shè)備通過USB Hra連接到上位機(jī)上,其中連接在上位 機(jī)與SCSI設(shè)備之間的USB HUB可以是一個(gè)或多個(gè)。參見圖3,一種定位SCSI設(shè)備所連接的USB端口的方法,具體實(shí)現(xiàn)步驟如下步驟301 上位機(jī)讀取連接在自身上的SCSI設(shè)備的SCSI路徑;其中,與上位機(jī)相連的SCSI設(shè)備可以是一個(gè)或多個(gè),當(dāng)有多個(gè)SCSI設(shè)備時(shí),則上 位機(jī)讀取所有SCSI設(shè)備的SCSI路徑,具體地,在本實(shí)施例中以一個(gè)SCSI設(shè)備為例進(jìn)行說 明;進(jìn)一步地,讀取SCSI設(shè)備的SCSI路徑可以從WM_DEVICECHANGE消息傳入的參數(shù) 中讀取,也可以通過調(diào)用SetupDiGetDeviceInterfaceDetail來枚舉已連接的SCSI設(shè)備, 獲取其SCSI路徑;
具體地,在本實(shí)施例中,讀取得到的SCSI路徑為W ? \usbstor#cdrom&ven usb&prod token 2000auto&rev 1. 00#7&b4952b9&0# i53f56308-b6bf-lldQ-94f2-00a0c91 efb8bi步驟302 上位機(jī)對主控制器進(jìn)行查詢,獲取主控制器上連接的根USB HUB的名 稱; 在本實(shí)施例中,上位機(jī)具體通過對主控制器發(fā)送I0CTL_USB_GET_R00T_HUB_NAME 請求,獲取連接在主控制器上的根USBHUB 的名稱。步驟303 上位機(jī)打開當(dāng)前USB HU B,并對該當(dāng)前USB HUB進(jìn)行查詢,獲得該當(dāng)前 USB HUB的端口數(shù)目;在本實(shí)施例中,當(dāng)是第一次對該主控制器上連接的設(shè)備進(jìn)行查詢時(shí),則主控制器 上連接的根USB HUB即是當(dāng)前USB HUB ;并且,對當(dāng)前USB HUB進(jìn)行查詢的方法具體為上位機(jī)向當(dāng)前USB HUB發(fā)送I0CTL_USB_GET_N0DE_INF0RMATI0N請求,獲得該當(dāng)前 USB HUB的端口數(shù)目。步驟304 上位機(jī)對當(dāng)前USB HUB的當(dāng)前端口進(jìn)行查詢,獲取當(dāng)前端口上的設(shè)備連 接信息;在本實(shí)施例中,當(dāng)是第一次對此當(dāng)前USB HUB進(jìn)行查詢時(shí),則此當(dāng)前USBHUB的第 一端口即為當(dāng)前端口;其中,對當(dāng)前USB HUB的當(dāng)前端口進(jìn)行查詢的方法為上位機(jī)向當(dāng)前USB HUB 的當(dāng)前端 口發(fā)送 10CTL_USB_GET_N0DE_C0NNECT 10N_ INFORMATION請求,獲取該當(dāng)前端口上的設(shè)備連接信息,其中設(shè)備連接信息中具體包括連接 狀態(tài)標(biāo)志位、HUB標(biāo)志位、廠家標(biāo)識符信息和設(shè)備標(biāo)識符信息等信息;具體地,本實(shí)施例中獲得的某個(gè)端口的設(shè)備連接信息為USB_N0DE_C0NNECTI0N_INFORMATION connectionlnfo ;connectionlnfo. ConnectionIndex = 0x00000004 ;connectionlnfo. DeviceDescriptor. bLength = 0x12 ;connectionlnfo. DeviceDescriptor. bDescriptorType = 0x01 ;connectionlnfo. DeviceDescriptor. bcdUSB = 0x0110connectionlnfo. DeviceDescriptor. bDeviceClass = 0x00connectionlnfo. DeviceDescriptor. bDeviceSubClass = 0x00connectionlnfo. DeviceDescriptor. bDeviceProtocol = 0x00connectionlnfo. DeviceDescriptor. bMaxPacketSizeO = 0x08connectionlnfo. DeviceDescriptor. idVendor = 0x096econnectionlnfo. DeviceDescriptor. idProduct = 0x0305connectionlnfo. DeviceDescriptor. bcdDevice = 0x2007connectionlnfo. DeviceDescriptor. iManufacturer = OxOlconnectionlnfo. DeviceDescriptor. iProduct = 0x02connectionlnfo. DeviceDescriptor. iSerialNumber = OxOO
connectionlnfo. DeviceDescriptor. bNumConfigurations = OxOlconnectionlnfo. CurrentConfigurationValue = OxOlconnectionlnfo. LowSpeed = OxOOconnectionlnfo. DeviceIsHub = OxOOconnectionlnfo. DeviceAddress = 0x0002
connectionlnfo. NumberOfOpenPipes = 0x00000002connectionlnfo. ConnectionStatus = 0x00000001connectionlnfo. PipeList = 0x001704b3步驟305 上位機(jī)根據(jù)設(shè)備連接信息對當(dāng)前端口進(jìn)行判斷,若判斷得到當(dāng)前端口 上沒有連接設(shè)備,則執(zhí)行步驟306,若判斷得到當(dāng)前端口上連接的為USBHUB,執(zhí)行步驟310, 若判斷得到當(dāng)前端口上連接的是普通USB設(shè)備,則執(zhí)行步驟311 ;在本實(shí)施例中,根據(jù)設(shè)備連接信息對當(dāng)前端口進(jìn)行判斷的方法具體為對設(shè)備連接信息中的連接狀態(tài)標(biāo)志位connectionlnfo. ConnectionStatus進(jìn) 行判斷,當(dāng)連接狀態(tài)標(biāo)志位connectionlnfo. ConnectionStatus為0x00000001時(shí),則表 示當(dāng)前端口上連接了設(shè)備,當(dāng)連接狀態(tài)標(biāo)志位connectionlnfo. ConnectionStatus為 0x00000000時(shí),則表示當(dāng)前端口上沒有連接設(shè)備;進(jìn)一步地,當(dāng)連接狀態(tài)標(biāo)志位 connectionlnfo. ConnectionStatus 為 0x00000001 時(shí),還需要進(jìn)一步地判斷設(shè)備連接信息中的HUB標(biāo)志位connectionlnfo. DeviceIsHub是為 0x00還是為0x01,若connectionlnfo. DeviceIsHub為0x01,則表示該當(dāng)前端口上連接的是 USB HUB,若connectionlnfo. DeviceIsHub為0x00,則表示該當(dāng)前端口上連接的是普通USB設(shè)備。步驟306 上位機(jī)判斷是否已查詢完當(dāng)前USB HUB的所有端口,若否,則執(zhí)行步驟 307,若是,則執(zhí)行步驟308;在本實(shí)施例中,上位機(jī)具體根據(jù)步驟303中所獲得的當(dāng)前USB HUB的端口數(shù)目來 判斷是否已查詢完當(dāng)前USB HUB的所有端口。步驟307 將當(dāng)前USB HUB的當(dāng)前端口的下一個(gè)端口作為當(dāng)前端口,并返回到步驟 304 ;步驟308 判斷是否存在已編號且未查詢過的USB HUB,若否,則結(jié)束操作,并提示 無法對步驟301中的SCSI設(shè)備進(jìn)行定位,若是,則執(zhí)行步驟309 ;步驟309 將編號最前面的USB HUB作為當(dāng)前USB HUB,并返回到步驟303 ;步驟310 上位機(jī)判斷是否存在已經(jīng)編號的USB HUB,若否,則將此連接的USB HUB 編號為第一 USB HUB,然后返回到步驟306,若是,則接著已存在的編號繼續(xù)對此連接的USB HUB進(jìn)行編號,然后返回到步驟306 ;步驟311 上位機(jī)獲取該普通USB設(shè)備在驅(qū)動程序下面的路徑DriverKeyName ;具體地,由于在實(shí)際應(yīng)用過程中,上位機(jī)上可能連接了多個(gè)相同類型的設(shè)備,如 多個(gè)SCSI設(shè)備,因此僅憑步驟304獲得的設(shè)備連接信息中的廠家標(biāo)識符信息VID和設(shè)備 標(biāo)識符信息PID并不能正確定位到該SCSI設(shè)備所在的端口,所以本實(shí)施例中還需要利用 DriverKeyName ;在本實(shí)施例中,獲取DriverKeyName的方法具體為上位機(jī)向該普通USB設(shè)備發(fā)送IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME 請求,接收該普通 USB 設(shè)備返回的相關(guān) 信息,其中返回的信息包括參數(shù)DriverKeyName,并且返回的信息的結(jié)構(gòu)具體定義為USB_ NODE_CONNECTION_DRIVERKEY_NAME);具體地,本實(shí)施例中獲取得到的DriverKeyName 為{36fc9e60-c465_llcf-8056-444553540000}\0120。步驟312 根據(jù)步驟304獲得的設(shè)備連接信息中的VID和PID,在上述普通USB設(shè) 備的注冊表路徑下查找Driver鍵值的數(shù)據(jù)與driverKeyName匹配的子項(xiàng);在本實(shí)施例中,步驟304獲得的設(shè)備連接信息中的VID和PID分別為0x096e和 0x0305 ;
查找Driver鍵值的數(shù)據(jù)與driverKeyName匹配的子項(xiàng)的方法為在HKEY_L0CAL MACHINE\SYSTEM\CurrentControlSet\Enum\USB\Vid_096e&Pid_0305 下面查找 Driver 鍵 值的數(shù)據(jù)為{36fc9e60-c465-llcf-8056-444553540000}\0120的子項(xiàng),具體查找到的子項(xiàng) 為 6&cl95ce&0&4。步驟313 讀取查找到的子項(xiàng)下的ParentIdPrefix鍵值的數(shù)據(jù);在本實(shí)施例中,讀取得到的ParentIdPrefix鍵值的數(shù)據(jù)為7&b4952b9&0步驟314 判斷步驟301讀取得到的SCSI路徑中是否包含步驟313讀取得到 ParentIdPref ix鍵值的數(shù)據(jù),若否,則返回到步驟306,若是,則表示步驟301中所說的SCSI 設(shè)備即連接在該當(dāng)前端口上,執(zhí)行步驟315 ;在本實(shí)施例中,具體為判斷SCSI 路徑\\ ? \usb#vid 096e&pid 070f#6&cl95ce&0 &2#{a5dcbf 10-6530-1 Id2-901f-00c04fb951ed}中是否包含子項(xiàng)的名稱 6&cl95ce&0&2,由 此可知,SCSI路徑中包含子項(xiàng)的名稱,因此表示步驟301中所說的SCSI設(shè)備即連接在該當(dāng) 前端口上,執(zhí)行步驟315。步驟315 上位機(jī)將步驟301中所說的SCSI設(shè)備路徑與上述當(dāng)前端口進(jìn)行關(guān)聯(lián), 定位該SCSI設(shè)備所連接的USB端口。在本實(shí)施例中,具體以上位機(jī)只包含一個(gè)主控制器為例進(jìn)行說明,因此本實(shí)施例 中當(dāng)步驟308判斷得到不存在已編號且未查詢過的USB HUB時(shí),則直接結(jié)束操作,并提示無 法對步驟401中的SCSI設(shè)備進(jìn)行定位,不需要再去查詢下一個(gè)主控制器;或者,本實(shí)施例中還可以和實(shí)施例1 一樣,上位機(jī)包含多個(gè)主控制器,則上位機(jī)需 要對這多個(gè)主控制器進(jìn)行查詢,查詢方法與實(shí)施例1中所描述的查詢方法相同,具體為當(dāng) 本實(shí)施例步驟308判斷得到不存在已編號且未查詢過的USB HUB時(shí),則上位機(jī)繼續(xù)判斷是 否已查詢完所有的主控制器,若是,則結(jié)束操作,并提示無法對步驟301中的SCSI設(shè)備進(jìn)行 定位,若否,則返回到步驟302繼續(xù)對下一個(gè)主控制器進(jìn)行查詢,直到所有的主控制器都查 詢完畢;查詢的方法還可以為上位機(jī)先查詢一個(gè)主控制器,得到該主控制器上連接的根 USB HUB的名稱,然后不接著繼續(xù)查詢該根USB HUB,而是開始查詢下一個(gè)主控制器,直到所 有的主控制器都查詢完畢,再開始查詢主控制器上所連接的各個(gè)根USB HUB。本實(shí)施例提供了一種定位SCSI設(shè)備所連接的USB端口的方法,通過本實(shí)施例提供 的方法就可以定位SCSI設(shè)備所連接的USB端口。進(jìn)一步地,本實(shí)施例提供的是一種定位SCSI設(shè)備所連接的USB端口的方法,并且本實(shí)施例只以一種方法來進(jìn)行說明,而在實(shí)際應(yīng)用過程中存在多種定位方法,具體在本發(fā) 明中,實(shí)施例1提供的另一種定位HID設(shè)備所連接的USB端口的方法也適用于本實(shí)施例所 說的定位SCSI設(shè)備所連接的USB端口,且實(shí)現(xiàn)步驟與其相似,因此在此不再重復(fù)。
以上所述,僅為本 發(fā)明的具體實(shí)施方式
,但本發(fā)明的保護(hù)范圍并不局限于此,任何 熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵 蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)所述以權(quán)利要求的保護(hù)范圍為準(zhǔn)。
權(quán)利要求
一種定位設(shè)備所連接的USB端口的方法,其特征在于,所述方法包括上位機(jī)讀取連接在其自身上的第一設(shè)備的路徑;所述上位機(jī)對當(dāng)前USB HUB的當(dāng)前端口進(jìn)行查詢,獲取所述當(dāng)前端口上的設(shè)備連接信息,并根據(jù)所述設(shè)備連接信息對所述當(dāng)前端口進(jìn)行判斷;當(dāng)判斷得到所述當(dāng)前端口上連接的是普通USB設(shè)備時(shí),所述上位機(jī)獲取所述普通USB設(shè)備在驅(qū)動程序下的路徑;所述上位機(jī)根據(jù)所述設(shè)備連接信息中的廠家標(biāo)識符信息和設(shè)備標(biāo)識符信息在所述普通USB設(shè)備的注冊表路徑下查找第一信息;所述上位機(jī)判斷所述第一設(shè)備的路徑中是否包含所述第一信息;當(dāng)判斷得到所述第一設(shè)備的路徑中包含所述第一信息時(shí),則表示所述第一設(shè)備和所述普通USB設(shè)備為同一設(shè)備,所述上位機(jī)將所述第一設(shè)備的路徑與所述當(dāng)前端口進(jìn)行關(guān)聯(lián),定位所述第一設(shè)備所連接的USB端口。
2.根據(jù)權(quán)利要求1所述的定位設(shè)備所連接的USB端口的方法,其特征在于,所述上位機(jī) 讀取連接在其自身上的第一設(shè)備的路徑的方法具體為所述上位機(jī)從WM_DEVICECHANGE消 息傳入的參數(shù)中讀取,或,所述上位機(jī)通過調(diào)用SetupDiGetDeviceInterfaceDetail來枚 舉已連接的第一設(shè)備,獲取所述第一設(shè)備的路徑。
3.根據(jù)權(quán)利要求1所述的定位設(shè)備所連接的USB端口的方法,其特征在于,所述上位機(jī) 對當(dāng)前USB HUB的當(dāng)前端口進(jìn)行查詢之前,所述方法還包括所述上位機(jī)對主控制器進(jìn)行查詢,獲取主控制器上連接的根USB HUB的名稱; 將所述根USB HUB作為當(dāng)前USB HUB,打開所述當(dāng)前USB HUB,并對所述當(dāng)前USB HUB 進(jìn)行查詢,獲取所述當(dāng)前USB HUB的端口數(shù)目。
4.根據(jù)權(quán)利要求1所述的定位設(shè)備所連接的USB端口的方法,其特征在于,所述根據(jù)設(shè) 備連接信息對所述當(dāng)前端口進(jìn)行判斷的操作具體為對所述設(shè)備連接信息中的連接狀態(tài)標(biāo)志位進(jìn)行判斷;當(dāng)所述連接狀態(tài)標(biāo)志位為無連接狀態(tài)時(shí),則表示所述當(dāng)前端口上沒有連接任何設(shè)備; 當(dāng)所述連接狀態(tài)標(biāo)志位為有連接狀態(tài)時(shí),則表示所述當(dāng)前端口上連接了設(shè)備,然后繼 續(xù)根據(jù)所述設(shè)備連接信息中的HUB標(biāo)志位進(jìn)行判斷;當(dāng)所述HUB標(biāo)志位為是時(shí),則表示所述當(dāng)前端口上連接的設(shè)備為USBHUB ; 當(dāng)所述HUB標(biāo)志位為否時(shí),則表示所述當(dāng)前端口上連接的設(shè)備為普通USB設(shè)備。
5.根據(jù)權(quán)利要求4所述的定位設(shè)備所連接的USB端口的方法,其特征在于,當(dāng)判斷得到 所述當(dāng)前端口上沒有連接任何設(shè)備時(shí),所述方法還包括所述上位機(jī)判斷是否已查詢完所述當(dāng)前USB HUB的所有端口 ; 若否,則將所述當(dāng)前USB HUB的當(dāng)前端口的下一個(gè)端口作為當(dāng)前端口,并對所述當(dāng)前端 口進(jìn)行查詢,獲取所述當(dāng)前端口上的設(shè)備連接信息,根據(jù)所述設(shè)備連接信息進(jìn)行判斷; 若是,則判斷所述當(dāng)前USB HUB是否存在上一級USB HUB ;若是,則將所述當(dāng)前USB HUB的上一級USB HUB作為當(dāng)前USBHUB,然后所述上位機(jī)繼續(xù) 判斷是否已查詢完所述當(dāng)前USB HUB的所有端口 ;若否,則結(jié)束操作,并提示無法對所述第一設(shè)備進(jìn)行定位。
6.根據(jù)權(quán)利要求4所述的定位設(shè)備所連接的USB端口的方法,其特征在于,當(dāng)判斷得到所述當(dāng)前端口上沒有連接任何設(shè)備時(shí),所述方法還包括所述上位機(jī)判斷是否已查詢完所述當(dāng)前USB HUB的所有端口 ;若否,則將所述當(dāng)前USB HUB的當(dāng)前端口的下一個(gè)端口作為當(dāng)前端口,并對所述當(dāng)前端 口進(jìn)行查詢,獲取所述當(dāng)前端口上的設(shè)備連接信息,根據(jù)所述設(shè)備連接信息進(jìn)行判斷;若是,則判斷是否存在已編號且未查詢過的USB HUB;若是,則將編號最靠前的USB HUB作為當(dāng)前USB HUB,然后所述上位機(jī)繼續(xù)對所述當(dāng)前 USB HUB進(jìn)行查詢;若否,則結(jié)束操作,并提示無法對所述第一設(shè)備進(jìn)行定位。
7.根據(jù)權(quán)利要求5或6所述的定位設(shè)備所連接的USB端口的方法,其特征在于,所述結(jié) 束操作,并提示無法對所述第一設(shè)備進(jìn)行定位之前,所述方法還包括所述上位機(jī)判斷是否已查詢完所有的主控制器;若否,則對下一個(gè)主控制器進(jìn)行查詢,獲取主控制器上連接的根USB HUB的名稱,再將 所述根USB HUB作為當(dāng)前USB HUB,對所述當(dāng)前USB HUB進(jìn)行查詢,獲取所述當(dāng)前USB HUB 的端口數(shù)目,再對所述當(dāng)前USB HUB的當(dāng)前端口進(jìn)行查詢,獲取當(dāng)前端口上的設(shè)備連接信 息;若是,則結(jié)束操作,并提示無法對所述第一設(shè)備進(jìn)行定位。
8.根據(jù)權(quán)利要求4所述的定位設(shè)備所連接的USB端口的方法,其特征在于,當(dāng)判斷得到 所述當(dāng)前端口上連接的設(shè)備為USB HUB時(shí),所述方法還包括將所述連接的USB HUB作為當(dāng)前USB HUB ;對所述當(dāng)前USB HUB進(jìn)行查詢,獲取所述當(dāng)前USB HUB的端口數(shù)目,再對所述當(dāng)前USB HUB的當(dāng)前端口進(jìn)行查詢,獲取所述當(dāng)前端口上的設(shè)備連接信息,根據(jù)所述設(shè)備連接信息進(jìn) 行判斷。
9.根據(jù)權(quán)利要求4所述的定位設(shè)備所連接的USB端口的方法,其特征在于,當(dāng)判斷得到 所述當(dāng)前端口上連接的設(shè)備為USB HUB時(shí),所述方法還包括所述上位機(jī)判斷是否存在已編號的USB HUB,若否,則將所述連接的USBHUB編號為第 一 USB HUB,若是,則接著已存在的編號繼續(xù)對所述連接的USBHUB進(jìn)行編號;所述上位機(jī)判斷是否已查詢完所述當(dāng)前USB HUB的所有端口。
10.根據(jù)權(quán)利要求1所述的定位設(shè)備所連接的USB端口的方法,其特征在于,所述第一 信息為子項(xiàng)的名稱,或所述第一信息為ParentIdPrefix鍵值的數(shù)據(jù)。
11.根據(jù)權(quán)利要求10所述的定位設(shè)備所連接的USB端口的方法,其特征在于,當(dāng)所述第 一信息為子項(xiàng)的名稱時(shí),所述查找第一信息的方法具體為所述上位機(jī)根據(jù)所述設(shè)備連接信息中的廠家標(biāo)識符信息和設(shè)備標(biāo)識符信息,在所述普 通USB設(shè)備的注冊表路徑的廠家標(biāo)識符信息和設(shè)備標(biāo)識符信息的目錄下查找Driver鍵值 的數(shù)據(jù)與驅(qū)動程序下的路徑匹配的子項(xiàng),所述查找到的子項(xiàng)的名稱即為所述第一信息。
12.根據(jù)權(quán)利要求10所述的定位設(shè)備所連接的USB端口的方法,其特征在于,當(dāng)所述第 一信息為ParentIdPrefix鍵值的數(shù)據(jù)時(shí),所述查找第一信息的方法具體為所述上位機(jī)根據(jù)所述設(shè)備連接信息中的廠家標(biāo)識符信息和設(shè)備標(biāo)識符信息,在所述普 通USB設(shè)備的注冊表路徑的廠家標(biāo)識符信息和設(shè)備標(biāo)識符信息的目錄下查找Driver鍵值 的數(shù)據(jù)與驅(qū)動程序下的路徑匹配的子項(xiàng);讀取所述子項(xiàng)下的ParentIdPrefix鍵值的數(shù)據(jù),所述讀取得到的數(shù)據(jù)即為所述第一信息ο
13.根據(jù)權(quán)利要求1所述的定位設(shè)備所連接的USB端口的方法,其特征在于,當(dāng)判斷得 到所述第一設(shè)備的路徑中不包含所述第一信息時(shí),所述方法還包括所述上位機(jī)判斷是否已查詢完所述當(dāng)前USB HUB的所有端口 ; 若否,則將所述當(dāng)前USB HUB的當(dāng)前端口的下一個(gè)端口作為當(dāng)前端口,并對所述當(dāng)前端 口進(jìn)行查詢,獲取所述當(dāng)前端口上的設(shè)備連接信息,根據(jù)所述設(shè)備連接信息進(jìn)行判斷; 若是,則判斷所述當(dāng)前USB HUB是否存在上一級USB HUB ;若是,則將所述當(dāng)前USB HUB的上一級USB HUB作為當(dāng)前USBHUB,然后所述上位機(jī)繼續(xù) 判斷是否已查詢完所述當(dāng)前USB HUB的所有端口 ;若否,則結(jié)束操作,并提示無法對所述第一設(shè)備進(jìn)行定位。
14.根據(jù)權(quán)利要求1所述的定位設(shè)備所連接的USB端口的方法,其特征在于,當(dāng)判斷得 到所述第一設(shè)備的路徑中不包含所述第一信息時(shí),所述方法還包括所述上位機(jī)判斷是否已查詢完所述當(dāng)前USB HUB的所有端口 ; 若否,則將所述當(dāng)前USB HUB的當(dāng)前端口的下一個(gè)端口作為當(dāng)前端口,并對所述當(dāng)前端 口進(jìn)行查詢,獲取所述當(dāng)前端口上的設(shè)備連接信息,根據(jù)所述設(shè)備連接信息進(jìn)行判斷; 若是,則判斷是否存在已編號且未查詢過的USB HUB;若是,則將編號最靠前的USB Hra作為當(dāng)前USB HUB,然后所述上位機(jī)繼續(xù)對所述當(dāng)前 USB HUB進(jìn)行查詢;若否,則結(jié)束操作,并提示無法對所述第一設(shè)備進(jìn)行定位。
15.根據(jù)權(quán)利要求13或14所述的定位設(shè)備所連接的USB端口的方法,其特征在于,所 述結(jié)束操作,并提示無法對所述第一設(shè)備進(jìn)行定位之前,所述方法還包括所述上位機(jī)判斷是否已查詢完所有的主控制器;若否,則對下一個(gè)主控制器進(jìn)行查詢,獲取主控制器上連接的根USB HUB的名稱,再將 所述根USB HUB作為當(dāng)前USB HUB,對所述當(dāng)前USB HUB進(jìn)行查詢,獲取所述當(dāng)前USB HUB 的端口數(shù)目,再對所述當(dāng)前USB HUB的當(dāng)前端口進(jìn)行查詢,獲取當(dāng)前端口上的設(shè)備連接信 息;若是,則結(jié)束操作,并提示無法對所述第一設(shè)備進(jìn)行定位。
全文摘要
本發(fā)明公開了一種定位設(shè)備所連接的USB端口的方法,涉及計(jì)算機(jī)通信領(lǐng)域,解決了上位機(jī)無法定位普通USB設(shè)備所連接的USB端口的問題。本發(fā)明方法包括上位機(jī)讀取連接在自身上的第一設(shè)備的路徑,并獲取當(dāng)前USB HUB的當(dāng)前端口上的設(shè)備連接信息,根據(jù)設(shè)備連接信息對當(dāng)前端口進(jìn)行判斷,當(dāng)?shù)玫疆?dāng)前端口上連接的是普通USB設(shè)備時(shí),獲取普通USB設(shè)備在驅(qū)動程序下的路徑,根據(jù)設(shè)備連接信息中的廠家標(biāo)識符信息和設(shè)備標(biāo)識符信息在普通USB設(shè)備的注冊表路徑下查找第一信息,當(dāng)?shù)谝辉O(shè)備的路徑中包含第一信息時(shí),則表示第一設(shè)備和普通USB設(shè)備為同一設(shè)備,上位機(jī)將第一設(shè)備的路徑與當(dāng)前端口進(jìn)行關(guān)聯(lián),定位第一設(shè)備所連接的USB端口。
文檔編號G06F13/42GK101963950SQ20101050050
公開日2011年2月2日 申請日期2010年9月30日 優(yōu)先權(quán)日2010年9月30日
發(fā)明者于華章, 陸舟 申請人:北京飛天誠信科技有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
图片| 都匀市| 彰化县| 唐海县| 古田县| 广南县| 三穗县| 三明市| 汾阳市| 邵东县| 克东县| 阳新县| 承德县| 湘乡市| 丽江市| 高碑店市| 江油市| 大港区| 绥滨县| 宜兰县| 北宁市| 都昌县| 阿拉善右旗| 商河县| 老河口市| 菏泽市| 宣武区| 望谟县| 木兰县| 文昌市| 宜丰县| 电白县| 舒城县| 改则县| 抚顺县| 娱乐| 祥云县| 内乡县| 康平县| 三门峡市| 桐庐县|