一种用于windows系统中应用层和驱动层通讯的方法及系统与流程

文档序号:12363209阅读:691来源:国知局
一种用于windows系统中应用层和驱动层通讯的方法及系统与流程

本发明涉及计算机技术领域,特别是涉及一种用于windows系统中应用层和驱动层通讯的方法及系统。



背景技术:

目前,计算机的系统服务功能是由一个或多个处理函数来实现,具体的系统服务调用是应用层经由驱动层调用系统内核中的处理函数,具体的通讯过程中,应用层如果要和驱动层进行通信就必须要使用windows系统中CreateFile函数打开驱动设备对象,然后通过DeviceIoControl API函数和驱动层进行通信,进而调用系统内核中的系统服务描述表所指向的处理函数。而计算机所储存的系统服务描述表及其指向的处理函数的数量受到系统内核的内存容量的限制,且处理函数的调用数量也收到驱动层与系统内核所能创建的线程数量的影响,可能会存在延缓系统服务调用的问题,因此现有的这种通讯方式不能满足现有的应用层和驱动层的通讯需求。



技术实现要素:

本发明的目的在于,提供一种用于windows系统中应用层和驱动层通讯的方法及系统,将系统服务描述表建立在驱动层中,加快了系统服务调用的整体流程,提高了应用层和驱动层的通讯效率。

本发明实现上述目的所采用的技术方案是:

根据本发明的一个方面,提供了一种用于windows系统中应用层和驱动层通讯的方法,包括:在驱动层中建立新的系统服务描述表,以新的系统服务描述表替换系统内核中原有的系统服务描述表;接收应用层的通讯指令,并根据驱动层中的系统服务描述表调用相应的系统服务函数。

进一步的,该方法还包括:在驱动层建立新的系统服务描述表之前,获取原有的系统服务描述表的基本属性和数据内容,其中,基本属性包括系统服务描述表的内存地址和内存容量,数据内容包括系统服务描述表所指向的系统服务表以及系统服务表包含的地址表和参数表;获取原有的系统服务描述表的基本属性和数据内容的过程包括:加载驱动层的驱动入口函数,并利用PsGetVersion函数获取当前操作系统的版本号,并根据操作系统的版本号来获取原有的系统服务描述表的内存地址和内存容量;根据内存地址查找到原有的系统服务描述表,并复制该系统服务描述表所指向的系统服务表以及系统服务表包含的地址表和参数表。

进一步的,在驱动层中建立新的系统服务描述表的过程包括:根据原有的系统服务描述表的内存容量,在驱动层分配不小于内存容量的内存空间,在内存空间中建立新的系统服务描述表,并生成新的系统服务描述表的内存地址,将复制的系统服务表以及系统服务表包含的地址表和参数表拷贝至内存空间中。

进一步的,以新的系统服务描述表替换系统内核中原有的系统服务描述表的过程包括:关闭驱动入口函数占用的CPU的中断功能,将CR0寄存器的WP位清零,修改所述系统内核为允许写入,以驱动层的系统服务描述表及其系统服务表与系统服务函数的指向关系替换系统内核中原有的系统服务描述表及其系统服务表与系统服务函数的指向关系;内存地址替换完成后,将CR0寄存器的WP位设置为1,并恢复之前关闭的所占用CPU的中断功能。

进一步的,该方法还包括:在关闭驱动入口函数占用的CPU的中断功能之前,检测系统中是否存在其它具有线程连接的CPU;若存在,则对其它CPU启用延迟过程调用操作,以阻塞其它的CPU。

进一步的,该方法还包括:将新的系统服务函数和/或系统内核中部分原有的系统服务函数存储于驱动层的内存空间中;建立系统服务表与驱动层中的系统服务函数的指向关系,并在新的系统服务描述表中生成所有系统服务函数的序列号。

进一步的,该方法还包括:应用层根据存储于驱动层中的所述系统服务函数的序列号,检测系统中所安装的CPU是否支持快速系统调用指令,如果不支持,则启用int 2e指令;如果支持,在快速系统调用指令中写入存储于驱动层中的所述系统服务函数的序列号,并设置对应的地址表和参数表。

