CN103823771B - 一种远程通信方法和系统 - Google Patents

一种远程通信方法和系统 Download PDF

Info

Publication number
CN103823771B
CN103823771B CN201410075638.1A CN201410075638A CN103823771B CN 103823771 B CN103823771 B CN 103823771B CN 201410075638 A CN201410075638 A CN 201410075638A CN 103823771 B CN103823771 B CN 103823771B
Authority
CN
China
Prior art keywords
irp
usb
equipment
request
virtual usb
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN201410075638.1A
Other languages
English (en)
Other versions
CN103823771A (zh
Inventor
陆舟
于华章
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Feitian Technologies Co Ltd
Original Assignee
Feitian Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Feitian Technologies Co Ltd filed Critical Feitian Technologies Co Ltd
Priority to CN201410075638.1A priority Critical patent/CN103823771B/zh
Publication of CN103823771A publication Critical patent/CN103823771A/zh
Application granted granted Critical
Publication of CN103823771B publication Critical patent/CN103823771B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Information Transfer Systems (AREA)

Abstract

本发明公开一种远程通信方法和系统,该系统包括主机、移动设备和外部设备,所述主机包括第一守护程序、虚拟USB总线驱动、USB设备驱动和主机操作系统,所述移动设备包括第二守护程序和驱动程序。本发明通过主机与移动设备之间的通道,将与移动设备连接的外部设备远程映射为主机上的虚拟USB设备,从而实现主机与没有USB接口的外部设备之间的通信,达到了在主机上对与移动设备连接的外部设备进行操作的目的,提高了对外部设备进行调试的工作效率。

Description

一种远程通信方法和系统
技术领域
本发明涉及通信技术领域,特别是涉及一种远程通信方法和系统。
背景技术
外部设备,是能够通电并正常运行的计算机的非必须硬件设备,可以独立或半独立工作而不依赖于计算机,通常包括输入输出设备和存储设备,例如,键盘、鼠标、扫描仪、摄像头、显示器、打印机、光盘驱动器、不间断电源、闪存盘、储存卡读卡器、数码相框、移动硬盘、USB设备以及其他便携设备。
现有技术中,外部设备还可以适用于移动设备,通过耳机口或dock口与移动设备连接,以扩展其所接入的移动设备的功能。
发明人在实现本发明的过程中,发现现有技术至少存在以下缺陷:
由于适用于移动设备的外部设备通过耳机口或dock口与移动设备连接,该外部设备通常没有USB接口,无法通过USB接口与主机连接;主机也无法与上述外部设备进行通信,无法对该外部设备进行调试以及其他操作,导致对移动设备上的外部设备的调试过程非常繁琐,效率也非常低。
发明内容
本发明提供了一种远程通信方法和系统,以解决现有技术中主机无法与没有USB接口的外部设备进行通信的缺陷。
本发明提供了一种远程通信方法,应用于包括主机、移动设备和外部设备的系统中,所述主机包括第一守护程序、虚拟USB总线驱动、USB设备驱动和主机操作系统,所述移动设备包括第二守护程序和驱动程序,所述方法包括以下步骤:
A1、所述USB设备驱动向所述虚拟USB总线驱动发送第一USB请求,所述第一守护程序通过所述主机操作系统向所述虚拟USB总线驱动发送读请求;
A2、所述虚拟USB总线驱动从与所述第一USB请求对应的缓冲区读取第一USB请求包,将所述第一USB请求包转换为设备执行请求包,将所述设备执行请求包存储到与所述读请求对应的缓冲区;
A3、所述虚拟USB总线驱动通过所述主机操作系统向所述第一守护程序发送读成功响应;所述第一守护程序通过所述主机操作系统,从与所述读请求对应的缓冲区读取所述设备执行请求包;
A4、所述第一守护程序将所述设备执行请求包发送给所述第二守护程序;
A5、所述第二守护程序向所述驱动程序发送所述设备执行请求包;
A6、所述驱动程序将所述设备执行请求包转换为与所述外部设备匹配的命令,将转换得到的命令发送给所述外部设备;
A7、所述外部设备对接收到的命令进行处理,将得到的处理结果发送给所述驱动程序;
A8、所述驱动程序根据所述处理结果生成设备执行响应包,将所述设备执行响应包发送给所述第二守护程序;
A9、所述第二守护程序向所述第一守护程序发送所述设备执行响应包;
A10、所述第一守护程序根据所述设备执行响应包生成写请求,通过所述主机操作系统将所述设备执行响应包存储到与所述写请求对应的缓冲区,并通过所述主机操作系统向所述虚拟USB总线驱动发送所述写请求;
A11、所述虚拟USB总线驱动从与所述写请求对应的缓冲区读取所述设备执行响应包,将所述设备执行响应包转换为第二USB请求包,将所述第二USB请求包存储到与所述第一USB请求对应的缓冲区,并向所述USB设备驱动发送执行成功响应;
A12、所述USB设备驱动从与所述第一USB请求对应的缓冲区读取所述第二USB请求包。
本发明还提供了一种远程通信系统,包括主机、移动设备和外部设备,所述主机包括第一守护程序、虚拟USB总线驱动、USB设备驱动和主机操作系统,所述移动设备包括第二守护程序和驱动程序;
其中,所述USB设备驱动包括:
第一发送模块,用于向所述虚拟USB总线驱动发送第一USB请求;
第一接收模块,用于接收来自所述虚拟USB总线驱动的执行成功响应;
第一读取模块,用于在所述第一接收模块接收到执行成功响应后,从与所述第一USB请求对应的缓冲区读取所述第二USB请求包;
所述虚拟USB总线驱动包括:
第二接收模块,用于接收来自所述USB设备驱动的所述第一USB请求,以及,通过所述主机操作系统接收来自所述第一守护程序的读请求和写请求;
第二读取模块,用于从与所述第二接收模块接收到的所述第一USB请求对应的缓冲区读取第一USB请求包,以及,从与所述第二接收模块接收到的所述写请求对应的缓冲区读取设备执行响应包;
第一转换模块,用于将所述第二读取模块读取到的所述第一USB请求包转换为设备执行请求包,将所述设备执行请求包存储到与所述读请求对应的缓冲区;以及,将所述第二读取模块读取到的所述设备执行响应包转换为第二USB请求包,将所述第二USB请求包存储到与所述第一USB请求对应的缓冲区;
第二发送模块,用于在所述第一转换模块将所述设备执行请求包存储到与所述读请求对应的缓冲区后,通过所述主机操作系统向所述第一守护程序发送读成功响应;
以及,在所述第一转换模块将所述第二USB请求包存储到与所述第一USB请求对应的缓冲区后,向所述USB设备驱动发送执行成功响应;
所述第一守护程序包括:
第三发送模块,用于通过所述主机操作系统向所述虚拟USB总线驱动发送所述读请求,以及,将第三读取模块读取到的设备执行请求包发送给所述第二守护程序;
第三接收模块,用于接收来自所述主机操作系统的所述读成功响应,以及,接收来自所述第二守护程序的设备执行响应包;
第一生成模块,用于根据所述第三接收模块接收到的所述设备执行响应包生成所述写请求,通过所述主机操作系统将所述设备执行响应包存储到与所述写请求对应的缓冲区,并通过所述主机操作系统向所述虚拟USB总线驱动发送所述写请求;
所述第三读取模块,用于在所述第三接收模块接收到所述读成功响应后,通过所述主机操作系统,从与所述读请求对应的缓冲区读取所述设备执行请求包;
所述第二守护程序,包括:
第四发送模块,用于向所述驱动程序发送第四接收模块接收到的所述设备执行请求包,以及,将所述第四接收模块接收到的设备执行响应包发送给所述第一守护程序;
所述第四接收模块,用于接收来自所述第一守护程序的所述设备执行请求包,以及,接收来自所述驱动程序的设备执行响应包;
所述驱动程序,包括:
第五接收模块,用于接收来自所述第二守护程序的所述设备执行请求包,以及,接收来自所述外部设备的处理结果;
第二转换模块,用于将所述第五接收模块接收到的所述设备执行请求包转换为与所述外部设备匹配的命令;
第二生成模块,用于根据所述第五接收模块接收到的处理结果生成设备执行响应包;
第五发送模块,用于将所述第二转换模块转换得到的命令发送给所述外部设备,以及,将所述第二生成模块生成的所述设备执行响应包发送给所述第二守护程序;
所述外部设备,包括:
第六接收模块,用于接收来自所述驱动程序的命令;
第一处理模块,用于对所述第六接收模块接收到的命令进行处理;
第六发送模块,用于将所述第一处理模块处理得到的处理结果发送给所述驱动程序。
本发明达到的有益效果:通过主机与移动设备之间的通道,将与移动设备连接的外部设备远程映射为主机上的虚拟USB设备,从而实现主机与没有USB接口的外部设备之间的通信,达到了在主机上对与移动设备连接的外部设备进行操作的目的,提高了对外部设备进行调试的工作效率。
附图说明
图1为本发明实施例中的一种远程通信系统的结构图;
图2为本发明实施例中的工具程序的工作流程图;
图3和图4为本发明实施例中的一种远程通信方法流程图;
图5为本发明实施例中的第一守护程序的工作流程图;
图6为本发明实施例中的第一守护程序的通信流程图;
图7为本发明实施例中的虚拟USB总线驱动的Device_Ioctl(设备输入输出控制)接口被调用时,虚拟USB总线驱动执行的操作流程图;
图8为本发明实施例中的虚拟USB总线驱动的Bus_Read(读总线)接口被调用时,虚拟USB总线驱动执行的操作流程图;
图9为本发明实施例中的虚拟USB总线驱动的Bus_Write(写总线)接口被调用时,虚拟USB总线驱动执行的操作流程图;
图10为本发明实施例中的虚拟USB总线驱动的Internal_Ioctl(内部输入输出控制)接口被调用时,虚拟USB总线驱动执行的操作流程图;
图11为本发明实施例中的第二守护程序的工作流程图;
图12为本发明实施例中的USB设备驱动的结构示意图;
图13为本发明实施例中的虚拟USB总线驱动的结构示意图;
图14为本发明实施例中的第一守护程序的结构示意图;
图15为本发明实施例中的第二守护程序的结构示意图;
图16为本发明实施例中的驱动程序的结构示意图;
图17为本发明实施例中的外部设备的结构示意图;
图18为本发明实施例中的工具程序的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例的技术方案应用于包括主机、移动设备和外部设备的系统,如图1所示,主机与移动设备连接,移动设备与外部设备连接,主机上安装有第一守护程序、虚拟USB总线驱动和USB设备驱动,移动设备上安装有第二守护程序、工具程序和驱动程序。
其中,工具程序用于根据用户输入的命令以及与移动设备连接的外部设备的状态,从所有与移动设备连接的外部设备中选择共享设备,并将选择出的共享设备的信息添加到共享设备列表中。工具程序的工作流程,如图2所示,包括以下步骤:
步骤101,工具程序等待获取用户输入的命令。
步骤102,当获取到命令后,工具程序对获取到的命令进行判断,如果是设备显示命令,则执行步骤103;如果是设备共享命令,则执行步骤104;如果是设备释放命令,则执行步骤107。
步骤103,工具程序获取所有能被共享的、与移动设备连接的外部设备的信息,对获取到的外部设备的信息进行显示,并返回步骤101。
其中,获取到的外部设备的信息可以包括:外部设备的名称和BusID(总线编号)。例如,外部设备的名称为“interpass3000”,BusID为7。
步骤104,工具程序判断设备共享命令中的设备信息对应的外部设备的状态是否为占用状态,如果是,则执行步骤105;否则,执行步骤106。
其中,设备共享命令中的设备信息可以包括设备名称和BusID。
步骤105,工具程序显示共享失败信息,返回步骤101。
步骤106,工具程序将设备共享命令中的设备信息添加到共享设备列表中,将与设备共享命令中的设备信息对应的外部设备的状态设置为占用状态,并返回步骤101。
步骤107,工具程序将设备释放命令中的设备信息从共享设备列表中删除,将与设备共享命令中的设备信息对应的外部设备的状态设置为释放状态,并返回步骤101。
基于上述工具程序的工作流程以及如图1所示的系统结构,本发明实施例提供了一种远程通信方法,如图3和图4所示,包括以下步骤:
步骤201,第一守护程序获取用户输入的列表命令。
步骤202,第一守护程序与移动设备建立TCP连接。
步骤203,第一守护程序向移动设备发送设备列表获取请求。
步骤204,移动设备中的第二守护程序查询共享设备列表,获取共享设备列表中的内容。
步骤205,第二守护程序将共享设备列表中的内容作为虚拟USB设备列表返回给主机中的第一守护程序。
步骤206,第一守护程序显示虚拟USB设备列表。
步骤207,第一守护程序获取用户输入的附着命令。
步骤208,第一守护程序与移动设备建立TCP连接。
步骤209,第一守护程序向移动设备发送设备关联请求。
步骤210,移动设备中的第二守护程序根据设备关联请求中的BusID,获取与该BusID对应的外部设备的数据结构。
其中,与设备关联请求中的BusID对应的外部设备是与第一守护程序所属的主机进行通信、且与移动设备连接的外部设备。
步骤211,第二守护程序将外部设备的数据结构作为虚拟USB设备的数据结构返回给主机中的第一守护程序。
步骤212,第一守护程序根据虚拟USB设备的数据结构生成设备插入请求。
步骤213,第一守护程序向虚拟USB总线驱动发送设备插入请求。
具体地,第一守护程序可以通过主机操作系统向虚拟USB总线驱动发送设备插入请求。
步骤214,虚拟USB总线驱动创建设备对象,获取虚拟USB设备的数据结构,并根据该数据结构将创建的设备对象构建为USB设备,并将该USB设备的标识信息添加到内部设备列表中。
步骤215,虚拟USB总线驱动为构建的USB设备加载对应的USB设备驱动。
步骤216,USB设备驱动向虚拟USB总线驱动发送第一USB请求。
具体地,USB设备驱动可以通过主机操作系统向虚拟USB总线驱动发送第一USB请求。
本实施例中,USB设备驱动根据第一USB请求生成第六IRP,将第六IRP作为参数,调用虚拟USB总线驱动的Internal_Ioctl接口,将第六IRP发送给所述虚拟USB总线驱动,该第六IRP中包含第六缓冲区的地址。
步骤217,第一守护程序向虚拟USB总线驱动发送读请求。
具体地,第一守护程序可以通过主机操作系统向虚拟USB总线驱动发送读请求。
本实施例中,第一守护程序将虚拟USB总线驱动的句柄和第一用户缓冲区的地址作为参数,调用主机操作系统的ReadFile(读文件)函数;主机操作系统生成第三IRP,将第三IRP作为参数,调用虚拟USB总线驱动的Bus_Read接口,将第三IRP发送给虚拟USB总线驱动,该第三IRP中包含第三缓冲区的地址。
步骤218,虚拟USB总线驱动读取与第一USB请求对应的缓冲区,将读取到的第一URB(USBRequest Block,USB请求包)转换为USB_IP(Universal Serial Bus InternetProtocol通用串行总线因特网协议)格式的数据,并将转换得到的USB_IP格式的数据存储到与读请求对应的缓冲区中。
其中,与第一USB请求对应的缓冲区为系统空间中的第六缓冲区,第六缓冲区的地址包含在与第一USB请求对应的第六IRP中。与读请求对应的缓冲区为系统空间中的第三缓冲区,第三缓冲区的地址包含在与读请求对应的第三IRP中。
步骤219,虚拟USB总线驱动向第一守护程序发送读成功响应。
具体地,虚拟USB总线驱动可以通过Bus_Read接口向主机操作系统返回完成状态信息,并通过主机操作系统向第一守护程序发送读成功响应。
步骤220,第一守护程序对与读请求对应的缓冲区进行读取,得到该缓冲区中存储的USB_IP格式的数据。
步骤221,第一守护程序将读取到的USB_IP格式的数据作为设备执行请求包发送给移动设备中的第二守护程序。
步骤222,第二守护程序将设备执行请求包发送给驱动程序。
步骤223,驱动程序将设备执行请求包转换为与外部设备匹配的命令。
步骤224,驱动程序将转换得到的命令发送给外部设备。
步骤225,外部设备对接收到的命令进行处理,得到处理结果。
步骤226,外部设备向驱动程序发送处理结果。
步骤227,驱动程序根据接收到的处理结果生成设备执行响应包。
步骤228,驱动程序向第二守护程序发送设备执行响应包。
步骤229,第二守护程序向主机中的第一守护程序发送设备执行响应包。
步骤230,第一守护程序根据设备执行响应包生成写请求。
步骤231,第一守护程序向虚拟USB总线驱动发送写请求。
具体地,第一守护程序可以通过主机操作系统向虚拟USB总线驱动发送写请求。
本实施例中,第一守护程序将设备执行响应包存储到第二用户缓冲区中,将虚拟USB总线驱动的句柄和第二用户缓冲区的地址作为参数,调用主机操作系统的WriteFile(写文件)函数;主机操作系统将设备执行响应包从第二用户缓冲区复制到第四缓冲区中,将第四缓冲区的地址打包成第四IRP,将第四IRP作为参数,调用虚拟USB总线驱动的Bus_Write接口,将第四IRP发送给所述虚拟USB总线驱动。
步骤232,虚拟USB总线驱动读取与写请求对应的缓冲区,得到该缓冲区中存储的设备执行响应包,将该设备执行响应包转换为第二URB,将转换得到的第二URB填充到与来自USB设备驱动的第一USB请求对应的缓冲区中。
其中,与写请求对应的缓冲区为系统空间的第四缓冲区,第四缓冲区的地址包含在第四IRP中。
步骤233,虚拟USB总线驱动向USB设备驱动发送执行成功响应,向第一守护程序发送写成功响应。
具体地,虚拟USB总线驱动通过Internal_Ioctl接口向主机操作系统返回完成状态信息,通过主机操作系统向USB设备驱动发送执行成功响应;并通过Bus_Write接口向主机操作系统返回完成状态信息,通过主机操作系统向第一守护程序发送写成功响应。
步骤234,USB设备驱动对与第一USB请求对应的缓冲区进行读取,得到该缓冲区中存储的第二URB。
需要说明的是,本发明实施例中的USB设备驱动还可以生成第二USB请求,根据第二USB请求生成第五IRP,将第五IRP作为参数,调用虚拟USB总线驱动的Internal_Ioctl接口,将第五IRP发送给虚拟USB总线驱动,该第五IRP中包含第五缓冲区的地址。
此外,USB设备驱动还可以生成第三USB请求,根据第三USB请求生成第七IRP,将第七IRP作为参数,调用虚拟USB总线驱动的Internal_Ioctl接口,将第七IRP发送给虚拟USB总线驱动,该第七IRP中包含第七缓冲区的地址。
虚拟USB总线驱动对第五IRP、第六IRP和第七IRP的具体处理过程,可详见如图10所示的流程图。
如图5所示,为本发明实施例中的第一守护程序的工作流程图,包括以下步骤:
步骤301,第一守护程序等待获取用户输入的命令。
步骤302,第一守护程序对获取到的命令进行判断,如果是列表命令,则执行步骤303;如果是附着命令,则执行步骤306。
步骤303,第一守护程序与移动设备建立TCP连接。
步骤304,第一守护程序向移动设备中的第二守护程序发送设备列表获取请求。
步骤305,第一守护程序接收第二守护程序返回的虚拟USB设备列表,显示虚拟USB设备列表中的内容,并返回步骤301。
其中,虚拟USB设备列表可以包括虚拟USB设备的名称和BusID。
步骤306,第一守护程序与移动设备建立TCP连接。
步骤307,第一守护程序向移动设备中的第二守护程序发送设备关联请求。
步骤308,第一守护程序接收第二守护程序返回的虚拟USB设备的数据结构,根据虚拟USB设备的数据结构生成设备插入请求,通过主机操作系统将设备插入请求发送给虚拟USB总线驱动。
具体地,设备插入请求可以包含第一控制码和虚拟USB设备的数据结构;相应地,第一守护程序可以将虚拟USB总线驱动的句柄、第一控制码和虚拟USB设备的数据结构作为参数,调用主机操作系统的DeviceIoControl(设备输入输出控制)函数;主机操作系统将虚拟USB设备的数据结构复制到系统空间的第一缓冲区中,将第一缓冲区的地址和第一控制码打包成第一IRP(I/O Request Package,输入/输出请求包),将第一IRP作为参数,调用虚拟USB总线驱动的Device_Ioctl接口,将第一IRP发送给虚拟USB总线驱动。
其中,第一IRP的AssociatedIrp.SystemBuffer域的取值为第一缓冲区的地址,上述设备插入请求包含的第一控制码可以为“IOCTL_USB_VBUS_PLUGIN_HARDWARE”;虚拟USB设备的数据结构可以包括虚拟USB设备的名称、BusID、VID(生产厂商编号)和PID(产品编号),还可以进一步包括虚拟USB设备的Speed(总线速率)、设备版本号和设备类型等信息。
步骤309,第一守护程序与虚拟USB总线驱动以及第二守护程序进行数据交互,并在数据传输超时时,通过主机操作系统向虚拟USB总线驱动发送设备卸载请求,并返回步骤301。
具体地,设备卸载请求可以包含第二控制码和虚拟USB设备的标识信息,相应地,如果数据传输超时,第一守护程序可以将虚拟USB总线驱动的句柄、第二控制码和虚拟USB设备的标识信息作为参数,调用主机操作系统的DeviceIoControl函数;主机操作系统将虚拟USB设备的标识信息复制到系统空间的第二缓冲区中,将第二缓冲区的地址和第二控制码打包成第二IRP,将第二IRP作为参数,调用虚拟USB总线驱动的Device_Ioctl接口,将第二IRP发送给虚拟USB总线驱动。
其中,第二IRP的AssociatedIrp.SystemBuffer域的取值为第二缓冲区的地址,上述设备卸载请求包含的第二控制码可以为“IOCTL_USB_VBUS_UNPLUG_HARDWARE”,虚拟USB设备的标识信息可以包括虚拟USB设备的BusID、VID和PID。
需要说明的是,上述步骤309可细化为如图6所示的流程图,包括以下步骤:
步骤401,第一守护程序向虚拟USB总线驱动发送读请求。
具体地,第一守护程序可以将虚拟USB总线驱动的句柄和第一用户缓冲区的地址作为参数,调用主机操作系统的ReadFile函数;主机操作系统生成第三IRP,将第三IRP作为参数,调用虚拟USB总线驱动的Bus_Read接口,将第三IRP发送给虚拟USB总线驱动。其中,第三IRP中包含系统空间的第三缓冲区的地址。
本实施例中,第三IRP的AssociatedIrp.SystemBuffer域的取值为第三缓冲区的地址。
步骤402,第一守护程序判断是否从虚拟USB总线驱动读取到数据,如果是,则执行步骤403;否则,执行步骤404。
具体地,第一守护程序可以判断ReadFile函数的返回状态是否为IO_PENDING状态,如果是,则确定没有从虚拟USB总线驱动读取到数据;否则,确定从虚拟USB总线驱动读取到数据。
步骤403,第一守护程序将来自虚拟USB总线驱动的数据作为设备执行请求包,发送给移动设备,并执行步骤404。
具体地,第一守护程序可以读取第一用户缓冲区,获取来自虚拟USB总线驱动的数据,该数据为USB_IP格式的数据,第一守护程序可以将该数据作为设备执行请求包,将移动设备的socket句柄和上述设备执行请求包作为参数,调用WriteSocket函数,将设备执行请求包发送给移动设备中的第二守护程序。
步骤404,第一守护程序对移动设备执行读操作。
具体地,第一守护程序可以将移动设备的socket句柄作为参数,调用ReadSocket函数,对移动设备执行异步读操作。
步骤405,第一守护程序判断是否从移动设备读取到设备执行响应包,如果是,则执行步骤406;否则,执行步骤407。
具体地,第一守护程序可以判断ReadSocket函数的返回状态是否为IO_PENDING状态,如果是,则确定没有从移动设备读取到设备执行响应包;否则,确定从移动设备读取到设备执行响应包。
步骤406,第一守护程序根据来自移动设备的设备执行响应包,对虚拟USB总线驱动执行写操作,并返回步骤401。
具体地,第一守护程序可以将来自移动设备的设备执行响应包存储到第二用户缓冲区中,将虚拟USB总线驱动的句柄和第二用户缓冲区的地址作为参数,调用主机操作系统的WriteFile函数;主机操作系统将上述设备执行响应包从第二用户缓冲区复制到系统空间的第四缓冲区中,将第四缓冲区的地址打包成第四IRP,将第四IRP作为参数,调用虚拟USB总线驱动的Bus_Write接口,将第四IRP发送给虚拟USB总线驱动。
其中,第四IRP的AssociatedIrp.SystemBuffer域的取值为第四缓冲区的地址。
步骤407,第一守护程序等待接收数据。
步骤408,第一守护程序判断是否在预设时长内接收到数据,如果是,则执行步骤409;否则,执行步骤410。
步骤409,第一守护程序对接收到的数据进行判断,如果接收到的数据是来自虚拟USB总线驱动的数据,则执行步骤403;如果接收到的数据是来自移动设备的设备执行响应包,则执行步骤406。
步骤410,第一守护程序向虚拟USB总线驱动发送设备卸载请求。
本发明实施例中,虚拟USB总线驱动的接口包括Device_Ioctl接口、Bus_Read接口、Bus_Write接口和Internal_Ioctl接口。当虚拟USB总线驱动的Device_Ioctl接口被主机操作系统调用时,虚拟USB总线驱动执行的操作流程,如图7所示,包括以下步骤:
步骤501,虚拟USB总线驱动对通过Device_Ioctl接口获取到的IRP进行判断,如果是第一IRP,则执行步骤502;如果是第二IRP,则执行步骤506。
其中,虚拟USB总线驱动通过Device_Ioctl接口获取到的IRP是作为参数传入到Device_Ioctl接口中的IRP。
具体地,虚拟USB总线驱动可以对获取到的IRP中的控制码进行判断,如果是第一控制码,则确定获取到的IRP为第一IRP;如果是第二控制码,则确定获取到的IRP为第二IRP。本实施例中,第一控制码可以为“IOCTL_USB_VBUS_PLUGIN_HARDWARE”,第二控制码可以为“IOCTL_USB_VBUS_UNPLUG_HARDWARE”。
步骤502,虚拟USB总线驱动创建设备对象。
具体地,虚拟USB总线驱动可以通过调用内核的IoCreatDeviceSecure函数,创建设备对象。
步骤503,虚拟USB总线驱动根据第一IRP包含的第一缓冲区的地址,读取虚拟USB设备的数据结构。
具体地,虚拟USB总线驱动可以读取第一IRP的AssociatedIrp.SystemBuffer域,将读取到的内容作为第一缓冲区的地址,并根据第一缓冲区的地址,读取第一缓冲区中存储的数据,将读取到的数据作为虚拟USB设备的数据结构。
其中,虚拟USB设备的数据结构可以包括虚拟USB设备的名称、BusID、VID和PID,还可以进一步包括虚拟USB设备的总线速率、设备版本号和设备类型等信息。
步骤504,虚拟USB总线驱动根据虚拟USB设备的数据结构,将创建的设备对象构建为USB设备,并将该USB设备的标识信息添加到内部设备列表中。
具体地,虚拟USB总线驱动可以根据虚拟USB设备的数据结构,对创建的设备对象进行初始化,将该设备对象构建为USB设备,并将该USB设备的标识信息添加到内部设备列表中。
步骤505,虚拟USB总线驱动为构建的USB设备加载对应的USB设备驱动。
具体地,虚拟USB总线驱动可以调用内核的IoInvalidateDeviceRlations函数,通过主机操作系统为构建的USB设备加载对应的USB设备驱动,并弹出安装新硬件向导。
步骤506,虚拟USB总线驱动根据第二IRP中包含的第二缓冲区的地址,读取虚拟USB设备的标识信息。
具体地,虚拟USB总线驱动可以读取第二IRP的AssociatedIrp.SystemBuffer域,将读取到的内容作为第二缓冲区的地址,并根据第二缓冲区的地址,读取第二缓冲区中存储的数据,将读取到的数据作为虚拟USB设备的标识信息。
其中,虚拟USB设备的标识信息可以包括虚拟USB设备的BusID、VID和PID。
步骤507,虚拟USB总线驱动根据虚拟USB设备的标识信息,从内部设备列表中查找与该标识信息对应的设备对象。
具体地,虚拟USB总线驱动可以遍历内部设备列表中的设备对象的标识信息,从内部设备列表中获取与虚拟USB设备的标识信息相同的标识信息,将与获取到的标识信息对应的设备对象作为查找到的设备对象。
步骤508,虚拟USB总线驱动中止与查找到的设备对象相关的I/O操作,从内部设备列表中删除该设备对象的标识信息,并卸载与该设备对象对应的USB设备驱动。
具体地,虚拟USB总线驱动可以调用内核的IoInvalidateDeviceRlations函数,通过主机操作系统卸载与设备对象对应的USB设备驱动。
当虚拟USB总线驱动的Bus_Read接口被主机操作系统调用时,虚拟USB总线驱动执行的操作流程,如图8所示,包括以下步骤:
步骤601,虚拟USB总线驱动通过Bus_Read接口获取第三IRP。
其中,虚拟USB总线驱动通过Bus_Read接口获取到的第三IRP是作为参数传入到Bus_Read接口中的IRP,第三IRP中包含系统空间的第三缓冲区的地址。
步骤602,虚拟USB总线驱动判断内部数据列表中是否保存有通过Internal_Ioctl接口获取到的IRP,如果是,则执行步骤604;否则,执行步骤603。
其中,虚拟USB总线驱动通过Internal_Ioctl接口获取到的IRP是作为参数传入到Internal_Ioctl接口中的IRP。
步骤603,虚拟USB总线驱动将第三IRP挂起,通过Bus_Read接口返回挂起状态信息。
具体地,虚拟USB总线驱动可以将第三IRP作为参数,调用IoMarkIrpPending函数,将第三IRP的PendingReturned的取值设置为“True”,通过Bus_Read接口向主机操作系统返回STATUS_PENDING状态,主机操作系统将ReadFile函数的返回状态设置为IO_PENDING状态。
步骤604,虚拟USB总线驱动从内部数据列表中选择一个未被遍历过的、通过Internal_Ioctl接口获取到的IRP,对选择的IRP进行判断,如果是第五IRP,则执行步骤605;如果是第六IRP,则执行步骤606。
具体地,虚拟USB总线驱动可以对内部数据列表中保存的、通过Internal_Ioctl接口获取到的IRP中的控制码进行判断,如果是第三控制码,则确定获取到的IRP为第五IRP;如果是第四控制码,则确定获取到的IRP为第六IRP。其中,第三控制码为“IOCTL_INTERNAL_USB_RESET_PORT”,第四控制码为“IOCTL_INTERNAL_USB_SUBMIT_URB”。
步骤605,虚拟USB总线驱动构建USB复位信息,将USB复位信息保存到与第五IRP对应的第五缓冲区中,将完成信息添加到第五IRP中,完成第五IRP,通过Internal_Ioctl接口返回完成状态信息,将第五IRP从内部数据列表中删除,并执行步骤608。
具体地,与第五IRP对应的第五缓冲区的地址可以是第五IRP的AssociatedIrp.SystemBuffer域的取值,相应地,虚拟USB总线驱动可以将构建的USB复位信息保存到第五IRP的AssociatedIrp.SystemBuffer域指定的地址上,将第五IRP的IoStatus域的取值设置为完成信息,并将第五IRP作为参数,调用IoCompleteRequest函数,通知主机操作系统已完成对第五IRP的处理,并通过Internal_Ioctl接口返回完成状态信息。其中,完成信息和完成状态信息可以均为“STATUS_SUCCESS”。
步骤606,虚拟USB总线驱动读取与第六IRP对应的第六缓冲区中的URB。
具体地,与第六IRP对应的第六缓冲区的地址可以是第六IRP的AssociatedIrp.SystemBuffer域的取值,相应地,虚拟USB总线驱动可以从第六IRP的AssociatedIrp.SystemBuffer域指定的地址上读取数据,将读取到的数据作为第六缓冲区中的URB。
步骤607,虚拟USB总线驱动判断读取到的URB的发送标识是否置位,如果是,则执行步骤608;否则,执行步骤609。
步骤608,虚拟USB总线驱动判断内部数据列表是否包含未被遍历过的、通过Internal_Ioctl接口获取到的IRP,如果是,则返回步骤604;否则,返回步骤603。
步骤609,虚拟USB总线驱动将读取到的URB的发送标识置位,并设置该URB的序列号。
步骤610,虚拟USB总线驱动将第六缓冲区中的URB转换为USB_IP格式的数据,将转换得到的数据打包到与第三IRP对应的第三缓冲区中,将完成信息添加到第三IRP中,完成第三IRP,通过Bus_Read接口返回完成状态信息。
具体地,与第三IRP对应的第三缓冲区的地址可以是第三IRP的AssociatedIrp.SystemBuffer域的取值,相应地,虚拟USB总线驱动可以将转换得到的、USB_IP格式的数据保存到第三IRP的AssociatedIrp.SystemBuffer域指定的地址上,将第三IRP的IoStatus域的取值设置为完成信息,并将第三IRP作为参数,调用IoCompleteRequest函数,通知主机操作系统已完成对第三IRP的处理,通过Bus_Read接口向主机操作系统返回完成状态信息。其中,完成信息和完成状态信息可以均为“STATUS_SUCCESS”。
需要说明的是,主机操作系统通过Bus_Read接口接收到完成状态信息后,将第三缓冲区中的数据复制到第一用户缓冲区,并向第一守护程序发送读成功响应;第一守护程序从所述第一用户缓冲区中读取设备执行请求包。
当虚拟USB总线驱动的Bus_Write接口被主机操作系统调用时,虚拟USB总线驱动执行的操作流程,如图9所示,包括以下步骤:
步骤701,虚拟USB总线驱动通过Bus_Write接口获取第四IRP。
其中,虚拟USB总线驱动通过Bus_Write接口获取到的第四IRP是作为参数传入到Bus_Write接口中的IRP,第四IRP中包含系统空间的第四缓冲区的地址。
步骤702,虚拟USB总线驱动判断内部数据列表中是否保存有通过Internal_Ioctl接口获取到的IRP,如果是,则执行步骤704;否则,执行步骤703。
步骤703,虚拟USB总线驱动将错误信息添加到第四IRP中,完成第四IRP,通过Bus_Write接口返回错误状态信息。
步骤704,虚拟USB总线驱动从内部数据列表中选择一个未被遍历过的、通过Internal_Ioctl接口获取到的IRP,对选择的IRP进行判断,如果是第五IRP,则执行步骤707;如果是第六IRP,则执行步骤705。
步骤705,虚拟USB总线驱动读取与第六IRP对应的第六缓冲区中的URB。
步骤706,虚拟USB总线驱动判断读取到的URB的发送标识是否置位,如果是,则执行步骤708;否则,执行步骤707。
步骤707,虚拟USB总线驱动判断内部数据列表是否包含未被遍历过的、通过Internal_Ioctl接口获取到的IRP,如果是,则返回步骤704;否则,返回步骤703。
步骤708,虚拟USB总线驱动判断读取到的URB的序列号是否与从第四缓冲区中获取的USB_IP格式的数据的序列号相同,如果是,则执行步骤709;否则,返回步骤707。
步骤709,虚拟USB总线驱动读取与第四IRP对应的第四缓冲区,获取第四缓冲区中存储的USB_IP格式的数据。
具体地,与第四IRP对应的第四缓冲区的地址可以是第四IRP的AssociatedIrp.SystemBuffer域的取值,相应地,虚拟USB总线驱动可以从第四IRP的AssociatedIrp.SystemBuffer域指定的地址上读取数据,将读取到的数据作为第四缓冲区中存储的USB_IP格式的数据。
步骤710,虚拟USB总线驱动将从第四缓冲区中获取的USB_IP格式的数据转换为URB,将转换得到的URB填充到第六缓冲区中,将完成信息填充到第六IRP中,完成第六IRP,通过Internal_Ioctl接口返回完成状态信息,将完成信息填充到第四IRP中,完成第四IRP,通过Bus_Write接口返回完成状态信息。
当虚拟USB总线驱动的Internal_Ioctl接口被主机操作系统调用时,虚拟USB总线驱动执行的操作流程,如图10所示,包括以下步骤:
步骤801,虚拟USB总线驱动对通过Internal_Ioctl接口获取到的IRP进行判断,如果是第五IRP,则执行步骤803;如果是第六IRP,则执行步骤806;如果是第七IRP,则执行步骤802。
其中,虚拟USB总线驱动通过Internal_Ioctl接口获取到的IRP是作为参数传入到Internal_Ioctl接口中的IRP。
具体地,虚拟USB总线驱动可以对获取到的IRP中的控制码进行判断,如果是第三控制码,则确定获取到的IRP为第五IRP;如果是第四控制码,则确定获取到的IRP为第六IRP;如果是第五控制码,则确定获取到的IRP为第七IRP。
其中,第三控制码为“IOCTL_INTERNAL_USB_RESET_PORT”,第四控制码为“IOCTL_INTERNAL_USB_SUBMIT_URB”,第五控制码为“IOCTL_INTERNAL_USB_GET_PORT_STATUS”。
步骤802,虚拟USB总线驱动构建USB状态信息,将USB状态信息保存到与第七IRP对应的第七缓冲区中,将完成信息添加到第七IRP中,完成第七IRP,通过Internal_Ioctl接口返回完成状态信息。
具体地,与第七IRP对应的第五缓冲区的地址可以是第七IRP的AssociatedIrp.SystemBuffer域的取值,相应地,虚拟USB总线驱动可以将构建的USB状态信息保存到第七IRP的AssociatedIrp.SystemBuffer域指定的地址上,将第七IRP的IoStatus域的取值设置为完成信息,并将第七IRP作为参数,调用IoCompleteRequest函数,通知主机操作系统已完成对第七IRP的处理,并通过Internal_Ioctl接口返回完成状态信息。其中,完成信息和完成状态信息可以均为“STATUS_SUCCESS”。
步骤803,虚拟USB总线驱动判断是否有被挂起的第三IRP,如果是,则执行步骤804;否则,执行步骤805。
步骤804,虚拟USB总线驱动构建USB复位信息,将USB复位信息保存到与第五IRP对应的第五缓冲区中,将完成信息添加到第五IRP中,完成第五IRP,通过Internal_Ioctl接口返回完成状态信息。
步骤805,虚拟USB总线驱动将第五IRP挂起并保存到内部数据列表中,通过Internal_Ioctl接口返回挂起状态信息。
具体地,虚拟USB总线驱动可以将第五IRP作为参数,调用IoMarkIrpPending函数,将第五IRP的PendingReturned的取值设置为“True”,将第五IRP保存到内部数据列表中,通过Internal_Ioctl接口向主机操作系统返回STATUS_PENDING状态。
步骤806,虚拟USB总线驱动判断是否有被挂起的第三IRP,如果是,则执行步骤807;否则,返回步骤808。
步骤807,虚拟USB总线驱动读取与第六IRP对应的第六缓冲区中的URB,将读取到的URB的发送标识置位,并设置该URB的序列号,并执行步骤808。
步骤808,虚拟USB总线驱动将第六IRP挂起并保存到内部数据列表中,通过Internal_Ioctl接口返回挂起状态信息。
具体地,虚拟USB总线驱动可以将第六IRP作为参数,调用IoMarkIrpPending函数,将第六IRP的PendingReturned的取值设置为“True”,将第六IRP保存到内部数据列表中,通过Internal_Ioctl接口向主机操作系统返回STATUS_PENDING状态。
如图11所示,为本发明实施例中的第二守护程序的工作流程图,包括以下步骤:
步骤901,第二守护程序获取主机地址和端口信息,根据主机地址和端口信息监听对应的端口。
例如,第二守护程序获取到的主机地址为192.168.1.0,获取到的端口信息为3240时,第二守护程序在192.168.1.0监听3240端口。
步骤902,第二守护程序等待接收数据。
步骤903,当接收到数据后,第二守护程序对接收到的数据进行判断,如果是来自主机的数据,则执行步骤904;如果是来自驱动程序的设备执行响应包,则执行步骤909。
步骤904,第二守护程序对接收到的数据进行判断,如果是设备列表获取请求,则执行步骤905;如果是设备关联请求,则执行步骤906;如果是设备执行请求包,则执行步骤908。
步骤905,第二守护程序查询共享设备列表,将共享设备列表中的内容作为虚拟USB设备列表返回给主机中的第一守护程序,并返回步骤902。
其中,共享设备列表中保存有可用于远程共享的设备的名称和BusID。
步骤906,第二守护程序根据设备关联请求中的BusID,获取与该BusID对应的共享设备的数据结构。
其中,共享设备的数据结构可以包括共享设备的名称、BusID、VID和PID,还可以进一步包括共享设备的Speed、设备版本号和设备类型等信息。
步骤907,第二守护程序将共享设备的数据结构作为虚拟USB设备的数据结构返回给主机中的第一守护程序,并返回步骤902。
步骤908,第二守护程序将设备执行请求包发送给驱动程序,并返回步骤902。
步骤909,第二守护程序将设备执行响应包发送给主机中的第一守护程序,并返回步骤902。
本发明达到的有益效果:通过主机与移动设备之间的通道,将与移动设备连接的外部设备远程映射为主机上的虚拟USB设备,从而实现主机与没有USB接口的外部设备之间的通信,达到了在主机上对与移动设备连接的外部设备进行操作的目的,提高了对外部设备进行调试的工作效率。
本发明实施例还提供了一种远程通信系统,包括主机、移动设备和外部设备,该主机包括第一守护程序、虚拟USB总线驱动、USB设备驱动和主机操作系统,该移动设备包括第二守护程序和驱动程序。
上述USB设备驱动、虚拟USB总线驱动、第一守护程序、第二守护程序、驱动程序和外部设备的结构分别如图12、图13、图14、图15、图16和图17所示。
本发明实施例中的USB设备驱动包括:
第一发送模块1001,用于向虚拟USB总线驱动发送第一USB请求;
第一接收模块1002,用于接收来自虚拟USB总线驱动的执行成功响应;
第一读取模块1003,用于在第一接收模块1002接收到执行成功响应后,从与第一USB请求对应的缓冲区读取第二USB请求包;
本发明实施例中的虚拟USB总线驱动包括:
第二接收模块1101,用于接收来自USB设备驱动的第一USB请求,以及,通过主机操作系统接收来自第一守护程序的读请求和写请求;
第二读取模块1102,用于从与第二接收模块1101接收到的第一USB请求对应的缓冲区读取第一USB请求包,以及,从与第二接收模块1101接收到的写请求对应的缓冲区读取设备执行响应包;
第一转换模块1103,用于将第二读取模块1102读取到的第一USB请求包转换为设备执行请求包,将设备执行请求包存储到与读请求对应的缓冲区;以及,将第二读取模块1102读取到的设备执行响应包转换为第二USB请求包,将第二USB请求包存储到与第一USB请求对应的缓冲区;
第二发送模块1104,用于在第一转换模块1103将设备执行请求包存储到与读请求对应的缓冲区后,通过主机操作系统向第一守护程序发送读成功响应;
以及,在第一转换模块1103将第二USB请求包存储到与第一USB请求对应的缓冲区后,向USB设备驱动发送执行成功响应;
其中,与上述第一USB请求对应的缓冲区为系统空间的第六缓冲区;
相应地,上述第一发送模块1001,具体用于根据第一USB请求生成第六IRP,将第六IRP作为参数,调用虚拟USB总线驱动的Internal_Ioctl接口,将第六IRP发送给虚拟USB总线驱动,该第六IRP中包含第六缓冲区的地址;
上述第二接收模块1101,具体用于接收来自USB设备驱动的第六IRP;
上述虚拟USB总线驱动,还包括:
第一判断模块1105,用于在第二接收模块1101接收到第六IRP后,判断是否有被挂起的第三IRP;
上述第二读取模块1102,还用于在第一判断模块1105判断出有被挂起的第三IRP时,从第六缓冲区读取USB请求包;
上述虚拟USB总线驱动,还包括:
第一设置模块1106,用于将第二读取模块1102读取到的USB请求包的发送标识置位,设置读取到的USB请求包的序列号,将第六IRP挂起并保存到内部数据列表中,通过Internal_Ioctl接口返回挂起状态信息;
以及,在第一判断模块1105判断出没有被挂起的第三IRP时,将第六IRP挂起并保存到内部数据列表中,通过Internal_Ioctl接口返回挂起状态信息。
进一步地,上述USB设备驱动,还包括:
第三生成模块1004,用于根据第二USB请求生成第五IRP,将第五IRP作为参数,调用虚拟USB总线驱动的Internal_Ioctl接口,将第五IRP发送给虚拟USB总线驱动,该第五IRP中包含第五缓冲区的地址;
相应地,上述第二接收模块1101,还用于接收来自USB设备驱动的第五IRP;
上述第一判断模块1105,还用于在第二接收模块1101接收到第五IRP时,判断是否有被挂起的第三IRP;
上述虚拟USB总线驱动,还包括:
第二设置模块1107,用于在第一判断模块1105判断出有被挂起的第三IRP时,构建USB复位信息,将USB复位信息保存到第五缓冲区,将完成信息添加到第五IRP中,完成第五IRP,通过Internal_Ioctl接口返回完成状态信息;
以及,在第一判断模块1105判断出没有被挂起的第三IRP时,将第五IRP挂起并保存到内部数据列表中,通过Internal_Ioctl接口返回挂起状态信息。
进一步地,上述虚拟USB总线驱动,还包括:
第二处理模块1108,用于在第二接收模块1101通过主机操作系统接收到第三IRP后,执行以下操作:
B1、判断内部数据列表中是否保存有通过Internal_Ioctl接口获取到的IRP,如果是,则执行步骤B3;否则,执行步骤B2;
B2、将第三IRP挂起,通过Bus_Read接口返回挂起状态信息;
B3、从内部数据列表中选择一个未被遍历过的、通过Internal_Ioctl接口获取到的IRP,对选择的IRP进行判断,如果是第五IRP,则执行步骤B4;如果是第六IRP,则执行步骤B5;
B4、构建USB复位信息,将USB复位信息保存到第五缓冲区,将完成信息添加到第五IRP中,完成第五IRP,通过Internal_Ioctl接口返回完成状态信息,将第五IRP从内部数据列表中删除,并执行步骤B6;
B5、从第六缓冲区读取USB请求包,判断读取到的USB请求包的发送标识是否置位,如果是,则执行步骤B6;否则,执行步骤B7;
B6、判断内部数据列表是否包含未被遍历过的、通过Internal_Ioctl接口获取到的IRP,如果是,则返回步骤B3;否则,返回步骤B2;
B7、将读取到的USB请求包的发送标识置位,设置读取到的USB请求包的序列号,将读取到的USB请求包转换为设备执行请求包,将设备执行请求包存储到第三缓冲区,将完成信息添加到第三IRP中,完成第三IRP,通过Bus_Read接口返回完成状态信息。
进一步地,上述虚拟USB总线驱动,还包括:
第三处理模块1109,用于在第二接收模块1101通过主机操作系统接收到第四IRP后,执行以下操作:
C1、判断内部数据列表中是否保存有通过Internal_Ioctl接口获取到的IRP,如果是,则执行步骤C3;否则,执行步骤C2;
C2、将错误信息添加到第四IRP中,完成第四IRP,通过Bus_Write接口返回错误状态信息;
C3、从内部数据列表中选择一个未被遍历过的、通过Internal_Ioctl接口获取到的IRP,对选择的IRP进行判断,如果是第五IRP,则执行步骤C5;如果是第六IRP,则执行步骤C4;
C4、读取第六缓冲区中的USB请求包,判断读取到的USB请求包的发送标识是否置位,如果是,则执行步骤C6;否则,执行步骤C5;
C5、判断内部数据列表是否包含未被遍历过的、通过Internal_Ioctl接口获取到的IRP,如果是,则返回步骤C3;否则,返回步骤C2;
C6、判断读取到的USB请求包的序列号是否与从第四缓冲区读取到的设备执行响应包的序列号相同,如果是,则执行步骤C7;否则,返回步骤C5;
C7、将设备执行响应包转换为USB请求包,将转换得到的USB请求包填充到第六缓冲区,将完成信息填充到第六IRP中,完成第六IRP,通过Internal_Ioctl接口返回完成状态信息,将完成信息填充到第四IRP中,完成第四IRP,通过Bus_Write接口返回完成状态信息。
进一步地,上述USB设备驱动,还包括:
第四生成模块1005,用于根据第三USB请求生成第七IRP,将第七IRP作为参数,调用虚拟USB总线驱动的Internal_Ioctl接口,将第七IRP发送给虚拟USB总线驱动,该第七IRP中包含第七缓冲区的地址;
相应地,上述第二接收模块1101,还用于接收第七IRP;
上述虚拟USB总线驱动,还包括:
构建模块1110,用于在第二接收模块1101接收到第七IRP时,构建USB状态信息,将USB状态信息保存到第七缓冲区,将完成信息添加到第七IRP中,完成第七IRP,通过Internal_Ioctl接口返回完成状态信息。
本发明实施例中的第一守护程序包括:
第三发送模块1201,用于通过主机操作系统向虚拟USB总线驱动发送读请求,以及,将第三读取模块1204读取到的设备执行请求包发送给第二守护程序;
第三接收模块1202,用于接收来自主机操作系统的读成功响应,以及,接收来自第二守护程序的设备执行响应包;
第一生成模块1203,用于根据第三接收模块1202接收到的设备执行响应包生成写请求,通过主机操作系统将设备执行响应包存储到与写请求对应的缓冲区,并通过主机操作系统向虚拟USB总线驱动发送写请求;
第三读取模块1204,用于在第三接收模块1202接收到读成功响应后,通过主机操作系统,从与读请求对应的缓冲区读取设备执行请求包;
其中,与读请求对应的缓冲区为系统空间的第三缓冲区,与写请求对应的缓冲区为系统空间的第四缓冲区;
相应地,上述第三发送模块1201,具体用于将虚拟USB总线驱动的句柄和第一用户缓冲区的地址作为参数,调用主机操作系统的ReadFile函数;
通过主机操作系统生成第三IRP,将第三IRP作为参数,调用虚拟USB总线驱动的Bus_Read接口,将第三IRP发送给虚拟USB总线驱动,第三IRP中包含第三缓冲区的地址;
上述第二发送模块1104,具体用于在第一转换模块1103将设备执行请求包存储到与读请求对应的缓冲区后,通过Bus_Read接口向主机操作系统返回完成状态信息;通过主机操作系统将第三缓冲区中的数据复制到第一用户缓冲区,向第一守护程序发送读成功响应;
上述第三读取模块1204,具体用于在第三接收模块1202接收到读成功响应后,从第一用户缓冲区读取设备执行请求包;
上述第一生成模块1203,具体用于将设备执行响应包存储到第二用户缓冲区,将虚拟USB总线驱动的句柄和第二用户缓冲区的地址作为参数,调用主机操作系统的WriteFile函数;
通过主机操作系统将设备执行响应包从第二用户缓冲区复制到第四缓冲区,将第四缓冲区的地址打包成第四IRP,将第四IRP作为参数,调用虚拟USB总线驱动的Bus_Write接口,将第四IRP发送给虚拟USB总线驱动;
上述第二接收模块1101,具体用于接收来自USB设备驱动的第一USB请求,以及,通过主机操作系统接收第三IRP和第四IRP。
进一步地,上述第三发送模块1201,还用于通过主机操作系统向虚拟USB总线驱动发送设备插入请求;
其中,与设备插入请求对应的缓冲区为系统空间的第一缓冲区;
上述第三发送模块1201,具体用于将虚拟USB总线驱动的句柄、第一控制码和虚拟USB设备的数据结构作为参数,调用主机操作系统的DeviceIoControl函数;
通过主机操作系统将虚拟USB设备的数据结构复制到第一缓冲区,将第一缓冲区的地址和第一控制码打包成第一输入/输出请求包IRP,将第一IRP作为参数,调用虚拟USB总线驱动的Device_Ioctl接口,将第一IRP发送给虚拟USB总线驱动。
相应地,上述第二接收模块1101,还用于通过主机操作系统接收设备插入请求;
上述第二读取模块1102,还用于在第二接收模块1101接收到设备插入请求时,创建设备对象,从与设备插入请求对应的缓冲区读取虚拟USB设备的数据结构;
上述虚拟USB总线驱动,还包括:
加载模块1111,用于根据第二读取模块1102读取到的虚拟USB设备的数据结构,将设备对象构建为USB设备,并将USB设备的标识信息添加到内部设备列表中,为USB设备加载USB设备驱动。
进一步地,上述第三发送模块1201,还用于通过主机操作系统向虚拟USB总线驱动发送设备卸载请求;
其中,与设备卸载请求对应的缓冲区为系统空间的第二缓冲区;
相应地,上述第三发送模块1201,具体用于将虚拟USB总线驱动的句柄、第二控制码和虚拟USB设备的标识信息作为参数,调用主机操作系统的DeviceIoControl函数;
通过主机操作系统将虚拟USB设备的标识信息复制到第二缓冲区,将第二缓冲区的地址和第二控制码打包成第二IRP,将第二IRP作为参数,调用虚拟USB总线驱动的Device_Ioctl接口,将第二IRP发送给虚拟USB总线驱动。
上述第二接收模块1101,还用于通过主机操作系统接收设备卸载请求;
上述第二读取模块1102,还用于从与第二接收模块1101接收到的设备卸载请求对应的缓冲区读取虚拟USB设备的标识信息;
上述虚拟USB总线驱动,还包括:
卸载模块1112,用于根据第二读取模块1102读取到的虚拟USB设备的标识信息,从内部设备列表中查找与标识信息对应的设备对象,中止与查找到的设备对象相关的输入/输出操作,从内部设备列表中删除查找到的设备对象的标识信息,并卸载与查找到的设备对象对应的USB设备驱动。
本发明实施例中的第二守护程序,包括:
第四发送模块1301,用于向驱动程序发送第四接收模块1302接收到的设备执行请求包,以及,将第四接收模块1302接收到的设备执行响应包发送给第一守护程序;
第四接收模块1302,用于接收来自第一守护程序的设备执行请求包,以及,接收来自驱动程序的设备执行响应包;
进一步地,上述第一守护程序,还包括:
第一获取模块1205,用于获取用户输入的附着命令;
相应地,上述第三发送模块1201,还用于在第一获取模块1205获取到附着命令后,与移动设备建立TCP连接,向移动设备发送设备关联请求;
上述第三接收模块1202,还用于接收来自第二守护程序的虚拟USB设备的数据结构;
上述第一生成模块1203,还用于根据第三接收模块1202接收到的虚拟USB设备的数据结构生成设备插入请求;
上述第四接收模块1302,还用于接收来自第一守护程序的设备关联请求;
上述第二守护程序,还包括:
第二获取模块1303,用于根据第四接收模块1302接收到的设备关联请求中的总线标识,获取与总线标识对应的外部设备的数据结构;
上述第四发送模块1301,还用于将第二获取模块1303获取到的外部设备的数据结构作为虚拟USB设备的数据结构返回给第一守护程序。
进一步地,上述第一守护程序,还包括:
第三获取模块1206,用于获取用户输入的列表命令;
相应地,上述第三发送模块1201,还用于在第三获取模块1206获取到列表命令后,与移动设备建立TCP连接,向移动设备发送设备列表获取请求;
上述第三接收模块1202,还用于接收来自第二守护程序的虚拟USB设备列表;
上述第一守护程序,还包括:
第一显示模块1207,用于显示第三接收模块1202接收到的虚拟USB设备列表;
上述第四接收模块1302,还用于接收来自第一守护程序的设备列表获取请求;
上述第二守护程序,还包括:
第四获取模块1304,用于在第四接收模块1302接收到设备列表获取请求后,查询共享设备列表,获取共享设备列表中的内容;
上述第四发送模块1301,还用于将第四获取模块1304获取到的共享设备列表中的内容作为虚拟USB设备列表返回给第一守护程序。
本发明实施例中的驱动程序,包括:
第五接收模块1401,用于接收来自第二守护程序的设备执行请求包,以及,接收来自外部设备的处理结果;
第二转换模块1402,用于将第五接收模块1401接收到的设备执行请求包转换为与外部设备匹配的命令;
第二生成模块1403,用于根据第五接收模块1401接收到的处理结果生成设备执行响应包;
第五发送模块1404,用于将第二转换模块1402转换得到的命令发送给外部设备,以及,将第二生成模块1403生成的设备执行响应包发送给第二守护程序;
本发明实施例中的外部设备,包括:
第六接收模块1501,用于接收来自驱动程序的命令;
第一处理模块1502,用于对第六接收模块1501接收到的命令进行处理;
第六发送模块1503,用于将第一处理模块1502处理得到的处理结果发送给驱动程序。
需要说明的是,本发明实施例中的移动设备还可以包括工具程序,如图18所示,该工具程序包括:
第五获取模块1601,用于获取用户输入的命令;
第二判断模块1602,用于对第五获取模块1601获取到的命令进行判断;
第三判断模块1603,用于在第二判断模块1602判断出命令为设备共享命令时,判断设备共享命令中的设备信息对应的外部设备的状态是否为占用状态;
第二显示模块1604,用于在第三判断模块1603判断出设备共享命令中的设备信息对应的外部设备的状态为占用状态时,显示共享失败信息;
第三设置模块1605,用于在第三判断模块1603判断出设备共享命令中的设备信息对应的外部设备的状态不是占用状态时,将设备共享命令中的设备信息添加到共享设备列表中,将与设备共享命令中的设备信息对应的外部设备的状态设置为占用状态;
在第二判断模块1602判断出命令为设备释放命令时,将设备释放命令中的设备信息从共享设备列表中删除,将与设备共享命令中的设备信息对应的外部设备的状态设置为释放状态。
进一步地,上述第五获取模块1601,还用于在第二判断模块1602判断出命令为设备显示命令时,获取所有能被共享的、与移动设备连接的外部设备的信息;
上述第二显示模块1604,还用于对第五获取模块1601获取到的外部设备的信息进行显示。
本发明达到的有益效果:通过主机与移动设备之间的通道,将与移动设备连接的外部设备远程映射为主机上的虚拟USB设备,从而实现主机与没有USB接口的外部设备之间的通信,达到了在主机上对与移动设备连接的外部设备进行操作的目的,提高了对外部设备进行调试的工作效率。
结合本文中所公开的实施例描述的方法中的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

Claims (30)

1.一种远程通信方法,其特征在于,应用于包括主机、移动设备和外部设备的系统中,所述主机包括第一守护程序、虚拟USB总线驱动、USB设备驱动和主机操作系统,所述移动设备包括第二守护程序和驱动程序,所述方法包括以下步骤:
A1、所述USB设备驱动向所述虚拟USB总线驱动发送第一USB请求,所述第一守护程序通过所述主机操作系统向所述虚拟USB总线驱动发送读请求;
A2、所述虚拟USB总线驱动从与所述第一USB请求对应的缓冲区读取第一USB请求包,将所述第一USB请求包转换为设备执行请求包,将所述设备执行请求包存储到与所述读请求对应的缓冲区;
A3、所述虚拟USB总线驱动通过所述主机操作系统向所述第一守护程序发送读成功响应;所述第一守护程序通过所述主机操作系统,从与所述读请求对应的缓冲区读取所述设备执行请求包;
A4、所述第一守护程序将所述设备执行请求包发送给所述第二守护程序;
A5、所述第二守护程序向所述驱动程序发送所述设备执行请求包;
A6、所述驱动程序将所述设备执行请求包转换为与所述外部设备匹配的命令,将转换得到的命令发送给所述外部设备;
A7、所述外部设备对接收到的命令进行处理,将得到的处理结果发送给所述驱动程序;
A8、所述驱动程序根据所述处理结果生成设备执行响应包,将所述设备执行响应包发送给所述第二守护程序;
A9、所述第二守护程序向所述第一守护程序发送所述设备执行响应包;
A10、所述第一守护程序根据所述设备执行响应包生成写请求,通过所述主机操作系统将所述设备执行响应包存储到与所述写请求对应的缓冲区,并通过所述主机操作系统向所述虚拟USB总线驱动发送所述写请求;
A11、所述虚拟USB总线驱动从与所述写请求对应的缓冲区读取所述设备执行响应包,将所述设备执行响应包转换为第二USB请求包,将所述第二USB请求包存储到与所述第一USB请求对应的缓冲区,并向所述USB设备驱动发送执行成功响应;
A12、所述USB设备驱动从与所述第一USB请求对应的缓冲区读取所述第二USB请求包;
所述移动设备还包括工具程序,所述方法还包括:所述工具程序根据用户输入的命令以及与所述移动设备连接的外部设备的状态,从所有与所述移动设备连接的外部设备中选择共享设备,并将选择出的共享设备添加到共享设备列表中。
2.如权利要求1所述的方法,其特征在于,所述步骤A1之前,还包括:
所述第一守护程序通过所述主机操作系统向所述虚拟USB总线驱动发送设备插入请求;
所述虚拟USB总线驱动创建设备对象,从与所述设备插入请求对应的缓冲区读取虚拟USB设备的数据结构;
所述虚拟USB总线驱动根据所述虚拟USB设备的数据结构,将所述设备对象构建为USB设备,并将所述USB设备的标识信息添加到内部设备列表中,为所述USB设备加载所述USB设备驱动。
3.如权利要求2所述的方法,其特征在于,与所述设备插入请求对应的缓冲区为系统空间的第一缓冲区;
所述第一守护程序通过所述主机操作系统向所述虚拟USB总线驱动发送设备插入请求,具体为:
所述第一守护程序将所述虚拟USB总线驱动的句柄、第一控制码和所述虚拟USB设备的数据结构作为参数,调用所述主机操作系统的设备输入输出控制函数;
所述主机操作系统将所述虚拟USB设备的数据结构复制到所述第一缓冲区,将所述第一缓冲区的地址和所述第一控制码打包成第一输入/输出请求包IRP,将所述第一IRP作为参数,调用所述虚拟USB总线驱动的设备输入输出控制接口,将所述第一IRP发送给所述虚拟USB总线驱动。
4.如权利要求2所述的方法,其特征在于,所述第一守护程序通过所述主机操作系统向所述虚拟USB总线驱动发送设备插入请求之前,还包括:
所述第一守护程序获取用户输入的附着命令,与所述移动设备建立TCP连接,向所述移动设备发送设备关联请求;
所述移动设备中的第二守护程序根据所述设备关联请求中的总线标识,获取与所述总线标识对应的所述外部设备的数据结构,将所述外部设备的数据结构作为所述虚拟USB设备的数据结构返回给所述第一守护程序;
所述第一守护程序根据所述虚拟USB设备的数据结构生成所述设备插入请求。
5.如权利要求2所述的方法,其特征在于,所述虚拟USB总线驱动将所述USB设备的标识信息添加到内部设备列表中,为所述USB设备加载所述USB设备驱动之后,还包括:
所述第一守护程序通过所述主机操作系统向所述虚拟USB总线驱动发送设备卸载请求;
所述虚拟USB总线驱动从与所述设备卸载请求对应的缓冲区读取虚拟USB设备的标识信息;
所述虚拟USB总线驱动根据所述虚拟USB设备的标识信息,从所述内部设备列表中查找与所述虚拟USB设备的标识信息对应的设备对象,中止与查找到的设备对象相关的输入/输出操作,从所述内部设备列表中删除所述查找到的设备对象的标识信息,并卸载与所述查找到的设备对象对应的所述USB设备驱动。
6.如权利要求5所述的方法,其特征在于,与所述设备卸载请求对应的缓冲区为系统空间的第二缓冲区;
所述第一守护程序通过所述主机操作系统向所述虚拟USB总线驱动发送设备卸载请求,具体为:
所述第一守护程序将所述虚拟USB总线驱动的句柄、第二控制码和所述虚拟USB设备的标识信息作为参数,调用所述主机操作系统的设备输入输出控制函数;
所述主机操作系统将所述虚拟USB设备的标识信息复制到所述第二缓冲区,将所述第二缓冲区的地址和所述第二控制码打包成第二IRP,将所述第二IRP作为参数,调用所述虚拟USB总线驱动的设备输入输出控制接口,将所述第二IRP发送给所述虚拟USB总线驱动。
7.如权利要求1所述的方法,其特征在于,与所述读请求对应的缓冲区为系统空间的第三缓冲区,与所述写请求对应的缓冲区为系统空间的第四缓冲区;
所述第一守护程序通过所述主机操作系统向所述虚拟USB总线驱动发送读请求,具体为:
所述第一守护程序将所述虚拟USB总线驱动的句柄和第一用户缓冲区的地址作为参数,调用所述主机操作系统的读文件函数;
所述主机操作系统生成第三IRP,将所述第三IRP作为参数,调用所述虚拟USB总线驱动的读总线接口,将所述第三IRP发送给所述虚拟USB总线驱动,所述第三IRP中包含所述第三缓冲区的地址;
所述步骤A3,具体包括:
所述虚拟USB总线驱动通过所述读总线接口向所述主机操作系统返回完成状态信息;
所述主机操作系统将所述第三缓冲区中的数据复制到所述第一用户缓冲区,向所述第一守护程序发送读成功响应;
所述第一守护程序从所述第一用户缓冲区读取所述设备执行请求包;
所述步骤A10,具体包括:
所述第一守护程序将所述设备执行响应包存储到第二用户缓冲区,将所述虚拟USB总线驱动的句柄和所述第二用户缓冲区的地址作为参数,调用所述主机操作系统的写文件函数;
所述主机操作系统将所述设备执行响应包从所述第二用户缓冲区复制到所述第四缓冲区,将所述第四缓冲区的地址打包成第四IRP,将所述第四IRP作为参数,调用所述虚拟USB总线驱动的写总线接口,将所述第四IRP发送给所述虚拟USB总线驱动。
8.如权利要求7所述的方法,其特征在于,与所述第一USB请求对应的缓冲区为系统空间的第六缓冲区;
所述USB设备驱动向所述虚拟USB总线驱动发送第一USB请求,具体为:
所述USB设备驱动根据所述第一USB请求生成第六IRP,将所述第六IRP作为参数,调用所述虚拟USB总线驱动的内部输入输出控制接口,将所述第六IRP发送给所述虚拟USB总线驱动,所述第六IRP中包含所述第六缓冲区的地址;
所述USB设备驱动将所述第六IRP发送给所述虚拟USB总线驱动之后,还包括:
所述虚拟USB总线驱动判断是否有被挂起的第三IRP;
如果是,所述虚拟USB总线驱动从所述第六缓冲区读取USB请求包,将读取到的USB请求包的发送标识置位,设置所述读取到的USB请求包的序列号,将所述第六IRP挂起并保存到内部数据列表中,通过所述内部输入输出控制接口返回挂起状态信息;
否则,所述虚拟USB总线驱动将所述第六IRP挂起并保存到所述内部数据列表中,通过所述内部输入输出控制接口返回挂起状态信息。
9.如权利要求8所述的方法,其特征在于,还包括:
所述USB设备驱动根据第二USB请求生成第五IRP,将所述第五IRP作为参数,调用所述虚拟USB总线驱动的内部输入输出控制接口,将所述第五IRP发送给所述虚拟USB总线驱动,所述第五IRP中包含第五缓冲区的地址;
所述虚拟USB总线驱动判断是否有被挂起的第三IRP;
如果是,所述虚拟USB总线驱动构建USB复位信息,将所述USB复位信息保存到所述第五缓冲区,将完成信息添加到所述第五IRP中,完成所述第五IRP,通过所述内部输入输出控制接口返回完成状态信息;
否则,所述虚拟USB总线驱动将所述第五IRP挂起并保存到所述内部数据列表中,通过所述内部输入输出控制接口返回挂起状态信息。
10.如权利要求9所述的方法,其特征在于,所述主机操作系统将所述第三IRP发送给所述虚拟USB总线驱动之后,还包括:
B1、所述虚拟USB总线驱动判断所述内部数据列表中是否保存有通过所述内部输入输出控制接口获取到的IRP,如果是,则执行步骤B3;否则,执行步骤B2;
B2、所述虚拟USB总线驱动将所述第三IRP挂起,通过所述读总线接口返回挂起状态信息;
B3、所述虚拟USB总线驱动从所述内部数据列表中选择一个未被遍历过的、通过所述内部输入输出控制接口获取到的IRP,对选择的IRP进行判断,如果是第五IRP,则执行步骤B4;如果是第六IRP,则执行步骤B5;
B4、所述虚拟USB总线驱动构建USB复位信息,将所述USB复位信息保存到所述第五缓冲区,将完成信息添加到所述第五IRP中,完成所述第五IRP,通过所述内部输入输出控制接口返回完成状态信息,将所述第五IRP从所述内部数据列表中删除,并执行步骤B6;
B5、所述虚拟USB总线驱动从所述第六缓冲区读取USB请求包,判断读取到的USB请求包的发送标识是否置位,如果是,则执行步骤B6;否则,执行步骤B7;
B6、所述虚拟USB总线驱动判断所述内部数据列表是否包含未被遍历过的、通过所述内部输入输出控制接口获取到的IRP,如果是,则返回步骤B3;否则,返回步骤B2;
B7、所述虚拟USB总线驱动将所述读取到的USB请求包的发送标识置位,设置所述读取到的USB请求包的序列号,将所述读取到的USB请求包转换为所述设备执行请求包,将所述设备执行请求包存储到所述第三缓冲区,将完成信息添加到所述第三IRP中,完成所述第三IRP,通过所述读总线接口返回完成状态信息。
11.如权利要求9所述的方法,其特征在于,所述主机操作系统将所述第四IRP发送给所述虚拟USB总线驱动之后,还包括:
C1、所述虚拟USB总线驱动判断所述内部数据列表中是否保存有通过所述内部输入输出控制接口获取到的IRP,如果是,则执行步骤C3;否则,执行步骤C2;
C2、所述虚拟USB总线驱动将错误信息添加到所述第四IRP中,完成所述第四IRP,通过所述写总线接口返回错误状态信息;
C3、所述虚拟USB总线驱动从所述内部数据列表中选择一个未被遍历过的、通过所述内部输入输出控制接口获取到的IRP,对选择的IRP进行判断,如果是第五IRP,则执行步骤C5;如果是第六IRP,则执行步骤C4;
C4、所述虚拟USB总线驱动读取所述第六缓冲区中的USB请求包,判断读取到的USB请求包的发送标识是否置位,如果是,则执行步骤C6;否则,执行步骤C5;
C5、所述虚拟USB总线驱动判断所述内部数据列表是否包含未被遍历过的、通过所述内部输入输出控制接口获取到的IRP,如果是,则返回步骤C3;否则,返回步骤C2;
C6、所述虚拟USB总线驱动判断所述读取到的USB请求包的序列号是否与从所述第四缓冲区读取到的所述设备执行响应包的序列号相同,如果是,则执行步骤C7;否则,返回步骤C5;
C7、所述虚拟USB总线驱动将所述设备执行响应包转换为USB请求包,将转换得到的USB请求包填充到所述第六缓冲区,将完成信息填充到所述第六IRP中,完成所述第六IRP,通过所述内部输入输出控制接口返回完成状态信息,将所述完成信息填充到所述第四IRP中,完成所述第四IRP,通过所述写总线接口返回完成状态信息。
12.如权利要求8所述的方法,其特征在于,还包括:
所述USB设备驱动根据第三USB请求生成第七IRP,将所述第七IRP作为参数,调用所述虚拟USB总线驱动的内部输入输出控制接口,将所述第七IRP发送给所述虚拟USB总线驱动,所述第七IRP中包含第七缓冲区的地址;
所述USB设备驱动将所述第七IRP发送给所述虚拟USB总线驱动之后,还包括:
所述虚拟USB总线驱动构建USB状态信息,将所述USB状态信息保存到所述第七缓冲区,将完成信息添加到所述第七IRP中,完成所述第七IRP,通过所述内部输入输出控制接口返回完成状态信息。
13.如权利要求1所述的方法,其特征在于,还包括:
所述第一守护程序获取用户输入的列表命令,与所述移动设备建立TCP连接,向所述移动设备发送设备列表获取请求;
所述移动设备中的第二守护程序查询共享设备列表,获取所述共享设备列表中的内容,将所述共享设备列表中的内容作为虚拟USB设备列表返回给所述第一守护程序;
所述第一守护程序显示所述虚拟USB设备列表。
14.如权利要求13所述的方法,其特征在于,所述方法还包括:
D1、所述工具程序等待获取用户输入的命令;
D2、当获取到命令后,所述工具程序对获取到的命令进行判断,如果是设备共享命令,则执行步骤D3;如果是设备释放命令,则执行步骤D6;
D3、所述工具程序判断所述设备共享命令中的设备信息对应的外部设备的状态是否为占用状态,如果是,则执行步骤D4;否则,执行步骤D5;
D4、所述工具程序显示共享失败信息,返回步骤D1;
D5、所述工具程序将所述设备共享命令中的设备信息添加到所述共享设备列表中,将与所述设备共享命令中的设备信息对应的外部设备的状态设置为占用状态,并返回步骤D1;
D6、所述工具程序将所述设备释放命令中的设备信息从所述共享设备列表中删除,将与所述设备共享命令中的设备信息对应的外部设备的状态设置为释放状态,并返回步骤D1。
15.如权利要求14所述的方法,其特征在于,所述工具程序对获取到的命令进行判断之后,还包括:
如果是设备显示命令,所述工具程序获取所有能被共享的、与所述移动设备连接的外部设备的信息,对获取到的外部设备的信息进行显示,并返回步骤D1。
16.一种远程通信系统,其特征在于,包括主机、移动设备和外部设备,所述主机包括第一守护程序、虚拟USB总线驱动、USB设备驱动和主机操作系统,所述移动设备包括第二守护程序和驱动程序;
其中,所述USB设备驱动包括:
第一发送模块,用于向所述虚拟USB总线驱动发送第一USB请求;
第一接收模块,用于接收来自所述虚拟USB总线驱动的执行成功响应;
第一读取模块,用于在所述第一接收模块接收到执行成功响应后,从与所述第一USB请求对应的缓冲区读取所述第二USB请求包;
所述虚拟USB总线驱动包括:
第二接收模块,用于接收来自所述USB设备驱动的所述第一USB请求,以及,通过所述主机操作系统接收来自所述第一守护程序的读请求和写请求;
第二读取模块,用于从与所述第二接收模块接收到的所述第一USB请求对应的缓冲区读取第一USB请求包,以及,从与所述第二接收模块接收到的所述写请求对应的缓冲区读取设备执行响应包;
第一转换模块,用于将所述第二读取模块读取到的所述第一USB请求包转换为设备执行请求包,将所述设备执行请求包存储到与所述读请求对应的缓冲区;以及,将所述第二读取模块读取到的所述设备执行响应包转换为第二USB请求包,将所述第二USB请求包存储到与所述第一USB请求对应的缓冲区;
第二发送模块,用于在所述第一转换模块将所述设备执行请求包存储到与所述读请求对应的缓冲区后,通过所述主机操作系统向所述第一守护程序发送读成功响应;
以及,在所述第一转换模块将所述第二USB请求包存储到与所述第一USB请求对应的缓冲区后,向所述USB设备驱动发送执行成功响应;
所述第一守护程序包括:
第三发送模块,用于通过所述主机操作系统向所述虚拟USB总线驱动发送所述读请求,以及,将第三读取模块读取到的设备执行请求包发送给所述第二守护程序;
第三接收模块,用于接收来自所述主机操作系统的所述读成功响应,以及,接收来自所述第二守护程序的设备执行响应包;
第一生成模块,用于根据所述第三接收模块接收到的所述设备执行响应包生成所述写请求,通过所述主机操作系统将所述设备执行响应包存储到与所述写请求对应的缓冲区,并通过所述主机操作系统向所述虚拟USB总线驱动发送所述写请求;
所述第三读取模块,用于在所述第三接收模块接收到所述读成功响应后,通过所述主机操作系统,从与所述读请求对应的缓冲区读取所述设备执行请求包;
所述第二守护程序,包括:
第四发送模块,用于向所述驱动程序发送第四接收模块接收到的所述设备执行请求包,以及,将所述第四接收模块接收到的设备执行响应包发送给所述第一守护程序;
所述第四接收模块,用于接收来自所述第一守护程序的所述设备执行请求包,以及,接收来自所述驱动程序的设备执行响应包;
所述驱动程序,包括:
第五接收模块,用于接收来自所述第二守护程序的所述设备执行请求包,以及,接收来自所述外部设备的处理结果;
第二转换模块,用于将所述第五接收模块接收到的所述设备执行请求包转换为与所述外部设备匹配的命令;
第二生成模块,用于根据所述第五接收模块接收到的处理结果生成设备执行响应包;
第五发送模块,用于将所述第二转换模块转换得到的命令发送给所述外部设备,以及,将所述第二生成模块生成的所述设备执行响应包发送给所述第二守护程序;
所述外部设备,包括:
第六接收模块,用于接收来自所述驱动程序的命令;
第一处理模块,用于对所述第六接收模块接收到的命令进行处理;
第六发送模块,用于将所述第一处理模块处理得到的处理结果发送给所述驱动程序;
所述移动设备还包括工具程序,所述工具程序用于根据用户输入的命令以及与所述移动设备连接的外部设备的状态,从所有与所述移动设备连接的外部设备中选择共享设备,并将选择出的共享设备添加到共享设备列表中。
17.如权利要求16所述的系统,其特征在于,
所述第三发送模块,还用于通过所述主机操作系统向所述虚拟USB总线驱动发送设备插入请求;
所述第二接收模块,还用于通过所述主机操作系统接收所述设备插入请求;
所述第二读取模块,还用于在所述第二接收模块接收到所述设备插入请求时,创建设备对象,从与所述设备插入请求对应的缓冲区读取虚拟USB设备的数据结构;
所述虚拟USB总线驱动,还包括:
加载模块,用于根据所述第二读取模块读取到的所述虚拟USB设备的数据结构,将所述设备对象构建为USB设备,并将所述USB设备的标识信息添加到内部设备列表中,为所述USB设备加载所述USB设备驱动。
18.如权利要求17所述的系统,其特征在于,与所述设备插入请求对应的缓冲区为系统空间的第一缓冲区;
所述第三发送模块,具体用于将所述虚拟USB总线驱动的句柄、第一控制码和所述虚拟USB设备的数据结构作为参数,调用所述主机操作系统的设备输入输出控制函数;
通过所述主机操作系统将所述虚拟USB设备的数据结构复制到所述第一缓冲区,将所述第一缓冲区的地址和所述第一控制码打包成第一输入/输出请求包IRP,将所述第一IRP作为参数,调用所述虚拟USB总线驱动的设备输入输出控制接口,将所述第一IRP发送给所述虚拟USB总线驱动。
19.如权利要求17所述的系统,其特征在于,
所述第一守护程序,还包括:
第一获取模块,用于获取用户输入的附着命令;
所述第三发送模块,还用于在所述第一获取模块获取到所述附着命令后,与所述移动设备建立TCP连接,向所述移动设备发送设备关联请求;
所述第三接收模块,还用于接收来自所述第二守护程序的虚拟USB设备的数据结构;
所述第一生成模块,还用于根据所述第三接收模块接收到的所述虚拟USB设备的数据结构生成所述设备插入请求;
所述第四接收模块,还用于接收来自所述第一守护程序的所述设备关联请求;
所述第二守护程序,还包括:
第二获取模块,用于根据所述第四接收模块接收到的所述设备关联请求中的总线标识,获取与所述总线标识对应的所述外部设备的数据结构;
所述第四发送模块,还用于将所述第二获取模块获取到的所述外部设备的数据结构作为所述虚拟USB设备的数据结构返回给所述第一守护程序。
20.如权利要求17所述的系统,其特征在于,
所述第三发送模块,还用于通过所述主机操作系统向所述虚拟USB总线驱动发送设备卸载请求;
所述第二接收模块,还用于通过所述主机操作系统接收所述设备卸载请求;
所述第二读取模块,还用于从与所述第二接收模块接收到的所述设备卸载请求对应的缓冲区读取虚拟USB设备的标识信息;
所述虚拟USB总线驱动,还包括:
卸载模块,用于根据所述第二读取模块读取到的所述虚拟USB设备的标识信息,从所述内部设备列表中查找与所述虚拟USB设备的标识信息对应的设备对象,中止与查找到的设备对象相关的输入/输出操作,从所述内部设备列表中删除所述查找到的设备对象的标识信息,并卸载与所述查找到的设备对象对应的所述USB设备驱动。
21.如权利要求20所述的系统,其特征在于,与所述设备卸载请求对应的缓冲区为系统空间的第二缓冲区;
所述第三发送模块,具体用于将所述虚拟USB总线驱动的句柄、第二控制码和所述虚拟USB设备的标识信息作为参数,调用所述主机操作系统的设备输入输出控制函数;
通过所述主机操作系统将所述虚拟USB设备的标识信息复制到所述第二缓冲区,将所述第二缓冲区的地址和所述第二控制码打包成第二IRP,将所述第二IRP作为参数,调用所述虚拟USB总线驱动的设备输入输出控制接口,将所述第二IRP发送给所述虚拟USB总线驱动。
22.如权利要求16所述的系统,其特征在于,与所述读请求对应的缓冲区为系统空间的第三缓冲区,与所述写请求对应的缓冲区为系统空间的第四缓冲区;
所述第三发送模块,具体用于将所述虚拟USB总线驱动的句柄和第一用户缓冲区的地址作为参数,调用所述主机操作系统的读文件函数;
通过所述主机操作系统生成第三IRP,将所述第三IRP作为参数,调用所述虚拟USB总线驱动的读总线接口,将所述第三IRP发送给所述虚拟USB总线驱动,所述第三IRP中包含所述第三缓冲区的地址;
所述第二发送模块,具体用于在所述第一转换模块将所述设备执行请求包存储到与所述读请求对应的缓冲区后,通过所述读总线接口向所述主机操作系统返回完成状态信息;通过所述主机操作系统将所述第三缓冲区中的数据复制到所述第一用户缓冲区,向所述第一守护程序发送读成功响应;
所述第三读取模块,具体用于在所述第三接收模块接收到读成功响应后,从所述第一用户缓冲区读取所述设备执行请求包;
所述第一生成模块,具体用于将所述设备执行响应包存储到第二用户缓冲区,将所述虚拟USB总线驱动的句柄和所述第二用户缓冲区的地址作为参数,调用所述主机操作系统的写文件函数;
通过所述主机操作系统将所述设备执行响应包从所述第二用户缓冲区复制到所述第四缓冲区,将所述第四缓冲区的地址打包成第四IRP,将所述第四IRP作为参数,调用所述虚拟USB总线驱动的写总线接口,将所述第四IRP发送给所述虚拟USB总线驱动;
所述第二接收模块,具体用于接收来自所述USB设备驱动的所述第一USB请求,以及,通过所述主机操作系统接收所述第三IRP和所述第四IRP。
23.如权利要求22所述的系统,其特征在于,与所述第一USB请求对应的缓冲区为系统空间的第六缓冲区;
所述第一发送模块,具体用于根据所述第一USB请求生成第六IRP,将所述第六IRP作为参数,调用所述虚拟USB总线驱动的内部输入输出控制接口,将所述第六IRP发送给所述虚拟USB总线驱动,所述第六IRP中包含所述第六缓冲区的地址;
所述第二接收模块,具体用于接收来自所述USB设备驱动的所述第六IRP;
所述虚拟USB总线驱动,还包括:
第一判断模块,用于在所述第二接收模块接收到所述第六IRP后,判断是否有被挂起的第三IRP;
所述第二读取模块,还用于在所述第一判断模块判断出有被挂起的第三IRP时,从所述第六缓冲区读取USB请求包;
所述虚拟USB总线驱动,还包括:
第一设置模块,用于将所述第二读取模块读取到的USB请求包的发送标识置位,设置所述读取到的USB请求包的序列号,将所述第六IRP挂起并保存到内部数据列表中,通过所述内部输入输出控制接口返回挂起状态信息;
以及,在所述第一判断模块判断出没有被挂起的第三IRP时,将所述第六IRP挂起并保存到所述内部数据列表中,通过所述内部输入输出控制接口返回挂起状态信息。
24.如权利要求23所述的系统,其特征在于,所述USB设备驱动,还包括:
第三生成模块,用于根据第二USB请求生成第五IRP,将所述第五IRP作为参数,调用所述虚拟USB总线驱动的内部输入输出控制接口,将所述第五IRP发送给所述虚拟USB总线驱动,所述第五IRP中包含第五缓冲区的地址;
所述第二接收模块,还用于接收来自所述USB设备驱动的所述第五IRP;
所述第一判断模块,还用于在所述第二接收模块接收到所述第五IRP时,判断是否有被挂起的第三IRP;
所述虚拟USB总线驱动,还包括:
第二设置模块,用于在在所述第一判断模块判断出有被挂起的第三IRP时,构建USB复位信息,将所述USB复位信息保存到所述第五缓冲区,将完成信息添加到所述第五IRP中,完成所述第五IRP,通过所述内部输入输出控制接口返回完成状态信息;
以及,在所述第一判断模块判断出没有被挂起的第三IRP时,将所述第五IRP挂起并保存到所述内部数据列表中,通过所述内部输入输出控制接口返回挂起状态信息。
25.如权利要求24所述的系统,其特征在于,所述虚拟USB总线驱动,还包括:
第二处理模块,用于在所述第二接收模块通过所述主机操作系统接收到所述第三IRP后,执行以下操作:
B1、判断所述内部数据列表中是否保存有通过所述内部输入输出控制接口获取到的IRP,如果是,则执行步骤B3;否则,执行步骤B2;
B2、将所述第三IRP挂起,通过所述读总线接口返回挂起状态信息;
B3、从所述内部数据列表中选择一个未被遍历过的、通过所述内部输入输出控制接口获取到的IRP,对选择的IRP进行判断,如果是第五IRP,则执行步骤B4;如果是第六IRP,则执行步骤B5;
B4、构建USB复位信息,将所述USB复位信息保存到所述第五缓冲区,将完成信息添加到所述第五IRP中,完成所述第五IRP,通过所述内部输入输出控制接口返回完成状态信息,将所述第五IRP从所述内部数据列表中删除,并执行步骤B6;
B5、从所述第六缓冲区读取USB请求包,判断读取到的USB请求包的发送标识是否置位,如果是,则执行步骤B6;否则,执行步骤B7;
B6、判断所述内部数据列表是否包含未被遍历过的、通过所述内部输入输出控制接口获取到的IRP,如果是,则返回步骤B3;否则,返回步骤B2;
B7、将所述读取到的USB请求包的发送标识置位,设置所述读取到的USB请求包的序列号,将所述读取到的USB请求包转换为设备执行请求包,将所述设备执行请求包存储到所述第三缓冲区,将完成信息添加到所述第三IRP中,完成所述第三IRP,通过所述读总线接口返回完成状态信息。
26.如权利要求24所述的系统,其特征在于,所述虚拟USB总线驱动,还包括:
第三处理模块,用于在所述第二接收模块通过所述主机操作系统接收到所述第四IRP后,执行以下操作:
C1、判断所述内部数据列表中是否保存有通过所述内部输入输出控制接口获取到的IRP,如果是,则执行步骤C3;否则,执行步骤C2;
C2、将错误信息添加到所述第四IRP中,完成所述第四IRP,通过所述写总线接口返回错误状态信息;
C3、从所述内部数据列表中选择一个未被遍历过的、通过所述内部输入输出控制接口获取到的IRP,对选择的IRP进行判断,如果是第五IRP,则执行步骤C5;如果是第六IRP,则执行步骤C4;
C4、读取所述第六缓冲区中的USB请求包,判断读取到的USB请求包的发送标识是否置位,如果是,则执行步骤C6;否则,执行步骤C5;
C5、判断所述内部数据列表是否包含未被遍历过的、通过所述内部输入输出控制接口获取到的IRP,如果是,则返回步骤C3;否则,返回步骤C2;
C6、判断所述读取到的USB请求包的序列号是否与从所述第四缓冲区读取到的所述设备执行响应包的序列号相同,如果是,则执行步骤C7;否则,返回步骤C5;
C7、将所述设备执行响应包转换为USB请求包,将转换得到的USB请求包填充到所述第六缓冲区,将完成信息填充到所述第六IRP中,完成所述第六IRP,通过所述内部输入输出控制接口返回完成状态信息,将完成信息填充到所述第四IRP中,完成所述第四IRP,通过所述写总线接口返回完成状态信息。
27.如权利要求23所述的系统,其特征在于,所述USB设备驱动,还包括:
第四生成模块,用于根据第三USB请求生成第七IRP,将所述第七IRP作为参数,调用所述虚拟USB总线驱动的内部输入输出控制接口,将所述第七IRP发送给所述虚拟USB总线驱动,所述第七IRP中包含第七缓冲区的地址;
所述第二接收模块,还用于接收所述第七IRP;
所述虚拟USB总线驱动,还包括:
构建模块,用于在所述第二接收模块接收到所述第七IRP时,构建USB状态信息,将所述USB状态信息保存到所述第七缓冲区,将完成信息添加到所述第七IRP中,完成所述第七IRP,通过所述内部输入输出控制接口返回完成状态信息。
28.如权利要求16所述的系统,其特征在于,所述第一守护程序,还包括:
第三获取模块,用于获取用户输入的列表命令;
所述第三发送模块,还用于在所述第三获取模块获取到所述列表命令后,与所述移动设备建立TCP连接,向所述移动设备发送设备列表获取请求;
所述第三接收模块,还用于接收来自所述第二守护程序的虚拟USB设备列表;
所述第一守护程序,还包括:
第一显示模块,用于显示所述第三接收模块接收到的所述虚拟USB设备列表;
所述第四接收模块,还用于接收来自所述第一守护程序的所述设备列表获取请求;
所述第二守护程序,还包括:
第四获取模块,用于在所述第四接收模块接收到所述设备列表获取请求后,查询共享设备列表,获取所述共享设备列表中的内容;
所述第四发送模块,还用于将所述第四获取模块获取到的所述共享设备列表中的内容作为虚拟USB设备列表返回给所述第一守护程序。
29.如权利要求28所述的系统,其特征在于,所述工具程序包括:
第五获取模块,用于获取用户输入的命令;
第二判断模块,用于对所述第五获取模块获取到的命令进行判断;
第三判断模块,用于在所述第二判断模块判断出所述命令为设备共享命令时,判断所述设备共享命令中的设备信息对应的外部设备的状态是否为占用状态;
第二显示模块,用于在所述第三判断模块判断出所述设备共享命令中的设备信息对应的外部设备的状态为占用状态时,显示共享失败信息;
第三设置模块,用于在所述第三判断模块判断出所述设备共享命令中的设备信息对应的外部设备的状态不是占用状态时,将所述设备共享命令中的设备信息添加到所述共享设备列表中,将与所述设备共享命令中的设备信息对应的外部设备的状态设置为占用状态;
在所述第二判断模块判断出所述命令为设备释放命令时,将所述设备释放命令中的设备信息从所述共享设备列表中删除,将与所述设备共享命令中的设备信息对应的外部设备的状态设置为释放状态。
30.如权利要求29所述的系统,其特征在于,
所述第五获取模块,还用于在所述第二判断模块判断出所述命令为设备显示命令时,获取所有能被共享的、与所述移动设备连接的外部设备的信息;所述第二显示模块,还用于对所述第五获取模块获取到的外部设备的信息进行显示。
CN201410075638.1A 2014-03-04 2014-03-04 一种远程通信方法和系统 Expired - Fee Related CN103823771B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410075638.1A CN103823771B (zh) 2014-03-04 2014-03-04 一种远程通信方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410075638.1A CN103823771B (zh) 2014-03-04 2014-03-04 一种远程通信方法和系统

Publications (2)

Publication Number Publication Date
CN103823771A CN103823771A (zh) 2014-05-28
CN103823771B true CN103823771B (zh) 2017-02-08

Family

ID=50758849

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410075638.1A Expired - Fee Related CN103823771B (zh) 2014-03-04 2014-03-04 一种远程通信方法和系统

Country Status (1)

Country Link
CN (1) CN103823771B (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104484291B (zh) * 2014-11-24 2017-08-25 华为技术有限公司 一种建立设备映射的方法及装置
US9940295B2 (en) * 2015-08-14 2018-04-10 Keyssa, Inc. Extremely high frequency systems and methods of operating the same to establish USB data transport protocols
CN105426732A (zh) * 2015-11-11 2016-03-23 北京市国路安信息技术股份有限公司 一种基于网络的USBKey复用方法及网络远程端
CN105426733A (zh) * 2015-11-11 2016-03-23 北京市国路安信息技术股份有限公司 一种基于网络的USBKey复用方法及系统
US9973638B2 (en) 2016-01-26 2018-05-15 Qsc, Llc Peripheral bus video communication using internet protocol
CN106775833B (zh) * 2016-11-28 2021-03-16 青岛海信移动通信技术股份有限公司 设备驱动程序加载方法、终端及系统
CN107277163B (zh) * 2017-07-21 2020-07-14 奇安信科技集团股份有限公司 一种设备远程映射方法及装置
CN116016726A (zh) * 2023-02-07 2023-04-25 迈普通信技术股份有限公司 一种器件控制方法及分布式系统

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101093448A (zh) * 2006-06-23 2007-12-26 联想(北京)有限公司 一种虚拟机系统及其硬件设备的切换方法
CN102567249A (zh) * 2010-12-20 2012-07-11 联想(北京)有限公司 一种电子设备及其数据传输方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8286195B2 (en) * 2007-10-31 2012-10-09 Microsoft Corporation Controlling hardware across two or more simultaneously running operating systems
TW201033810A (en) * 2009-03-03 2010-09-16 Asustek Comp Inc System for sharing and method for managing hardware apparatus

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101093448A (zh) * 2006-06-23 2007-12-26 联想(北京)有限公司 一种虚拟机系统及其硬件设备的切换方法
CN102567249A (zh) * 2010-12-20 2012-07-11 联想(北京)有限公司 一种电子设备及其数据传输方法

Also Published As

Publication number Publication date
CN103823771A (zh) 2014-05-28

Similar Documents

Publication Publication Date Title
CN103823771B (zh) 一种远程通信方法和系统
CN104978261B (zh) 应用程序的测试方法、装置及系统
CN107003893B (zh) 虚拟机备份方法、备份装置及宿主机
CN101281474B (zh) 打开指定端口usb设备的方法及装置
EP1748616A1 (en) Network-attached storage device having a connection to a local device
CN105488000A (zh) 实现usb设备快速访问的方法和系统
CN105912952A (zh) 一种基于 Linux 的注册表服务系统、方法及金融自助设备
CN109637558A (zh) 内外网间自动光盘摆渡系统与方法
CN103412519A (zh) 远端周边的控制系统、方法及其远端服务器
CN108920725A (zh) 一种对象存储的方法及对象存储网关
CN107111568A (zh) 用于在启用usb 设备时呈现驱动器安装文件的系统和方法
WO2018223253A1 (zh) 一种运动控制卡、运动控制系统、机器人系统及数控机床
US7610321B2 (en) File transfer system, file storage apparatus, method for storing file, and program
CN101321061A (zh) 一种网络计算机双网隔离切换装置和切换方法
CN101437046A (zh) 一种固态硬盘中的数据处理方法、固态硬盘和网络设备
KR20140118436A (ko) 가전 기기 스토리지 가상화 장치 및 방법
CN106372009B (zh) 一种Mac系统中与USB设备通讯的方法及装置
US9013822B2 (en) Creating a single library image from multiple independent tape libraries
CN102339265A (zh) 一种无线通信终端及其驱动方法
CN105391810B (zh) 终端设备接口装置
CN107358131A (zh) 块设备的加密扩容方法、装置和智能终端
CN103559074B (zh) 一种模拟通信插件及其工作方法
CN114020457A (zh) 一种OpenStack部署方法、装置及电子设备
CN201514569U (zh) 一种非标准组态的plc远程控制系统
CN104484292A (zh) 一种适用于串口设备的驱动程序及其工作方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20170208