驱动程序填隙的制作方法

文档序号:6365749阅读:177来源:国知局
专利名称:驱动程序填隙的制作方法
驱动程序填隙
背景技术
计算设备可以包括各种不同的硬件设备来扩展计算设备可用的功能。例如,设备可以包括可以在计算设备的机壳内配置的内部设备以及外部设备,诸如打印机、照相机等。通常采用驱动程序来使能在计算设备的操作系统和这些设备之间的通信。然而,操作系统的持续发展可能导致操作系统与驱动程序交互的方式的改变。结果,例如,与以前版本的操作系统兼容的驱动程序可能与更高版本的操作系统不兼容。用于对付这种不兼容性的传统技术包括写入更新版本的驱动程序。虽然这可以恢复设备的功能,但是驱动程序的写入可能涉及到等待直到驱动程序可供传播、涉及到用户定位更新版本的驱动程序等,而这可能导致用户挫败感和丧失生产率
发明内容
描述驱动程序填隙(shimming)技术。在一个或多个实现方式中,针对计算设备的驱动程序所获得的填隙程序(shim)利用哪些接口和回调,进行识别。所识别的接口和回调利用计算设备的填隙程序来包装(wrap),以便对所包装的接口和回调的调用利用填隙程序来拦截。在一个或多个实现方式中,I/O请求分组利用在计算设备上执行的填隙程序来拦截,其涉及与正在该计算设备上执行的驱动程序进行的通信。涉及将与驱动程序兼容的I/O请求分组的数据利用填隙程序来翻译,并且所翻译的数据被发送,以便传送给驱动程序。在一个或多个实现方式中,在计算设备上开始驱动程序的安装,并且识别将要安装的驱动程序。基于此识别,作出填隙程序可用于驱动程序与操作系统通信的确定。获得填隙程序,用于计算设备上的安装,并识别填隙程序所使用的回调。这些回调利用填隙程序来包装,以致对回调的调用利用填隙程序来拦截,并且由计算机设备使用所包装的回调来修改驱动程序的内存映像。提供这个发明内容部分来以简化的形式介绍下面在具体实施方式
部分中进一步描述的概念的选择。这个发明内容部分并不旨在标识所请求保护的主题的关键特征或基本特征,也不旨在用于帮助确定所请求保护的主题的范围。