进一步的,该方法还包括:建立系统服务表与系统内核中的其它系统服务函数的指向关系。

接收应用层的通讯指令,并根据驱动层中的系统服务描述表调用相应的系统服务函数的过程包括:根据通讯指令中所要调用的系统服务函数,依次按照新的系统服务描述表与系统服务表、系统服务表与系统服务函数的指向关系,确定所要调用的系统服务函数的存储位置,若位于驱动层,则应用层直接调用系统服务函数,若位于内核,则应用层通过驱动层调用系统服务函数。

根据本发明的另一方面,还提供了一种通讯系统,包括:创建替换单元,用于在驱动层中建立新的系统服务描述表,以新的系统服务描述表替换系统内核中原有的系统服务描述表;服务接收单元,用于接收应用层的通讯指令,并根据驱动层中的系统服务描述表调用相应的系统服务函数。

本发明采用上述技术方案所具有的技术效果是:

本发明的应用层和驱动层的通讯方法,在驱动层中新建了系统服务描述表,克服了原系统内核的内存限制,扩充了系统服务描述表的可以指向的系统服务函数的数量;同时,新的系统服务描述表中也可以直接储存系统服务函数,并可由应用层直接调用,加快了系统服务的调用速度,提高了系统的处理性能。

附图说明

图1为本发明通讯方法的整体流程图;

图2为本发明获取原有的系统服务描述表的基本属性和数据内容的流程图;

图3为本发明系统服务的指向关系图。

其中,1、应用层;2、驱动层;3、系统内核;4、系统服务描述表;5、系统服务表;6、地址表;7、参数表;8、系统服务函数。

具体实施方式

为清楚的说明本发明中的方案,下面给出优选的实施例并结合附图详细说明。以下的说明本质上仅仅是示例性的而并不是为了限制本公开的应用或用途。应当理解的是,在全部的附图中,对应的附图标记表示相同或对应的部件和特征。

如图1所示,本发明提供了一种用于windows系统中应用层和驱动层通讯的方法,步骤包括:

S101、在驱动层2中建立新的系统服务描述表4,以新的系统服务描述表4替换系统内核3中原有的系统服务描述表;

S102、接收应用层1的通讯指令,并根据驱动层2中的系统服务描述表4调用相应的系统服务函数8。

在驱动层2建立新的系统服务描述表4后,由于依然调用原系统内核3中存储的系统服务函数8,因此要在新的系统服务描述表4中保留原有的系统服务描述表的内容及指向关系,因此本发明在驱动层2建立新的系统服务描述表4之前,需要获取原有的系统服务描述表的基本属性和数据内容,具体的,基本属性包括系统服务描述表4的内存地址和内存容量,数据内容包括系统服务描述表4所指向的系统服务表5以及所述系统服务表5包含的地址表6和参数表7;

在本发明的一个实施例中,如图2所示的流程图,获取原有的系统服务描述表的基本属性和数据内容的过程包括:

S201、加载驱动层2的驱动入口函数;

S202、利用PsGetVersion函数获取当前操作系统的版本号;

S203、根据操作系统的版本号来获取原有的系统服务描述表的内存地址和内存容量;如对于版本5.1的windows XP SP3操作系统,其某一系统服务描述表在系统内核中的内存地址为0x80505450,内存容量为1136字节;

S204、根据内存地址查找到原有的系统服务描述表,复制该系统服务描述表4所指向的系统服务表5以及系统服务表5包含的地址表6和参数表7。

在本发明的一个实施例中,在驱动层2中建立新的系统服务描述表4的过程包括:

根据原有的系统服务描述表的内存容量,在驱动层2分配不小于内存容量的内存空间,在内存空间中建立新的系统服务描述表4,并生成新的系统服务描述表4的内存地址,如实施例中,驱动层中的某一系统服务描述表的内存地址为0x85EC0248,需要说明的是,系统服务描述表在驱动层中的创建位置并不唯一,技术人员可以根据需要预设多个可选的内存地址,待系统服务描述表创建时确定其唯一的内存地址;将复制的系统服务表5以及系统服务表5包含的地址表6和参数表7拷贝至内存空间中。

在本发明的一个实施例中,以新的系统服务描述表4替换系统内核3中原有的系统服务描述表的过程包括:

