首页 > 范文大全 > 正文

基于数据过滤的多输入支持原理

开篇:润墨网以专业的文秘视角,为您筛选了一篇基于数据过滤的多输入支持原理范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:本文从驱动级过滤多输入的数据,提供了一种方法用来支持一台计算机的多输入设备的实时运行,如多鼠标、多键盘运行,将此方法实现为多设备输入接口,并使用此接口制作了计算机的多鼠标实时操控过滤驱动,命名为MouFi。

关键词:计算机;多输入设备;原理

中图分类号:TP391.1 文献标识码:A 文章编号:1007-9599 (2012) 10-0000-02

随着团队协作工作和人机交互的进一步发展,支持多人同时操作同一计算机显得十分有意义,使用多个同类输入设备(如多个鼠标)对同一主机进行实时操控,独立完成各项操作互不影响,可使多人同时共享一台电脑的各项资源,特别在电脑紧缺或不方便联网的情况,提高电脑的利用率,并在单机多人游戏领域显示其优势。本文从驱动级过滤多输入的数据,提供了一种方法用来支持一台计算机的多输入设备的实时运行,如多鼠标、多键盘运行,将此方法实现为多设备输入接口,并使用此接口制作了计算机的多鼠标实时操控过滤驱动,命名为MouFi。

主要贡献有以下几个方面:1.本文所提供的内核级信号过滤方法普适于所有人机交互输入设备(human interface devices input)。2.本方法主要用于提供内核级信号过滤接口,在此基础上,可编写多种应用程序实现多输入的用户级应用。3.本文所提供的方法实现接口后,内核运行在系统进程,属于驱动程序级别,更贴近底层,过滤效率高,系统资源占用较少。4.本文所实现的范例系统可以支持2到6部甚至更多鼠标独立工作。

相关工作:目前国内外已有不少支持多输入的软件,但大都存在不足有待改进。TeamPlayer软件支持同一电脑多鼠标、多键盘的操作。但降低了输入设备的灵活性,并不适用于一些高速游戏。且鼠标操作中会有冲突,仅能实现鼠标的分时控制。MultiPointer以软件形式,通过切换当前的操作鼠标为默认指针的方式,支持同一电脑的最多5个鼠标的同时操作。但不同鼠标的同时操作会产生闪烁,并无法支持同时点击,鼠标拖曳操作也会受到其他移动中鼠标的影响。而此类多个输入设备同时控制不同对象的问题则可以通过本文提供的接口编程解决。

系统设计:

相关定义:

IRP(I/O request packets):I/O请求包,内核模式的结构体,Windows驱动模型和Windows NT设备驱动间通过传递此结构体与操作系统进行信息交流。

MOUSE_INPUT_DATA:IRP包中的一个结构体,包含了鼠标输入数据。当鼠标器产生一个中断时,此数据结构中的各参数值将被设置,并包含在IRP中传回操作系统,操作系统根据其数值产生相应消息,插入消息队列等待执行。

相关原理

鼠标工作原理:鼠标设备接入计算机后,操作系统为了获取一次鼠标操作,首先会产生一个鼠标相关的I/O请求包(IRP_MJ_READ(MouClass)),分层级发送到鼠标物理驱动的设备栈,驱动收到此IRP后会一直保持为等待(pending)状态。当鼠标器有动作引发中断时,鼠标物理驱动就会将鼠标事件的相关数据以系统定义的MOUSE_INPUT_DATA数据结构形式填入IRP中,并完成这个IRP,由驱动设备自底向上传送。操作系统获取该鼠标操作,产生Windows消息插入消息队列中,之后立即产生下一个鼠标相关I/O请求包,进入下一轮等待。

鼠标工作驱动设置:Windows操作系统利用mouclass驱动将不同类型(如PS2、USB或触板等)鼠标进行抽象,在系统进程读取鼠标数据的时候,并不对具体端口进行区分。在驱动结构中,每个mouclass驱动中都有若干PointerClass设备,其数量由系统鼠标总数决定,每个PointerClass设备都依附于其独有的鼠标接口设备PointerPort。

鼠标数据过滤方法:指在操作系统获取鼠标操作、产生消息并插入消息队列、供用户程序处理的全过程中,通过特定过滤方法,使得流过的数据经指定处理后传递给上一层。过滤方法主要分为内核级过滤和用户级过滤。内核级过滤是指在分层驱动模型中允许某一驱动构造一个匿名的设备对象,在相应层级接受分层传递的IRP,使得该IRP经该对象的过滤设备驱动程序处理后再继续向上传递。用户级过滤方法主要有消息钩子(Message Hook)等,利用应用程序接口(API)以消息为单位进行过滤,在用户程序处理之前对该消息进行指定处理。比较实现方式原理可知,内核级过滤方法更高效并具有更强的可靠性。

实现方法:

为了高效的支持多输入设备的运行并简化用户级程序的操作,本方法采取内核级过滤方式对设备的输入数据进行过滤修改继续上传,并根据过滤获得的鼠标事件真实数据进行模拟操作,创建了WDM式过滤驱动MouFi。

过滤驱动的初始化

计算机启动后,操作系统载入系统驱动时由DriverEntry入口进入该过滤驱动程序,将其载入系统,设置在接口驱动及鼠标类驱动之间,过滤驱动MouFi创建主设备(MainDevice)及其符号链接,并初始化各种状态变量。在计算机运行过程中,若有新的鼠标器设备接入主机,过滤驱动MouFi使用AddDevice在该鼠标类设备PointerClass及其对应端口类设备PointerPort之间创建过滤设备,逻辑上插入了二者之间,接受和发送IRP,此后过滤驱动MouFi主要进行以下两方面的操作。

数据过滤

1.各鼠标器设备下层对应设置的过滤设备接收下级端口驱动设备对象上传的IRP,将IRP鼠标数据传递到主设备,将包中MOUSE_INPUT_DATA数据放入主设备缓冲区等待用户程序调用,并根据IRP中的MOUSE_INPUT_DATA数据结构的硬件编号将原IRP包中MOUSE_INPUT_DATA的对应鼠标实例的位置信息、操作信息等全部项清零。

2.将清零后的IRP包向上传递到鼠标器驱动设备对象PointerClass进行进一步处理。操作系统接收返回的IRP,分析清零后的MOUSE_INPUT_DATA产生无效果的Windows消息,随即产生下次IRP操作。