本发明专利技术公开了一种虚拟输入设备在驱动层的实现方法及其系统,该方法包括:调用系统应用程序编程接口创建虚拟输入设备,在驱动层上挂载虚拟输入设备;将系统输入设备的函数地址记录到虚拟输入设备的设备扩展结构体中,以使驱动层自动获得系统输入设备的函数地址;获取应用层发送给虚拟输入设备的输入数据结构体;驱动层根据虚拟输入设备中记录的设备扩展结构体,使用所获取的输入数据结构体控制虚拟输入设备的行为。通过本发明专利技术,实现了在软件屏蔽虚拟输入设备消息的情况下控制虚拟输入设备的效果。
【技术实现步骤摘要】
本专利技术涉及计算机领域,尤其涉及一种虚拟输入设备在驱动层的实现方法及其系统。
技术介绍
在Windows 2000系统下,几乎所有的I/O都是包驱动的,每个工作命令描述一个单独的I/o操作,这个命令告诉驱动程序需要做什么,并且通过I/O子系统跟踪请求的进展,这些命令被封装成为输入请求包(Iuput Request Package,简称IRP)的形式,当发出一个I/O系统服务时(比如创建文件或读文件的请求),I/O管理器就会通过构造一个描述此请求的IRP,并将该IRP的一个指针传给设备驱动开始对该请求进行处理。如果OS向I/O管理器和设备驱动完整地描述一个I/O请求,那么IRP中保存的信息就可以达到这个目的。过滤层驱动就是一个拦截到一些已有软件模块的请求的中间层驱动,依靠在请求到达目标前截获请求,过滤驱动就有机会扩展或修改请求的原始接收者所提供的功能或服务。Windows 公开了一些应用程序编程接口(Applicat1n Programming Interface,简称API)函数,通过调用这些API或者发送消息的机制来达到对鼠标和键盘的控制。在一些应用场景中,比如在系统修复自动化项目、软件安装卸载自动化项目、痕迹清理自动化项目等场景下,某些软件为了防止被利用或者非法破解、或者网络游戏出于对控制输入速度的和反外挂的目的,它们会对普通的鼠标和键盘API进行过滤,从而导致从应用层无法操作它们的界面,普通的控制鼠标和键盘的API函数都是无效的。对于上述问题,现有技术中的一种解决方案是通过Win1软件包直接控制鼠标和键盘硬件端口。Win1是一个现在比较流行的第三方库,通过加载一个内核模式的设备驱动程序,利用几种底层编程技巧,使得Windows应用程序可以直接对1/0端口和物理内存进行存取,从而绕过了 Windows系统的保护机制。Win1包含了 3个文件:Win1.dll、Win1.sys和WIN10.VXD,其中WIN10.VXD驱动程序用在Win95/98系统上,Winl0.sys驱动程序用在WinNT/2000/XP系统上,ffinl0.dll提供了功能函数的调用。在Winl0.dll中有两个函数最重要=InitializeWin1用来初始化Win1的驱动程序,必须在调用所有其它功能函数之前调用该函数;ShutdownWin1用来卸载Win1的驱动程序,在中止应用函数之前或者不再需要使用Win1时调用。但是,在使用Win1向鼠标或者键盘发送数据的时候,必须有硬件的支持(电脑上必须插入PS2鼠标);向串口直接读写数据存在效率的问题,而且存在串口数据同步问题。假如I秒内连续发送了 100个数据,可能串口实际响应的只有10个数据,这样就存在同步的问题。WIN1是对物理鼠标直接发送数据,然而在程序发送数据的时候,人为的也可以对物理鼠标或键盘进行操作,这样就有可能导致数据混乱,出现鼠标满屏幕飞的效果或者键入字符错误的效果。综上所述,对于屏蔽控制鼠标或键盘的API函数的情况下导致无法控制或键盘的问题,现有技术中尚未提出有效地解决方案。
技术实现思路
有鉴于屏蔽控制鼠标或键盘的API函数的情况下导致无法控制或键盘的问题而做出本专利技术,为此本专利技术的主要目的在于提供一种虚拟输入设备在驱动层的实现方法及其系统,其中:为解决上述问题,本专利技术提供一种虚拟输入设备在驱动层的实现方法,包括:调用系统应用程序编程接口 API创建虚拟输入设备,在驱动层上挂载所述虚拟输入设备;将系统输入设备的函数地址记录到所述虚拟输入设备的设备扩展结构体中,以使驱动层自动获得系统输入设备的函数地址;获取应用层发送给所述虚拟输入设备的输入数据结构体;所述驱动层根据虚拟输入设备中记录的设备扩展结构体,使用所获取的输入数据结构体控制虚拟输入设备的行为。其中,所述设备扩展结构体,可以包括:系统输入设备的属性、连接系统输入设备的驱动地址、系统输入设备的端口地址、本驱动所处设备栈的位置信息,和/或所挂载设备的地址。其中,所述输入数据结构体,可以包括:键盘的键码、键盘按键行为、鼠标的坐标、鼠标的按键类型、鼠标的点击行为、鼠标滚轮的滚动单位数值、和/或鼠标移动轨迹。其中,所述虚拟输入设备的设备扩展结构体可以在创建所述虚拟输入设备的过程中生成。其中,所述获取应用层发送给所述虚拟输入设备的输入数据结构体的步骤,可以包括:获取应用层发送至驱动层的控制所述虚拟输入设备的输入请求包IRP ;解析所述IRP得到所述虚拟输入设备的输入数据结构体。其中,所述获取应用层发送至驱动层的控制所述虚拟输入设备的IRP的步骤,可以包括:创建控制设备对象⑶O ;利用所述⑶O获取应用层发送至驱动层的控制所述虚拟输入设备的IRP。所述控制虚拟输入设备的行为的步骤,可以包括:通过设备扩展结构体对输入数据结构体进行回调实现控制。本专利技术进而还一种虚拟输入设备在驱动层的实现系统,包括:虚拟输入设备创建模块,用于调用系统应用程序编程接口 API创建虚拟输入设备,在驱动层上挂载所述虚拟输入设备;记录模块,用于将系统输入设备的函数地址记录到所述虚拟输入设备的设备扩展结构体中,以使驱动层自动获得系统输入设备的函数地址;获取模块,用于获取应用层发送给所述虚拟输入设备的输入数据结构体;控制模块,用于所述驱动层根据虚拟输入设备中记录的设备扩展结构体,使用所获取的输入数据结构体控制虚拟输入设备的行为。其中,所述设备扩展结构体,可以包括:系统输入设备的属性、连接系统输入设备的驱动地址、系统输入设备的端口地址、本驱动所处设备栈的位置信息,和/或所挂载设备的地址。其中,所述输入数据结构体,可以包括:键盘的键码、键盘按键行为、鼠标的坐标、鼠标的按键类型、鼠标的点击行为、鼠标滚轮的滚动单位数值、和/或鼠标移动轨迹。其中,所述虚拟输入设备的设备扩展结构体可以在创建所述虚拟输入设备的过程中生成。其中,所述获取模块,可以包括:IRP获取单元,用于获取应用层发送至驱动层的控制所述虚拟输入设备的输入请求包IRP ;解析单元,用于解析所述IRP得到所述虚拟输入设备的输入数据结构体。其中,所述IRP获取单元,创建控制设备对象⑶0,利用所述⑶O获取应用层发送至驱动层的控制所述虚拟输入设备的IRP。其中,所述控制模块,通过设备扩展结构体对输入数据结构体进行回调实现控制。综上所示,根据本专利技术上述技术方案,在软件屏蔽虚拟输入设备消息的情况下也能够控制虚拟输入设备,有效地防止软件的限制,并且具有操作精度高,速度快的特点。【附图说明】此处所说明的附图用来提供对本专利技术的进一步理解,构成本申请的一部分,本专利技术的示意性实施例及其说明用于解释本专利技术,并不构成对本专利技术的不当限定。在附图中:图1是根据本专利技术实施例的虚拟输入设备在驱动层的实现方法的流程图;图2是根据本专利技术实施例的虚拟输入设备在驱动层的实现系统的结构框图;图3是根据本专利技术实施例的虚拟输入设备在驱动层的实现系统的优选结构的框图。【具体实施方式】本专利技术利用应用层发送的程序中自定义IRP,然后驱动该截获此IRP,经过分析该IRP,并利用分析后的结果控制虚拟输入设备,使得对虚拟输入设备的控制可以不受windows API的限制。需要说明,本专利技术中提到的虚拟输入设备包括但不限于以下设备:虚拟鼠标、虚本文档来自技高网...
【技术保护点】
一种虚拟输入设备在驱动层的实现方法,其特征在于,包括:调用系统应用程序编程接口API创建虚拟输入设备,在驱动层上挂载所述虚拟输入设备;将系统输入设备的函数地址记录到所述虚拟输入设备的设备扩展结构体中,以使驱动层自动获得系统输入设备的函数地址;获取应用层发送给所述虚拟输入设备的输入数据结构体;所述驱动层根据虚拟输入设备中记录的设备扩展结构体,使用所获取的输入数据结构体控制虚拟输入设备的行为。
【技术特征摘要】
【专利技术属性】
技术研发人员:张辉,
申请(专利权)人:北京奇虎科技有限公司,奇智软件北京有限公司,
类型:发明
国别省市:北京;11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。