关闭载驱动层2的驱动入口函数所占用的CPU的中断功能,防止在系统服务描述表4替换过程中因其它线程调用该CPU而中断整个替换过程;将CR0寄存器的WP位清零,从而使所述系统内核3为允许写入的状态,以驱动层2的系统服务描述表4及其系统服务表5与系统服务函数8的指向关系替换系统内核3中原有的系统服务描述表及其系统服务表5与系统服务函数8的指向关系,原有的系统服务描述表可以删除或者继续保留,只是在后期应用层1和驱动层2通讯过程中系统服务函数8不按照原有的系统服务描述表进行查找调用;

内存地址替换完成后,将CR0寄存器的WP位设置为1,系统内核3更改为允许只读的状态;恢复之前关闭的所占用CPU的中断功能,替换过程中所占用的CPU可正常被其它线程所调用。

在本发明的一个实施例中,在关闭载驱动层2的驱动入口函数所占用的CPU的中断功能之前,还要检测系统中是否存在其它具有线程连接的CPU,在替换完成之前,由于其它线程仍是按照原有的系统服务描述表调用系统服务函数8,为了避免影响替换过程,因此如果存在其它具有线程连接的CPU,则对其它CPU启用延迟过程调用操作,以阻塞其它的CPU,在替换完成后,这些线程恢复与CPU的连接并按照新的系统服务描述表4的指向关系继续调用对应的系统服务函数8。

新的系统服务描述表4建立在驱动层2的新划分的内存空间中,可以在该内存空间中将新的系统服务函数8和/或系统内核3中部分原有的系统服务函数8存储于驱动层2的内存空间中;建立系统服务表5与驱动层2中的系统服务函数8的指向关系,并在新的系统服务描述表4中生成所有系统服务函数8的序列号;这样,应用层1可以直接调用存储于驱动层2中的系统服务函数8,而无需按照指向关系从系统内核3中调用,加快了系统的反应速度。

正常情况下,如果驱动层2要向应用层1提供某些功能的话,需要定义好控制码,然后应用层1将所要调用的系统服务对应的控制码和参数传递给驱动层2,驱动程序再根据控制码在系统内核3中找到相应的系统服务函数8进行处理,应用层1要调用“打开文件”和“关闭文件”两个功能,就需要向驱动层2传递CTRL_OPEN_FILE和CTRL_CLOSE_FILE两个控制码,驱动层2按照这两个控制码调用系统内核3中“打开文件”和“关闭文件”的系统处理函数。而在本发明的一个实施例中,可以将打开文件”和“关闭文件”这两个系统处理函数直接存储于驱动层2的内存空间中,这样,应用层1无需传递控制码即可直接从驱动层2中调用这两个系统服务函数8,减少了驱动层2与原有的系统服务表5之间的通讯查找过程,从而提高了系统服务调用的反应速度。

在本发明的一个实施例中,在驱动层2的内存空间中补充入可直接调用的系统服务函数8后,还需要检测CPU是否支持快速调用,具体步骤包括:应用层1根据存储于驱动层2中的系统服务函数8的序列号,检测系统中所安装的CPU是否支持快速系统调用指令,如执行效率较高的YSENTER指令;如果不支持,则启用可被所以CPU通用的int 2e指令;如果支持,在快速系统调用指令中写入存储于驱动层2中的系统服务函数8的序列号,并设置对应的地址表6和参数表7,以方便后期对这些系统服务函数8的直接调用。

在本发明的一个实施例中,如图2所示,新建的系统服务描述表4指向系统服务表5,而系统服务表5则分别指向驱动层2内存空间中的系统服务函数8和系统内核3中的系统服务函数8。实际操作系统中,系统服务描述表4包括常规系统服务描述表4和隐藏式系统服务描述表4,分别对应非GUI用户和GUI用户,本发明的实施例仅以其中一种系统服务描述表4进行说明,对新建和替换的系统服务描述表4的类型和数量不作限定。

