发明内容
本发明克服现有技术存在的不足,所要解决的技术问题为:提供一种能在远端读取本地外设的外部设备的远端共享***。
为了解决上述技术问题,本发明采用的技术方案为:一种外部设备的远端共享***,包括用于***外部设备的服务端和用于分享外部设备的客户端,所述服务端包括:过滤驱动:用于实现外部设备与服务端APP(112)之间的数据交互;服务端APP:用于实现服务端和客户端之间的数据交互;所述客户端包括:客户端APP:与服务端APP通信连接,用于实现服务端和客户端之间的数据交互;虚拟主机控制器:用于实现客户端APP与客户端操作***之间的数据交互。
优选地,所述过滤驱动包括:监控模块:用于监控外部设备的插拔动作;第一通讯模块:用于当有外部设备***时,将***信号通过所述服务端APP传递给所述客户端APP,接收所述客户端APP传送给所述服务端APP的客户端操作***决定读写信号和读写命令,将上述决定读写信号和读写命令传送给第一处理模块,将第一处理模块返回的外部设备的设备信息和设备数据通过所述服务端APP传递给所述客户端APP;第一处理模块:用于当接收到决定读写信号后对外部设备进行拦截、并读取外部设备的设备信息,当接收到读写命令后读取外部设备的设备数据,将上述设备信息和设备数据回传给所述第一通讯模块。
优选地,所述过滤驱动还包括:第一***模块:用于将所述过滤驱动***所述服务端的驱动程序栈中。
优选地,所述虚拟主机控制器包括:第二通讯模块:用于接收所述客户端APP传送来的外部设备***信号,将该***信号传递给客户端操作***,将所述客户端操作***的决定读写信号和读写命令发送给所述客户端APP,接收所述客户端APP传送来的外部设备的设备信息和设备数据,将上述设备信息和设备数据发送给第二处理模块;第二处理模块:用于接收到外部设备的设备信息后,建立与外部设备一一对应的虚拟设备,接收到外部设备的设备数据后,将该设备数据发送给客户端操作***。
优选地,所述第二处理模块包括:接收单元:用于接收外部设备的设备信息和设备数据;设备列表存储单元:用于存储设备列表;刷新单元:用于接收到外部设备的设备信息后,刷新所述设备列表,建立与外部设备一一对应的虚拟设备;发送单元:用于将外部设备的设备数据发送给客户端操作***。
本发明与现有技术相比具有以下有益效果:本发明中的***从功能上可分为两部分,服务端和客户端,通过服务端的过滤驱动和客户端的虚拟主机控制器将服务端的外部设部映射为客户端的虚拟设备,在客户端的操作***就像使用本地设备一样使用远程的外部设备。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例;基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例一提供的一种外部设备的远端共享***的结构示意图,入土1所示,一种外部设备的远端共享***,包括用于***外部设备的服务端11和用于分享外部设备的客户端12。
所述服务端11包括:
过滤驱动111:用于实现外部设备与服务端APP112之间的数据交互。
服务端APP112:用于实现服务端11和客户端12之间的数据交互。
所述客户端12包括:
客户端APP121:与服务端APP112通信连接,用于实现服务端11和客户端12之间的数据交互。
虚拟主机控制器122:用于实现客户端APP121与客户端操作***之间的数据交互。
进一步地,所述过滤驱动111包括:
监控模块1111:用于监控外部设备的插拔动作。
第一通讯模块1112:用于当有外部设备***时,将***信号通过所述服务端APP112传递给所述客户端APP121,接收所述客户端APP121传送给所述服务端APP112的客户端操作***决定读写信号和读写命令,将上述决定读写信号和读写命令传送给第一处理模块1113,将第一处理模块1113返回的外部设备的设备信息和设备数据通过所述服务端APP112传递给所述客户端APP121。
第一处理模块1113:用于当接收到决定读写信号后对外部设备进行拦截、并读取外部设备的设备信息,当接收到读写命令后读取外部设备的设备数据,将上述设备信息和设备数据回传给所述第一通讯模块1112。
进一步地,所述过滤驱动111还包括:
第一***模块1114:用于将所述过滤驱动111***所述服务端11的驱动程序栈中。
进一步地,所述虚拟主机控制器122包括:
第二通讯模块1221:用于接收所述客户端APP121传送来的外部设备***信号,将该***信号传递给客户端操作***,将所述客户端操作***的决定读写信号和读写命令发送给所述客户端APP121,接收所述客户端APP121传送来的外部设备的设备信息和设备数据,将上述设备信息和设备数据发送给第二处理模块1222。
第二处理模块1222:用于接收到外部设备的设备信息后,建立与外部设备一一对应的虚拟设备,接收到外部设备的设备数据后,将该设备数据发送给客户端操作***。
进一步地,所述第二处理模块1222包括:
接收单元12221:用于接收外部设备的设备信息和设备数据。
设备列表存储单元12222:用于存储设备列表。
刷新单元12223:用于接收到外部设备的设备信息后,刷新所述设备列表,建立与外部设备一一对应的虚拟设备。
发送单元12224:用于将外部设备的设备数据发送给客户端操作***。
图2为本发明实施例一提供的一种外部设备的远端共享方法的流程示意图,如图2所示,一种外部设备的远端共享方法,包括以下步骤:
S101、过滤驱动111实时监控外部设备是否***服务端11。
S102、如是,过滤驱动111通知客户端操作***。
S103、客户端操作***决定是否读取外部设备。
S104、如是,客户端操作***将决定信号通知过滤驱动111。
S105、过滤驱动111拦截外部设备,并读取外部设备的设备信息。
S106、过滤驱动111将设备信息发送给虚拟主机控制器122。
S107、虚拟主机控制器122建立虚拟设备。
S108、客户端操作***通过虚拟主机控制器122给过滤驱动111发送读取外部设备数据的命令。
S109、过滤驱动111读取外部设备的设备数据,并回传给虚拟主机控制器122。
S110、客户端操作***完成外部设备的数据读取。
进一步地,步骤S101之前,还包括步骤:
在服务端11的驱动程序栈中***过滤驱动111,在客户端12的驱动栈中***虚拟主机控制器122。
将服务端APP112和客户端APP121通过网络进行连接。
具体地,所述将服务端APP112和客户端APP121通过网络进行连接,实质上是一个安全认证的流程,具体为:对服务端11的证书进行检验,客户端12对证书进行认证的一个过程,以使客户端12可以对服务端11的外部设备进行访问。
更具体地,所述安全认证的流程为:服务器提供证书给客户端12,客户端12进行安全校验,确认证书的有效,并从证书中取得公开密钥,然后生成一对对话用的密钥,并将其中公开密钥,用服务器提供的公开密钥加密后传给服务器,服务器收到解密后,用于下面对话的加密,这样每次会话密钥均不同,安全性较高。然后客户端12提供用户名密码给服务器,对客户端12的身份进行认证。
进一步地,步骤S102具体包括:当过滤驱动111监控到有外部设备***服务端11,服务端操作***先给外部设备安装过滤驱动111,过滤驱动111将***信号通过服务端APP112传递给客户端APP121,客户端APP121传递给虚拟主机控制器122,虚拟主机控制器122最后传递给客户端操作***。
进一步地,步骤S104具体包括:客户端操作***决定读取外部设备后,将决定读写信号发送给虚拟主机控制器122,虚拟主机控制器122发送给客户端APP121,客户端APP121发送给服务端APP112,服务端APP112发送给过滤驱动111。
进一步地,步骤S106具体包括:过滤驱动111读取外部设备的设备信息后,将该设备信息发送给服务端APP112,服务端APP112发送给客户端APP121,客户端APP121发送给虚拟主机控制器122。
进一步地,步骤S107具体包括:虚拟主机控制器122接收到外部设备的设备信息后,刷新所述设备列表,建立与外部设备一一对应的虚拟设备,客户端操作***给该虚拟设备安装一个驱动。
进一步地,步骤S108具体包括:客户端操作***将读取外部设备数据的命令发送给虚拟主机控制器122,虚拟主机控制器122一边将读写命令挂起来,一边将读写命令通过客户端APP121传递给服务端APP112,服务端APP112又传递给过滤驱动111。
具体地,本步骤中的读写命令可为Irp请求,虚拟主机控制器122接到IRP请求后先挂起IRP请求,取得IRP请求的类型和数据后,转化为能通过网络传输的iusb协议发送给服务端11。
进一步地,步骤S109具体包括:过滤驱动111收到读写命令后,读取外部设备的设备数据,依次通过服务端APP112、客户端APP121并,回传给虚拟主机控制器122,虚拟主机控制器122收到设备数据后完成IRP请求,将完成后的IRP请求回传给客户端操作***。
本实施例中的外部设备可为USB设备。
本实施例通过扩展可以用于多种总线设备的网络共享,例如串口(RS232总线)、并口、SCSI总线设备等。
本实施例中,要实现将远端外部设备映射到本地,就要将操作***的URB(即USB请求块)传送到网络上,本***先将URB包转化为iusb协议包,以隔离不同平台实现,经过SSL协议加密,以保证数据的安全性,然后封装为IP包,通过网络发送给客户端,客户端收到数据后,经过解密,得到iusb数据包,再传给具体外部设备。iusb协议是usb协议的扩展,用于网络传送usb协议数据,可以有效地隔离操作***平台的不同实现,实现不同平台(如linux和windows)、32位和64位***之间的usb设备共享。
本实施例中,服务端11和客户端12之间的通信是通过TCP连接来保证数据的完整性,同时iusb协议本身提供一些头尾MagicNumber验证,windows平台的服务端11通过在驱动栈中***过滤驱动,linux平台的服务端11通过增加一个设备驱动,将自己的usb设备映射到客户端12,而客户端12则增加一个虚拟的主机控制器(VHCI)驱动,来完成虚拟设备,USB命令包的发送和反馈处理,其他无需改动。
当应用程序对设备要进行I/O访问时,USB设备驱动将I/O请求转换为一系列USB命令,然后将以URB的形式提交给USB CORE。对一种USB传输类型,USB只使用一个USB地址、一个端点地址来和设备通信。USB设备驱动不和硬件寄存器打交道,不会和USB主机控制器之际交互。USB CORE提供了一层对底层硬件的抽象,不管主机控制器是EHCI还是UHCI,USB CORE为其上层USB设备驱动提供`统一的接口URB,它是USB命令进行封装的数据结构。URB的生命周期如下:1、由USB设备驱动创建;2、分配给指定USB地址的指定端点;3、由设备驱动提交给USB core;4、提交给USB主机控制器;5、经主机控制器处理,传递给USB物理设备;6、URB处理完成后,USB主机控制器会通知USB设备驱动,此时URB结构中的complete回调函数被调用。USB主机控制器接受URB请求包再分割成更小、被称为TD的数据包,TD对应于USB microframe。具体的I/O操作由主机控制器完成。
在客户端不改动USB上层的设备驱动,在驱动底层增加一个虚拟的USB主机控制器(virtual USB host controller),该虚拟的主机控制器对应一个虚拟的主机控制器接口(VHCI),该VHCI没有HCD物理硬件,只负责发送和监听网络上传送的IP包,这些IP包封装有加密后iusb请求,通过IP封装和解析,远端USB请求包被映射到VHCI上来,在客户的应用层看到的就是远端USB设备似乎就插在本地的主机控制器上,只不过这个主机控制器是客户虚拟出来的。VHCI的作用和物理上的主机控制器地位一样,处于驱动的最底层,负责与设备直接通信,比如USB枚举过程的设备请求命令(GET_DESCRIPTOR等)都是主机控制器之间送出去的。同样VHCI也要完成这些工作,只不过这些命令是通过网络发送出去的,除了发送VHCI还应该接受命令的返回结果,以及远端设备***时的网络连接命令。
本实施例中,客户端12连接上服务端11后,查询服务端11的可共享USB列表,供用户选择,同时接收服务端11的usb设备插拔事件,随时更新usb设备列表。一旦客户重定向某usb设备,建立新的连接,然后在新TCP连接中通知服务端11重定向usb设备,此新的TCP连接专为该USB设备服务。同时根据服务端11返回的usb设备信息,在客户端12通知USBBus驱动虚拟出相应USB设备,***负责为该虚拟设备安装驱动,此时用户可以使用该设备了,用户对该设备的所以操作都转化为IRP请求,被USBBus驱动拦截,通过ReadFile读USBBus设备,从IRP中取得URB数据,然后发给服务端11,等待服务端11返回处理结果,并同通过WriteFile写入USBBus设备,USBBus驱动将得到的数据填入IRP,并完成IRP,这样用户就能够像使用本地的usb设备一样,使用服务端的共享USB设备了。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。