参考附图来描述详细说明。在附图中,参考数字最左边的(一个或多个)数字标识该参考数字第一次出现在其中的那个图。在说明书和附图的不同实例中使用相同的参考数字可以指示类似的或相同的项。图I是可操作用于执行驱动程序填隙技术的示例实现方式中的环境的说明。图2是显示图I的填隙程序和填隙引擎的传播与使用的示例实现方式中的系统的说明。图3是描述其中驱动程序的识别被用作在驱动程序的安装过程中安装填隙程序的基础的示例实现方式中的程序的流程图。
图4是描述其中填隙程序被安装在计算设备上以促进驱动程序与操作系统的内核以及计算设备的其它驱动程序之间的兼容性的示例实现方式中的程序的流程图。图5是描述其中I/O请求分组(IRP)利用填隙程序来拦截以促进驱动程序兼容性的示例实现方式中的程序的流程图。
具体实施方式
概述
计算设备可以包括(例如,通信耦合到)各种各样的不同设备,以便计算设备可以利用设备的功能。例如,计算设备可以通信耦合到打印机、光盘读写器、拇指驱动器或可以是该计算设备的内部(例如,在机壳内)或外部的其它外围设备。驱动程序可以被利用来使能计算设备和该设备之间的通信,诸如将来自计算设备的操作系统的命令和数据翻译成可被该设备所理解的形式,并且反之亦然。然而,对于操作系统的改变可能引起与驱动程序的不兼容性,并因此引起与该设备的不兼容性,而这可能导致用户挫败感。 描述驱动程序填隙技术,其中填隙程序可以用于与用于设备的驱动程序的兼容性,诸如操作系统的内核与驱动程序之间的兼容性。这种兼容性可以利用填隙程序以各种方式来提供。例如,填隙程序可以用于拦截和翻译在内核和驱动程序之间传送的数据,比如与对于应用编程接口(API)、回调、I/O请求分组(IRP)等的函数调用相关联的数据。这样,操作系统的内核与驱动程序之间的兼容性可以被保持,并从而甚至在操作系统的更新版本的情况下,操作系统仍可以访问该设备的功能。为了促进驱动程序兼容性而获得的填隙程序可以以各种方式来获得。例如,服务提供者可以提供经由网络可访问的服务,其包括利用驱动程序以及用于这些驱动程序的相应填隙程序的问题的识别。因此诸如基于驱动程序的识别,可以提供一个或多个填隙程序,用于与驱动程序一起执行来纠正这些问题。进一步,也可以以填隙程序的形式来提供更新,以纠正所遇到的后续问题。这样,甚至在安装和分发操作系统之后,也可以解决在利用驱动程序装运操作系统之后产生的问题,其进一步的讨论可以相对于图2找到。在下面的讨论中,首先描述可以根据驱动程序填隙技术来加以利用的示例环境。随后描述也可以在该示例环境以及其它环境中采用的示例程序。从而,示例程序的执行并不限于该示例环境,并且该示例环境并不限于执行这些示例程序。示例环境
图I是可操作来采用此处描述的技术的示例实现方式中的环境100的说明。所说明的环境100包括计算设备102,其可以以各种方式来配置。例如,计算设备102可以被配置成便携式游戏设备、移动电话、能够通过网络通信的计算机(例如台式计算机、一个或多个服务器、娱乐设施)、通信耦合到显示设备的机顶盒等。因而,计算设备102的范围可以从具有大量的存储器和处理器资源(例如个人计算机、游戏机)的全资源设备到具有有限的存储器和/或处理资源(例如传统的机顶盒、掌上游戏机)的低资源设备。此外,虽然显示单个计算设备102,但是该计算设备102可以代表多个不同的设备,诸如由商户利用来执行操作的多个服务器、远程控制和机顶盒组合等。计算设备102也可以包括导致该计算设备102的硬件执行操作的实体(例如,软件),例如处理器、功能块等。例如,计算设备102可以包括计算机可读介质,其可以被配置来保持导致该计算设备并且尤其导致该计算设备102的硬件执行操作的指令。因而,这些指令起作用来配置硬件以执行操作,并且这样导致硬件的变换来执行功能。这些指令可以利用计算机可读介质通过各种不同的配置提供给计算设备102。计算机可读介质的一种这样的配置是信号承载介质(signal bearing medium),并因而被配置来诸如经由网络向计算设备的硬件发送指令(例如,作为载波)。该计算机可读介质也可以被配置成计算机可读存储介质并因而不是信号承载介质。计算机可读存储介质的示例包括随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存、硬盘存储器和可以使用磁、光或其它技术来存储指令与其它数据的其它存储设备。计算设备102也可以被说明为包括处理器104和存储器106。处理器并不受形成其的材料或其中所采用的处理机制的限制。例如,处理器可以包括(一个或多个)半导体和/或晶体管(例如,电子集成电路(1C))。在这样的上下文中,处理器可执行指令可以是电子 可执行指令。可选地,处理器的机制或用于处理器的机制并因而计算设备的机制或用于计算设备的机制可以包括但不限于量子计算、光计算、机械计算(例如,使用纳米技术)等。此夕卜,虽然显示单个处理器104和存储器106,但是可以采用各种各样的类型和组合的存储器和/或处理器。计算设备102被说明为也包括具有内核110的操作系统108和一个或多个驱动程序112,其中这一个或多个驱动程序被配置来支持操作系统108的内核110与一个或多个设备114之间的通信。内核110代表操作系统108的组件,其通常被采用来抽象化诸如处理器108、存储器106与其它设备112之类的底层设备的功能至由计算设备102执行的应用(程序)与其它软件。虽然操作系统108和内核110被说明为在处理器104上执行,但是这些模块也可以存储在存储器106中。这些设备112可以代表各种不同的可以被计算设备102采用的设备。例如,这些设备112可以包括外围设备,诸如打印机、扫描仪、硬盘驱动器等。这些设备112也可以代表可以被计算设备102利用的其它计算设备的功能,诸如使用移动电话作为存储设备、访问移动电话上的照片等。因而,计算设备102可以利用各种不同的设备112,以便添加到计算设备102的功能。为了这些设备112与计算设备102通信并且尤其与该计算设备的操作系统108和内核Iio通信,可以采用一个或多个驱动程序114。驱动程序114通常被采用来抽象化相应设备112的功能。例如,驱动程序114可以被配置成一系列的层,以便将来自操作系统108的内核110的命令翻译成各自设备“可理解的”设备专用命令。然而,如前所述,可能具有其中驱动程序114不再与操作系统108的内核110兼容的一些实例。例如,操作系统108可以被更新为更新的版本,应用了服务包等,这可能改变操作系统108被配置来与驱动程序114通信的方式。从而,计算设备102可以采用填隙引擎(shim engine) 116,其代表提供一个或多个填隙程序118来支持驱动程序114与操作系统108的内核110之间的兼容性的功能。填隙程序118例如可以被配置成充当内核110和驱动程序114之间的中介(intermediary)的代码,以便内核110与驱动程序114兼容,并且反之亦然。填隙程序118可以采用各种不同的技术118来支持兼容性,诸如翻译或重定向命令,其进一步的讨论可以相对于图2找到。通常,此处描述的任何功能能够使用软件、固件、硬件(例如,固定逻辑电路)、人工处理来实现,或利用这些实现方式的组合来实现。此处使用的术语“模块”、“引擎”以及“功能”通常代表硬件、软件、固件或其组合。在软件实现的情况下,模块、功能或逻辑代表指令和硬件,其执行硬件例如一个或多个处理器和/或功能块所指定的操作。图2是显示图I的填隙引擎116的示例操作的示例实现方式中的系统200的说明。系统200包括经由网络204与服务提供者202通信耦合的计算设备102。服务提供者202被说明为包括填隙管理器模块206,该填隙管理器模块206代表管理库(r印ository)208以提供用于与驱动程序114 一起使用的填隙程序116的功能。例如,库208可以包括驱动程序标识符210和所识别的驱动程序的相应问题212。这个信息随后在加载驱动程序114时可以用于向计算设备102提供填隙程序。这样,服务提供者202可以提供服务,以便最新的填隙程序可以视需要被传播给计算设备102。计算设备102例如可以启动操作系统108的加载器214来安装驱动程序114,以便操作系统108可以与设备112通信。相应地,诸如通过向填隙管理器模块206传送驱动程 序114的标识符,加载器214可以采用填隙引擎116来确定是否填隙程序118可用于被安装的驱动程序114。填隙管理器模块206随后可以使用驱动程序标识符210来确定驱动程序114是否具有任何问题212,并然后确定是否具有填隙程序116可用于驱动程序114。如果是这样的话,填隙程序118可以被传送到填隙引擎116,以便与驱动程序114 一起安装。也考虑填隙程序118的通信的各种其它示例,诸如通过对于操作系统108 (例如,服务包)的预定更新的部分等。填隙程序118可以被用于以各种方式来促进操作系统108与驱动程序114之间的兼容性。例如,驱动程序114可以通过调用出口接口(例如,API )、声明当在系统中发生某些事件(I/O管理器请求回调)时将调用的回调等等来与计算设备102的组件(例如内核110、其它驱动程序)交互。从而,填隙引擎116可以采用挂钩(hooking),以便导入地址表(IAT)中用于一个或多个应用编程接口的地址利用对应于填隙程序118的地址来替换。填隙程序118也可以被配置来拦截例如在某事件发生时被计算设备102调用的回调。这样,填隙程序118可以拦截对不再兼容的API进行的调用以及来自不再兼容的API的调用并翻译与该调用相关联的数据,以致它是兼容的。在一个这样的示例中,填隙程序118可以翻译该数据来模仿以前版本的操作系统108,以便驱动程序114可以理解该驱动程序所接收的命令。在另一实例中,填隙程序118可以被配置来拦截I/O请求分组(IRP),其中IRP可以用于支持内核110与驱动程序114之间的通信而不牵涉对于API的实际调用。填隙引擎116例如可以修改分派表中所声明的地址,以便I/O请求分组(IRP)可以利用填隙程序118来拦截。填隙程序118随后可以翻译与IRP相关联的数据并转发这个数据,以便利用预期的驱动程序114来接收。虽然这些技术描述驱动程序114与操作系统108的内核110之间的兼容性,但是填隙程序118可以被用于促进与计算设备102的其它驱动程序216的兼容性。因而,填隙引擎116可以被采用来通过将调用和其它通信包装在填隙程序118中来重定向调用和其它通信的执行。虽然分开进行说明,但是实现填隙程序118的代码段可以“居住(live)”在系统组件、驱动程序114等的内部。在一个或多个实现方式中,填隙程序声明用于接口或回调的包装器(wrapper)。如果这样的包装器应用于填隙程序(例如,在运行时),则对于驱动程序的调用或自驱动程序至系统组件的调用通过包装器来处理。因而,填隙程序包装器可以控制接口调用的输入和输出二者,并修改它们以纠正不兼容性。例如,填隙程序118可以被配置为拦截当相应的事件发生在计算设备102中时可能被调用的回调(例如,驱动程序内的功能)。这种技术通常用于支持异步代码。从而,填隙程序118也可以用于包装这样的回调的执行。这样,填隙程序118甚至对于稍后可以以异步方式完成的回调也可以纠正行为。示例程序
下面的讨论描述可以利用以前描述的系统和设备来实现的共享资源访问验证技术。每一个程序的各方面可以以硬件、固件或软件或其组合来实现。这些程序被显示为一组块,其指定由一个或多个设备执行的操作,并且不一定限于利用各自块所示的用于执行这些操作的顺序。在下面讨论的部分中,将参考图I的环境100和图2的系统200。图3描述其中驱动程序的识别被用作用于在驱动程序的安装过程中安装填隙程序的基础的示例实现方式中的程序300。驱动程序在计算设备上的安装被启动(块302)。用户例如可以将设备112连接到计算设备102,其检测可以自动地引起驱动程序114在计算设备102上安装的开始。也考虑各种其它的示例,诸如由计算设备102的用户手动启动该处理。被安装的驱动程序被识别(±夹304),这可以基于驱动程序114自身、对应于驱动程序114的设备112、驱动程序114的功能等等的识别。基于该识别,作出填隙程序是可用的确定(块306)。这个确定可以利用填隙引擎116本地执行,可以牵涉经由网络204与服务提供者202进行的通信等等。随后可以获得填隙程序,用于计算设备上的安装(块308)。继续前面的示例,填隙管理器模块206可以基于驱动程序标识符210来查询库208,以定位与该驱动程序有关的问题和/或直接定位一个或多个填隙程序116。被定位的一个或多个填隙程序116随后可以被传回到计算设备102,以便安装,其进一步的讨论可以相对于下面的附图找到。图4描述其中填隙程序被安装在计算设备上以促进驱动程序与操作系统的内核以及计算设备的其它驱动程序之间的兼容性的示例实现方式中的程序400。针对计算设备的驱动程序所获得的填隙程序利用哪些接口和回调,进行识别(块402)。填隙引擎116例如可以确定哪些API和/或事件声明牵涉正被安装在计算设备102上的填隙程序118。所识别的接口和回调随后利用填隙程序来包装,以便对所包装的接口和回调的调用将利用填隙程序来拦截(块404)。填隙引擎116例如可以替换导入地址表(IAT)、分派表等中的条目,以便驱动程序114和计算设备的其它组件(例如内核110、其它驱动程序216等)之间的通信利用填隙程序118来拦截。这个处理可能牵涉到解析将被包装的接口的地址,其可能是内核中的各种其它驱动程序、类驱动程序等的出口。驱动程序的内存映像利用计算设备来修改(块406),并且驱动程序的加载继续,以便填隙引擎不被再次调用,而且所包装的接口的交互首先利用填隙程序来处理(块408)。因而,填隙引擎116可以被采用来安装填隙程序188作为驱动程序114或计算设备102的其它组件的一部分,但是随后不被进一步牵涉到,以致执行没有被减慢。因此,驱动程序114可以近全速执行,不同之处在于所包装的接口和回调的执行将首先经过在所应用的填隙程 序中声明的包装器。虽然描述单个填隙程序的安装,但是对于多个填隙程序,例如对于驱动程序114的多个识别的问题,可以采用这个处理,这应该是显而易见的。
图5描述其中I/O请求分组(IRP)利用填隙程序来拦截以促进驱动程序114兼容性的示例实现方式中的程序500。I/O请求分组(IRP)利用在计算设备上执行的填隙程序来拦截,其中计算设备涉及与正在该计算设备上执行的驱动程序进行的通信(块502)。IRP例如可以响应于计算设备102上事件的发生而生成。IRP随后可以通过修改分派表、利用填隙程序118来拦截,以便在响应于该事件而传送IRP时将IRP路由传送到填隙程序118而非驱动程序114。通过填隙程序的执行,翻译数据,其涉及将与驱动程序兼容的I/O请求分组(块504)。该数据例如可以是该分组的有效负载、位于IRP中的指针所引用的地址上的数据等等。为了与牵涉驱动程序114的通信、诸如至驱动程序114的通信或自驱动程序114至诸如内核110、其它驱动程序216等等之类的另一组件的通信的兼容性,可以利用填隙程序118来翻译这个数据。所翻译的数据随后可以通过填隙程序的执行来发送,以便诸如通过采用前述的IRP技术而传送至驱动程序(块506),以致原定的驱动程序可以或直接或间接地通过经由另一填隙程序118的通信来接收该数据。如上所述,也考虑各种其它的示例。 结论
虽然以结构特征和/或方法动作特定的语言描述了本发明,但是将明白在所附的权利要求书中定义的发明并不一定限于所述的这些具体的特征或动作。相反,这些具体的特征和动作被披露为实现所请求保护的发明的示例形式。
权利要求
1.ー种方法,包括 识别针对计算设备的驱动程序所获得的填隙程序利用哪些接口和回调(402);以及 利用计算设备的填隙程序来包装所识别的接口和回调,以便对所包装的接口和回调的调用利用填隙程序来拦截(404)。
2.如权利要求I所述的方法,其中所识别的接口和回调的包装配置填隙程序,以修改接ロ调用的输入和输出二者。
3.如权利要求I所述的方法,其中包装包括替换ー个或多个应用编程接ロ的导入地址表(IAT)条目,并将所替换的导入地址表(IAT)条目保存在挂钩表中。
4.如权利要求I所述的方法,其中包装包括替换分派表中的条目,以便与I/O请求分组(IRP)结合使用。
5.如权利要求I所述的方法,其中执行识别和包装的填隙引擎在识别和包装之后并不參与驱动程序的执行。
6.如权利要求I所述的方法,其中所包装的接ロ是应用编程接ロ(API),并且回调涉及由计算设备进行的事件的发生。
7.如权利要求I所述的方法,其中利用填隙程序包装的驱动程序的接口和回调是可执行的,以执行包括以下的操作 经由ー个或多个挂钩,捕捉数据; 翻译数据,以模拟早期版本的操作系统;以及 将翻译的数据传送到驱动程序。
8.如权利要求I所述的方法,进ー步包括经由网络连接从服务提供者获得填隙程序,以响应将安装在计算设备上的驱动程序的识别的传送。
9.ー种方法,包括 利用在计算设备上执行的填隙程序来拦截I/O请求分组,其涉及与正在计算设备上执行的驱动程序进行的通信; 通过填隙程序的执行,翻译数据,其涉及将与驱动程序兼容的I/o请求分组;以及 通过填隙程序的执行来发送所翻译的数据,以便传送给驱动程序。
10.如权利要求9所述的方法,其中使用分派表中的修改条目来执行拦截。
全文摘要
描述驱动程序填隙技术。在一个或多个实现方式中,针对计算设备的驱动程序所获得的填隙程序利用哪些接口和回调,进行识别。所识别的接口和回调利用计算设备的填隙程序来包装,以致于对所包装的接口和回调的调用利用填隙程序来拦截。
文档编号G06F13/20GK102708076SQ20121005477
公开日2012年10月3日 申请日期2012年3月5日 优先权日2011年3月4日
发明者B.贾加尔塞汉, C.E.马蒂楚克, C.G.佩特鲁塔, C.I.卢普, S.C.卡利诺瓦 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1