驱动层2接收应用层1的通讯指令,并根据驱动层2中的系统服务描述表4调用相应的系统服务函数8的过程包括:根据通讯指令中所要调用的系统服务函数8,依次按照新的系统服务描述表4与系统服务表5、系统服务表5与系统服务函数8的指向关系,如图3所示,确定所要调用的系统服务函数8的存储位置,若系统服务函数8位于驱动层2,则应用层1直接调用系统服务函数8,若系统服务函数8位于内核,则应用层1通过驱动层2调用系统服务函数8。如上述“打开文件”和“关闭文件”实施例中,“打开文件”和“关闭文件”这两个系统服务函数8位于驱动层2中,“复制文件”相关的系统服务函数8位于系统内核3中,则要调用“复制文件”时,则按照新的系统服务描述表4调用指向的系统内核3中的“复制文件”系统服务函数8。

本发明还提供了一种通讯系统,该通讯系统采用上述实施例中的通讯方法,系统具体包括:

创建替换单元,用于在驱动层2中建立新的系统服务描述表4,以新的所述系统服务描述表4替换系统内核3中原有的系统服务描述表;

服务接收单元,用于接收应用层1的通讯指令,并根据驱动层2中的系统服务描述表4调用相应的系统服务函数8。

该通讯系统还包括获取单元,用于在驱动层2建立新的系统服务描述表4之前,获取原有的系统服务描述表的基本属性和数据内容,其中,基本属性包括系统服务描述表4的内存地址和内存容量,数据内容包括系统服务描述表4所指向的系统服务表5以及系统服务表5包含的地址表6和参数表7。

具体的,获取单元用于:加载驱动层2的驱动入口函数,并利用PsGetVersion函数获取当前操作系统的版本号,并根据操作系统的版本号来获取原有的系统服务描述表的内存地址和内存容量;根据内存地址查找到原有的系统服务描述表,并复制该系统服务描述表4所指向的系统服务表5以及系统服务表5包含的地址表6和参数表7。

实施例中,创建替换单元用于:根据原有的系统服务描述表的内存容量,在驱动层2分配不小于内存容量的内存空间,在内存空间中建立新的系统服务描述表4,并生成新的系统服务描述表4的内存地址,将复制的系统服务表5以及系统服务表5包含的地址表6和参数表7拷贝至所述内存空间中。

实施例中,创建替换单元还用于:关闭载驱动层2的驱动入口函数所占用的CPU的中断功能,将CR0寄存器的WP位清零,修改系统内核3为允许写入,以驱动层2的系统服务描述表4及其系统服务表5与系统服务函数8的指向关系替换系统内核3中原有的系统服务描述表及其系统服务表5与系统服务函数8的指向关系;内存地址替换完成后,将CR0寄存器的WP位设置为1,并恢复之前关闭的所占用CPU的中断功能。

实施例中,创建替换单元还用于:在关闭载驱动层2的驱动入口函数所占用的CPU的中断功能之前,检测系统中是否存在其它具有线程连接的CPU;若存在,则对其它CPU启用延迟过程调用操作,以阻塞其他它的CPU。

实施例中,创建替换单元还用于:将新的系统服务函数8和/或系统内核3中部分原有的系统服务函数8存储于驱动层2的内存空间中;建立系统服务表5与驱动层2中的系统服务函数8的指向关系,并在新的所述系统服务描述表4中生成所有系统服务函数8的序列号。

实施例中,创建替换单元还用于:建立系统服务表5与系统内核3中的其它系统服务函数8的指向关系。

该通讯系统还包括检测单元,用于:应用层1根据存储于驱动层2中的所述系统服务函数8的序列号,检测系统中所安装的CPU是否支持快速系统调用指令,如果不支持,则启用int 2e指令;如果支持,在快速系统调用指令中写入存储于驱动层2中的所述系统服务函数8的序列号,并设置对应的地址表6和参数表7。

服务接收单元,用于:根据通讯指令中所要调用的系统服务函数8,依次按照新的系统服务描述表4与所述系统服务表5、系统服务表5与系统服务函数8的指向关系,确定所要调用的系统服务函数8的存储位置,若位于所述驱动层2,则应用层1直接调用系统服务函数8,若位于内核,则应用层1通过驱动层2调用系统服务函数8。

综上所述,以上所述内容仅为本发明的实施例,仅用于说明本发明的原理,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1