專利名稱:Usb映射方法
技術(shù)領(lǐng)域:
本發(fā)明涉及連接在終端的真實(shí)的USB設(shè)備被映射為服務(wù)器端的一個(gè)虛擬的USB設(shè)備的方法。
背景技術(shù):
網(wǎng)絡(luò)計(jì)算機(jī)(終端)是客戶機(jī)/服務(wù)器體系中的客戶機(jī)設(shè)備,是無(wú)硬盤(pán)、光驅(qū)、軟驅(qū)等設(shè)備的簡(jiǎn)化計(jì)算機(jī),可以利用服務(wù)器軟、硬件資源進(jìn)行計(jì)算等。多臺(tái)客戶端可以同時(shí)登錄到服務(wù)器上,它們之間工作是互相隔離的。網(wǎng)絡(luò)計(jì)算機(jī)具有易管理,安全性高等特點(diǎn),在企業(yè),政府機(jī)構(gòu)等應(yīng)用較廣泛。
目前應(yīng)用較多的網(wǎng)絡(luò)計(jì)算機(jī)主要是通過(guò)WBT登錄Windows服務(wù)器來(lái)使用。在WBT下,用戶看到和使用的都是服務(wù)器的資源,在特定的用戶會(huì)話中,利用服務(wù)器資源完成應(yīng)用,并將最終結(jié)果顯示在客戶機(jī)端。
Citrix的ICA(Independent Computing Architecture,獨(dú)立計(jì)算結(jié)構(gòu))和Microsoft的RDP(Remote Desktop Protocol,遠(yuǎn)程桌面協(xié)議)是終端得以廣泛應(yīng)用的重要因素。這兩種技術(shù)都提供了部分的設(shè)備重定向服務(wù)。就是說(shuō),把連接在終端的設(shè)備映射到服務(wù)器上,使用服務(wù)器的驅(qū)動(dòng)程序驅(qū)動(dòng)設(shè)備。目前已經(jīng)實(shí)現(xiàn)的映射有串口,并口,聲音,打印機(jī)設(shè)備,但是沒(méi)有為USB設(shè)備提供通用的映射服務(wù)。
隨著USB技術(shù)的發(fā)展,終端也大量的使用了USB設(shè)備。然而,在終端上運(yùn)行的操作系統(tǒng)大多為嵌入式操作系統(tǒng),如Linux,WinCE等,這些嵌入式操作系統(tǒng)對(duì)USB的支持不是很好。大量的USB設(shè)備因?yàn)槿狈\(yùn)行在這些操作系統(tǒng)下的驅(qū)動(dòng)程序和應(yīng)用程序,而不能在終端上使用。
目前要實(shí)現(xiàn)終端上USB設(shè)備映射的功能,只有某些特定種類的設(shè)備可以實(shí)現(xiàn)。如某些U盤(pán)可以通過(guò)RDP映射,某些掃描儀開(kāi)發(fā)了終端驅(qū)動(dòng)程序后也可以實(shí)現(xiàn)映射,打印機(jī)可以通過(guò)打印機(jī)映射,但是缺乏一個(gè)通用的映射方法。
這種現(xiàn)狀就產(chǎn)生如下需求在服務(wù)器端使用Windows系統(tǒng),在終端使用嵌入式操作系統(tǒng)如WinCE,Linux,開(kāi)發(fā)一套USB映射系統(tǒng),使用Windows的驅(qū)動(dòng)程序來(lái)驅(qū)動(dòng)位于終端的USB設(shè)備。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種USB映射方法,它只需在服務(wù)器端安裝USB設(shè)備的驅(qū)動(dòng)程序,即可使用,而無(wú)須在每個(gè)客戶端安裝驅(qū)動(dòng)程序,大大方便了開(kāi)發(fā)和使用。
本發(fā)明USB映射方法包括服務(wù)器端和客戶端,服務(wù)器和客戶端用網(wǎng)絡(luò)相連接,其特征在于連接在客戶端的真實(shí)的USB設(shè)備被映射為服務(wù)器端的一個(gè)虛擬的USB設(shè)備的方法包括如下步驟1)客戶端插上USB設(shè)備,USB映射服務(wù)程序客戶機(jī)端偵測(cè)到設(shè)備到來(lái),發(fā)出一個(gè)設(shè)備插入的命令,將命令封裝起來(lái)發(fā)送給服務(wù)器;2)服務(wù)器收到封裝的數(shù)據(jù)包,解析是一個(gè)插入設(shè)備的請(qǐng)求,向客戶端發(fā)出取設(shè)備信息的命令,該命令仍然被封裝起來(lái);3)客戶機(jī)將相關(guān)的設(shè)備信息封裝起來(lái),傳回到服務(wù)器端;4)USB映射服務(wù)程序服務(wù)器端得知客戶機(jī)的設(shè)備的相關(guān)信息,向虛擬總線發(fā)出請(qǐng)求,虛擬一個(gè)USB設(shè)備;5)虛擬總線虛擬出USB設(shè)備,通知PnP管理器,加載相應(yīng)的USB設(shè)備驅(qū)動(dòng)程序;6)USB設(shè)備驅(qū)動(dòng)程序發(fā)出URB請(qǐng)求包,對(duì)設(shè)備進(jìn)行初始化;
7)虛擬總線截獲到這些URB請(qǐng)求包,分析這些URB,然后重新封裝,通知服務(wù)程序有命令需要處理;8)USB映射服務(wù)程序服務(wù)器端取出含有URB的封裝好的數(shù)據(jù)包,發(fā)送到客戶機(jī)端;9)USB映射服務(wù)程序客戶機(jī)端收到含有URB的封裝好的數(shù)據(jù)包,解包分析,發(fā)現(xiàn)是URB命令,調(diào)用通用驅(qū)動(dòng)接口將命令傳給客戶驅(qū)動(dòng);10)客戶驅(qū)動(dòng)將命令轉(zhuǎn)換成可處理的Transfer,調(diào)用底層驅(qū)動(dòng)接口處理,底層驅(qū)動(dòng)和設(shè)備直接打交道,命令設(shè)備動(dòng)作,并從設(shè)備取得處理結(jié)果,傳給通用驅(qū)動(dòng);11)USB映射服務(wù)程序客戶機(jī)端收到通用驅(qū)動(dòng)返回的處理結(jié)果,將結(jié)果封裝起來(lái),發(fā)送到服務(wù)器端;12)USB映射服務(wù)程序服務(wù)器端收到含有URB結(jié)果的封裝好的數(shù)據(jù)包,通知虛擬總線有處理結(jié)果返回;13)虛擬總線解包,分析,將結(jié)果數(shù)據(jù)回填到URB,通知應(yīng)用程序命令完成;14)USB設(shè)備驅(qū)動(dòng)程序不停的發(fā)出URB命令,重復(fù)步驟6-13,直至驅(qū)動(dòng)初始化完成;15)用戶通過(guò)RDP登錄到Windows服務(wù)器,看見(jiàn)USB設(shè)備已經(jīng)映射成功,服務(wù)器上多出一個(gè)USB設(shè)備;16)用戶使用應(yīng)用軟件,使用設(shè)備;17)應(yīng)用程序發(fā)出請(qǐng)求,經(jīng)過(guò)USB設(shè)備驅(qū)動(dòng)轉(zhuǎn)換成URB命令包;18)重復(fù)步驟7-13,直至應(yīng)用處理完畢;19)客戶端拔出USB設(shè)備,USB映射服務(wù)程序客戶機(jī)端偵測(cè)到設(shè)備消失,發(fā)出一個(gè)設(shè)備拔出的命令,將命令封裝起來(lái)發(fā)送給服務(wù)器;20)服務(wù)器收到數(shù)據(jù)包,解析是一個(gè)拔出設(shè)備的請(qǐng)求,向客戶端發(fā)出取設(shè)備信息的命令,該命令仍然被封裝;21)客戶機(jī)將相關(guān)的設(shè)備信息封裝,傳回到服務(wù)器端;22)USB映射服務(wù)程序服務(wù)器端得知客戶機(jī)的設(shè)備的相關(guān)信息,向虛擬總線發(fā)出請(qǐng)求,拔出一個(gè)USB設(shè)備;23)虛擬總線通知PnP管理器,卸載相應(yīng)的USB設(shè)備驅(qū)動(dòng)程序,釋放相應(yīng)的資源。
本發(fā)明的技術(shù)方案不僅大大減輕了研發(fā)人員在終端上的USB設(shè)備驅(qū)動(dòng)的開(kāi)發(fā)工作;而且也極大地方便了客戶,客戶只需要在服務(wù)器端安裝設(shè)備供應(yīng)商提供的驅(qū)動(dòng)程序,就可以使用終端接入的USB設(shè)備,而無(wú)須在每臺(tái)終端上安裝USB驅(qū)動(dòng)程序的麻煩,方便了使用。
圖1是USB映射系統(tǒng)整體框架圖;圖2是USB映射系統(tǒng)軟件模塊構(gòu)成圖;圖3是主要數(shù)據(jù)結(jié)構(gòu)示意圖;圖4是USB映射服務(wù)程序發(fā)送線程與客戶機(jī)端處理發(fā)送URB數(shù)據(jù)流程圖;圖5是USB映射服務(wù)程序服務(wù)器端接收線程接收從設(shè)備返回的URB的處理流程圖;圖6是虛擬總線模塊圖;圖7是虛擬總線設(shè)備PNP狀態(tài)轉(zhuǎn)換圖;圖8是虛擬總線插入設(shè)備接口處理模塊圖;圖9是虛擬總線設(shè)備刪除接口處理模塊圖;圖10是虛擬總線URB處理流程圖;圖11是URB發(fā)送線程處理流程圖;圖12是URB處理結(jié)果回送給Windows設(shè)備驅(qū)動(dòng)流程圖。
具體實(shí)施例方式本發(fā)明USB映射方法包括服務(wù)器端和客戶端,服務(wù)器和客戶端用網(wǎng)絡(luò)相連接,其特征在于連接在客戶端的真實(shí)的USB設(shè)備被映射為服務(wù)器端的一個(gè)虛擬的USB設(shè)備的方法包括如下步驟1)客戶端插上USB設(shè)備,USB映射服務(wù)程序客戶機(jī)端偵測(cè)到設(shè)備到來(lái),發(fā)出一個(gè)設(shè)備插入的命令,將命令封裝起來(lái)發(fā)送給服務(wù)器;2)服務(wù)器收到封裝的數(shù)據(jù)包,解析是一個(gè)插入設(shè)備的請(qǐng)求,向客戶端發(fā)出取設(shè)備信息的命令,該命令仍然被封裝起來(lái);3)客戶機(jī)將相關(guān)的設(shè)備信息封裝起來(lái),傳回到服務(wù)器端;4)USB映射服務(wù)程序服務(wù)器端得知客戶機(jī)的設(shè)備的相關(guān)信息,向虛擬總線發(fā)出請(qǐng)求,虛擬一個(gè)USB設(shè)備;5)虛擬總線虛擬出USB設(shè)備,通知PnP管理器,加載相應(yīng)的USB設(shè)備驅(qū)動(dòng)程序;6)USB設(shè)備驅(qū)動(dòng)程序發(fā)出URB請(qǐng)求包,對(duì)設(shè)備進(jìn)行初始化;7)虛擬總線截獲到這些URB請(qǐng)求包,分析這些URB,然后重新封裝,通知服務(wù)程序有命令需要處理;8)USB映射服務(wù)程序服務(wù)器端取出含有URB的封裝好的數(shù)據(jù)包,發(fā)送到客戶機(jī)端;9)USB映射服務(wù)程序客戶機(jī)端收到含有URB的封裝好的數(shù)據(jù)包,解包分析,發(fā)現(xiàn)是URB命令,調(diào)用通用驅(qū)動(dòng)接口將命令傳給客戶驅(qū)動(dòng);10)客戶驅(qū)動(dòng)將命令轉(zhuǎn)換成可處理的Transfer,調(diào)用底層驅(qū)動(dòng)接口處理,底層驅(qū)動(dòng)和設(shè)備直接打交道,命令設(shè)備動(dòng)作,并從設(shè)備取得處理結(jié)果,傳給通用驅(qū)動(dòng);11)USB映射服務(wù)程序客戶機(jī)端收到通用驅(qū)動(dòng)返回的處理結(jié)果,將結(jié)果封裝起來(lái),發(fā)送到服務(wù)器端;12)USB映射服務(wù)程序服務(wù)器端收到含有URB結(jié)果的封裝好的數(shù)據(jù)包,通知虛擬總線有處理結(jié)果返回;13)虛擬總線解包,分析,將結(jié)果數(shù)據(jù)回填到URB,通知應(yīng)用程序命令完成;14)USB設(shè)備驅(qū)動(dòng)程序不停的發(fā)出URB命令,重復(fù)步驟6-13,直至驅(qū)動(dòng)初始化完成;15)用戶通過(guò)RDP登錄到Windows服務(wù)器,看見(jiàn)USB設(shè)備已經(jīng)映射成功,服務(wù)器上多出一個(gè)USB設(shè)備;16)用戶使用應(yīng)用軟件,使用設(shè)備;17)應(yīng)用程序發(fā)出請(qǐng)求,經(jīng)過(guò)USB設(shè)備驅(qū)動(dòng)轉(zhuǎn)換成URB命令包;18)重復(fù)步驟7-13,直至應(yīng)用處理完畢;19)客戶端拔出USB設(shè)備,USB映射服務(wù)程序客戶機(jī)端偵測(cè)到設(shè)備消失,發(fā)出一個(gè)設(shè)備拔出的命令,將命令封裝起來(lái)發(fā)送給服務(wù)器;20)服務(wù)器收到數(shù)據(jù)包,解析是一個(gè)拔出設(shè)備的請(qǐng)求,向客戶端發(fā)出取設(shè)備信息的命令,該命令仍然被封裝;21)客戶機(jī)將相關(guān)的設(shè)備信息封裝,傳回到服務(wù)器端;22)USB映射服務(wù)程序服務(wù)器端得知客戶機(jī)的設(shè)備的相關(guān)信息,向虛擬總線發(fā)出請(qǐng)求,拔出一個(gè)USB設(shè)備;23)虛擬總線通知PnP管理器,卸載相應(yīng)的USB設(shè)備驅(qū)動(dòng)程序,釋放相應(yīng)的資源。
上述的封裝包的處理包括服務(wù)器端發(fā)送步驟、服務(wù)器端接收步驟和客戶端步驟1)服務(wù)器端發(fā)送步驟(1)SOCKET建立流式套接字,返回套接字號(hào),(2)將套接字與遠(yuǎn)程主機(jī)連接,(3)判斷是否連接成功,(4)若不成功,則關(guān)閉套接字,若成功,則繼續(xù)下一步驟,(5)不斷地將IRP封裝起來(lái),發(fā)送到客戶端,
(6)收到刪除設(shè)備的消息就關(guān)閉套接字;2)服務(wù)器端接收步驟(1)收到客戶端的設(shè)備插入請(qǐng)求,終端認(rèn)證,(2)獲取客戶端信息,(3)創(chuàng)建URB發(fā)送線程,(4)虛擬USB設(shè)備,(5)解析接收的數(shù)據(jù)包,判斷是否URB,(6)若收到的是設(shè)備拔出請(qǐng)求,則退出,若有收到,則接收數(shù)據(jù)通知總線驅(qū)動(dòng),(7)轉(zhuǎn)到步驟(5);3)客戶端步驟(1)SOCKET建立流式套接字,返回套接字號(hào),(2)套接字與本地地址綁定,(3)檢測(cè)到設(shè)備插入,通知TCP服務(wù)器準(zhǔn)備連接,(4)等待服務(wù)器端連接,(5)建立連接,返回新套接字,(6)建立URB監(jiān)聽(tīng)線程和URB回送線程(7)監(jiān)聽(tīng)線程接收封裝包,判斷是否URB,從線程池申請(qǐng)一個(gè)線程用于處理URB,處理完的URB掛到隊(duì)列上;(8)回送線程從隊(duì)列上取出URB處理結(jié)果,送回服務(wù)器;(9)轉(zhuǎn)到步驟(7)。
各模塊功能說(shuō)明1、USB映射管理器服務(wù)器端提供服務(wù)器端用戶界面,配置管理。
2、USB映射服務(wù)程序服務(wù)器端為系統(tǒng)提供經(jīng)過(guò)加密的網(wǎng)絡(luò)通信通道,并負(fù)責(zé)與處于內(nèi)核模式的虛擬總線交互數(shù)據(jù)。處于服務(wù)器端。
3、升騰虛擬總線核心模塊。負(fù)責(zé)在服務(wù)器上虛擬出USB設(shè)備,發(fā)送命令時(shí)負(fù)責(zé)截獲USB設(shè)備驅(qū)動(dòng)程序的URB數(shù)據(jù)包,分析URB數(shù)據(jù)包,將其重新封裝到CentermPDU(升騰協(xié)議數(shù)據(jù)單元),并通知服務(wù)程序?qū)entermPDU發(fā)送到客戶端。
接受處理結(jié)果時(shí)負(fù)責(zé)從服務(wù)程序接收CentermPDU,分析CentermPDU,將設(shè)備處理后的結(jié)果回填到URB,通知應(yīng)用程序命令處理完畢。
4、USB映射管理器客戶機(jī)端提供服務(wù)器端用戶界面,配置管理。
5、USB映射服務(wù)程序客戶機(jī)端為系統(tǒng)提供經(jīng)過(guò)加密的網(wǎng)絡(luò)通信通道,并負(fù)責(zé)與服務(wù)器端交互數(shù)據(jù)。處于客戶機(jī)端,將CentermPDU分解為客戶端通用驅(qū)動(dòng)可以處理的Transfer,調(diào)用客戶端通用驅(qū)動(dòng)處理該請(qǐng)求。當(dāng)完成處理時(shí),將處理結(jié)果封裝成CentermPDU,傳回服務(wù)器6、升騰USB通用驅(qū)動(dòng)升騰終端上的USB通用驅(qū)動(dòng),從USB映射服務(wù)程序客戶機(jī)端接收URB請(qǐng)求并處理
URB是USB協(xié)議中定義的數(shù)據(jù)包,與傳統(tǒng)PC設(shè)備的驅(qū)動(dòng)程序相比,USB設(shè)備驅(qū)動(dòng)程序不直接與硬件對(duì)話。相反,它僅靠創(chuàng)建URB(USB Request Block,USB請(qǐng)求塊)并把URB提交到總線就可完成硬件操作??偩€驅(qū)動(dòng)程序要對(duì)URB做出相應(yīng)的處理,并將處理結(jié)果返回給USB設(shè)備驅(qū)動(dòng)程序。
網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)包單元叫CentermPDU(升騰協(xié)議數(shù)據(jù)單元),封裝了數(shù)據(jù)USB設(shè)備的URB和自定義的命令集合(Our own CMDs)。CentermPDU進(jìn)一步被封裝在TCP/IP包中,通過(guò)網(wǎng)絡(luò)服務(wù)傳送出去。
CentermPDU處理模塊該模塊負(fù)責(zé)解析封裝于TCP/IP的CentermPDU,識(shí)別出是自定義命令包還是URB(USB Request Block),該模塊主要由2個(gè)處理線程組成發(fā)送線程主要負(fù)責(zé)接收來(lái)自虛擬總線驅(qū)動(dòng)的URB請(qǐng)求信息,封裝成CentermPDU并發(fā)送到客戶機(jī)端,該線程由接收線程創(chuàng)建。
接收線程接收CentermPDU,解析出客戶機(jī)端回送的URB請(qǐng)求處理結(jié)果后,傳遞給虛擬總線驅(qū)動(dòng),該線程由遠(yuǎn)程設(shè)備拔插監(jiān)聽(tīng)模塊檢測(cè)到設(shè)備插入時(shí)創(chuàng)建。
(1)發(fā)送線程連接到客戶機(jī)端,發(fā)送URB數(shù)據(jù)(如圖4所示)(2)接收線程接收從設(shè)備返回的URB的處理結(jié)果接收線程的主要工作是獲取URB處理結(jié)果,并通知虛擬總線驅(qū)動(dòng),與虛擬總線驅(qū)動(dòng)建立通信通道。流程圖如圖5所示。
虛擬總線本身是一個(gè)虛擬的設(shè)備,同時(shí)它又負(fù)責(zé)虛擬出各個(gè)USB子設(shè)備,以及具體處理各種URB(如圖6所示)。
1、虛總線設(shè)備PNP模塊虛擬總線設(shè)備PNP模塊主要處理虛總線設(shè)備的PNP狀態(tài)轉(zhuǎn)換如圖7所示。
2、設(shè)備插拔處理接口模塊如圖8、9所示。
3、虛USB子設(shè)備URB處理,子設(shè)備URB處理是虛擬總線驅(qū)動(dòng)中重要的處理部分,負(fù)責(zé)處理各個(gè)虛子設(shè)備的命令包和數(shù)據(jù)包。圖10、11、12是URB處理模塊流程圖使用過(guò)程如下所述1、安裝服務(wù)器端程序;2、在網(wǎng)絡(luò)計(jì)算機(jī)(終端)上升級(jí)安裝客戶機(jī)端程序,配置要映射的設(shè)備等參數(shù);3、在網(wǎng)絡(luò)計(jì)算機(jī)上插入U(xiǎn)SB設(shè)備,等網(wǎng)絡(luò)計(jì)算機(jī)上的“USB映射管理程序”的“設(shè)備列表”框中列出該設(shè)備時(shí),選中該設(shè)備,點(diǎn)擊“映射”按鈕;4、在彈出的配置對(duì)話框中填入要映射的服務(wù)器的IP地址及端口。點(diǎn)擊“確定”按鈕;5、服務(wù)器端的“USB映射管理程序”的“設(shè)備列表”框中顯示出來(lái)自某個(gè)網(wǎng)絡(luò)計(jì)算機(jī)的USB設(shè)備映射完成,顯示出相應(yīng)的設(shè)備圖標(biāo);6、用戶通過(guò)RDP從網(wǎng)絡(luò)計(jì)算機(jī)登錄到服務(wù)器,可以使用該USB設(shè)備。如果是存儲(chǔ)設(shè)備,可以拷貝刪除;如果是打印機(jī),可以執(zhí)行打印服務(wù);如果是掃描儀,可以點(diǎn)擊應(yīng)用程序,從掃描儀獲取圖像,等等;7、在服務(wù)器端的“USB映射管理程序”的“設(shè)備列表”框中可以選中某個(gè)設(shè)備進(jìn)行設(shè)備訪問(wèn)權(quán)限的設(shè)置。
雖然本發(fā)明創(chuàng)造已以較佳實(shí)施例揭示如上,但并非用以限定本創(chuàng)作,本發(fā)明方法也可以用于例如設(shè)備共享器、PC等方面,在不脫離本創(chuàng)作之精神和范圍內(nèi)所作之各種更動(dòng)與潤(rùn)飾,亦屬本創(chuàng)作之范圍。
權(quán)利要求
1.一種USB映射方法,包括服務(wù)器端和客戶端,服務(wù)器和客戶端用網(wǎng)絡(luò)相連接,其特征在于連接在客戶端的真實(shí)的USB設(shè)備被映射為服務(wù)器端的一個(gè)虛擬的USB設(shè)備的方法包括如下步驟1)客戶端插上USB設(shè)備,USB映射服務(wù)程序客戶機(jī)端偵測(cè)到設(shè)備到來(lái),發(fā)出一個(gè)設(shè)備插入的命令,將命令封裝起來(lái)發(fā)送給服務(wù)器;2)服務(wù)器收到封裝的數(shù)據(jù)包,解析是一個(gè)插入設(shè)備的請(qǐng)求,向客戶端發(fā)出取設(shè)備信息的命令,該命令仍然被封裝起來(lái);3)客戶機(jī)將相關(guān)的設(shè)備信息封裝起來(lái),傳回到服務(wù)器端;4)USB映射服務(wù)程序服務(wù)器端得知客戶機(jī)的設(shè)備的相關(guān)信息,向虛擬總線發(fā)出請(qǐng)求,虛擬一個(gè)USB設(shè)備;5)虛擬總線虛擬出USB設(shè)備,通知PnP管理器,加載相應(yīng)的USB設(shè)備驅(qū)動(dòng)程序;6)USB設(shè)備驅(qū)動(dòng)程序發(fā)出URB請(qǐng)求包,對(duì)設(shè)備進(jìn)行初始化;7)虛擬總線截獲到這些URB請(qǐng)求包,分析這些URB,然后重新封裝,通知服務(wù)程序有命令需要處理;8)USB映射服務(wù)程序服務(wù)器端取出含有URB的封裝好的數(shù)據(jù)包,發(fā)送到客戶機(jī)端;9)USB映射服務(wù)程序客戶機(jī)端收到含有URB的封裝好的數(shù)據(jù)包,解包分析,發(fā)現(xiàn)是URB命令,調(diào)用通用驅(qū)動(dòng)接口將命令傳給客戶驅(qū)動(dòng);10)客戶驅(qū)動(dòng)將命令轉(zhuǎn)換成可處理的Transfer,調(diào)用底層驅(qū)動(dòng)接口處理,底層驅(qū)動(dòng)和設(shè)備直接打交道,命令設(shè)備動(dòng)作,并從設(shè)備取得處理結(jié)果,傳給通用驅(qū)動(dòng);11)USB映射服務(wù)程序客戶機(jī)端收到通用驅(qū)動(dòng)返回的處理結(jié)果,將結(jié)果封裝起來(lái),發(fā)送到服務(wù)器端;12)USB映射服務(wù)程序服務(wù)器端收到含有URB結(jié)果的封裝好的數(shù)據(jù)包,通知虛擬總線有處理結(jié)果返回;13)虛擬總線解包,分析,將結(jié)果數(shù)據(jù)回填到URB,通知應(yīng)用程序命令完成;14)USB設(shè)備驅(qū)動(dòng)程序不停的發(fā)出URB命令,重復(fù)步驟6-13,直至驅(qū)動(dòng)初始化完成;15)用戶通過(guò)RDP登錄到Windows服務(wù)器,看見(jiàn)USB設(shè)備已經(jīng)映射成功,服務(wù)器上多出一個(gè)USB設(shè)備;16)用戶使用應(yīng)用軟件,使用設(shè)備;17)應(yīng)用程序發(fā)出請(qǐng)求,經(jīng)過(guò)USB設(shè)備驅(qū)動(dòng)轉(zhuǎn)換成URB命令包;18)重復(fù)步驟7-13,直至應(yīng)用處理完畢;19)客戶端拔出USB設(shè)備,USB映射服務(wù)程序客戶機(jī)端偵測(cè)到設(shè)備消失,發(fā)出一個(gè)設(shè)備拔出的命令,將命令封裝起來(lái)發(fā)送給服務(wù)器;20)服務(wù)器收到數(shù)據(jù)包,解析是一個(gè)拔出設(shè)備的請(qǐng)求,向客戶端發(fā)出取設(shè)備信息的命令,該命令仍然被封裝;21)客戶機(jī)將相關(guān)的設(shè)備信息封裝,傳回到服務(wù)器端;22)USB映射服務(wù)程序服務(wù)器端得知客戶機(jī)的設(shè)備的相關(guān)信息,向虛擬總線發(fā)出請(qǐng)求,拔出一個(gè)USB設(shè)備;23)虛擬總線通知PnP管理器,卸載相應(yīng)的USB設(shè)備驅(qū)動(dòng)程序,釋放相應(yīng)的資源。
2.根據(jù)權(quán)利要求1所述的USB映射方法,其特征在于所述的封裝包的處理包括服務(wù)器端發(fā)送步驟、服務(wù)器端接收步驟和客戶端步驟1)服務(wù)器端發(fā)送步驟(1)SOCKET建立流式套接字,返回套接字號(hào),(2)將套接字與遠(yuǎn)程主機(jī)連接,(3)判斷是否連接成功,(4)若不成功,則關(guān)閉套接字,若成功,則繼續(xù)下一步驟,(5)不斷地將IRP封裝起來(lái),發(fā)送到客戶端,(6)收到刪除設(shè)備的消息就關(guān)閉套接字;2)服務(wù)器端接收步驟(1)收到客戶端的設(shè)備插入請(qǐng)求,終端認(rèn)證,(2)獲取客戶端信息,(3)創(chuàng)建URB發(fā)送線程,(4)虛擬USB設(shè)備,(5)解析接收的數(shù)據(jù)包,判斷是否URB,(6)若收到的是設(shè)備拔出請(qǐng)求,則退出,若有收到,則接收數(shù)據(jù)通知總線驅(qū)動(dòng),(7)轉(zhuǎn)到步驟(5);3)客戶端步驟(1)SOCKET建立流式套接字,返回套接字號(hào),(2)套接字與本地地址綁定,(3)檢測(cè)到設(shè)備插入,通知TCP服務(wù)器準(zhǔn)備連接,(4)等待服務(wù)器端連接,(5)建立連接,返回新套接字,(6)建立URB監(jiān)聽(tīng)線程和URB回送線程(7)監(jiān)聽(tīng)線程接收封裝包,判斷是否URB,從線程池申請(qǐng)一個(gè)線程用于處理URB,處理完的URB掛到隊(duì)列上;(8)回送線程從隊(duì)列上取出URB處理結(jié)果,送回服務(wù)器;(9)轉(zhuǎn)到步驟(7)。
全文摘要
本發(fā)明提供一種USB映射方法,包括服務(wù)器端和客戶端,服務(wù)器和客戶端用網(wǎng)絡(luò)相連接,連接在客戶端的真實(shí)的USB設(shè)備被映射為服務(wù)器端的一個(gè)虛擬的USB設(shè)備的方法,這種方法大大減輕了研發(fā)人員在終端上的USB設(shè)備驅(qū)動(dòng)的開(kāi)發(fā)工作,同時(shí)也極大的方便了客戶,客戶只需要在服務(wù)器端安裝設(shè)備供應(yīng)商提供的驅(qū)動(dòng)程序,就可以使用終端接入的USB設(shè)備了。
文檔編號(hào)H04L29/02GK101035039SQ200710008858
公開(kāi)日2007年9月12日 申請(qǐng)日期2007年4月20日 優(yōu)先權(quán)日2007年4月20日
發(fā)明者張輝, 王賢俊, 汪匯 申請(qǐng)人:福建升騰資訊有限公司