背景技术
[0001] 计算系统可以使用设备驱动程序(“驱动程序”)来控制(多个)设备。设备驱动程序可以用作(多个)设备系统资源(例如,CPU寄存器、系统
存储器寄存器等)的
接口。设备驱动程序可以在特权模式(例如,
内核模式)中执行。在内核模式下,与在非特权模式(例如,使用模式)中执行的代码相比,驱动程序对系统资源的
访问权限更大。有
缺陷或恶意的驱动程序可能会损害计算系统的完整性,从而导致崩溃或数据损坏。
发明内容
[0002] 本文描述了用于驱动程序执行的系统,系统包括:包括处理器和存储器的计算机,存储器具有存储在其上的计算机可执行指令,计算机可执行指令在由处理器执行时使得计算设备:在第一域中加载驱动程序,其中驱动程序控制相关联的设备;响应于来自驱动程序的
请求,在不同于第一域的第二域中加载驱动程序配套(companion),第二域包括安全环境,驱动程序配套与相关联的设备通信;管理驱动程序与驱动程序配套之间的通信;以及响应于来自驱动程序的请求,卸载驱动程序配套。
[0003] 提供本发明内容以简化形式介绍一些概念,这些概念将在下面的具体实施方式中进一步描述。本发明内容既不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
附图说明
[0004] 图1是图示用于驱动程序执行的系统的功能
框图。
[0005] 图2图示了执行驱动程序和相关联的驱动程序配套的一个示例性方法。
[0006] 图3图示了执行驱动程序的一个示例性方法。
[0007] 图4是图示示例性计算系统的功能框图。
具体实施方式
[0008] 现在参考附图来描述与在两个不同的保护域中执行驱动程序代码有关的各种技术,其中贯穿全文,相同的附图标记用于指代相同的元素。在下面的描述中,出于解释的目的,阐述了许多具体细节来提供对一个或多个方面的透彻理解。然而,显而易见的是,可以在没有这些具体细节的情况下实践这些方面。在其他实例中,以框图形式示出了公知的结构和设备,以便于描述一个或多个方面。此外,应当理解,被描述为由某些系统组件执行的功能可以由多个组件执行。类似地,例如,组件可以被配置为执行被描述为由多个组件执行的功能。
[0009] 本公开内容支持执行或被配置为执行与在两个不同保护域中执行驱动程序代码有关的各种动作的各种产品和过程。以下是一个或多个示例性系统和方法。
[0010] 本公开的各方面涉及驱动程序执行的可靠性、性能和/或安全性的技术问题。与解决该问题相关联的技术特征涉及:提供具有在第一域中执行的第一部分和在第二不同域中执行的第二部分的驱动程序;提供促进在驱动程序的第一部分和第二部分之间通信的
操作系统框架以及管理驱动程序的(多个)部分的生存期的框架。因此,这些技术特征的各方面表现出更可靠和/或更安全地执行驱动程序的技术效果。
[0011] 此外,术语“或”旨在表示包括性的“或”而不是排他性的“或”。即,除非另有说明或从上下文中清楚得知,否则短语“X使用A或B”旨在表示任何自然的包括性排列。即,以下任一个情况都满足短语“X使用A或B”:X使用A;X使用B;或X同时使用A和B。此外,除非另有说明或从上下文中清楚得知指向单数形式,否则在本
申请和所附
权利要求书中使用的冠词“一(a)”和“一个(an)”通常应解释为表示“一个或多个”。
[0012] 如本文所使用的,术语“组件”和“系统”及其各种形式(例如,组件、系统、子系统等)旨在指代与计算机有关的实体或者
硬件、硬件和
软件的组合、软件或正在执行的软件。例如,组件可以是但不限于在处理器上运行的
进程、处理器、对象、实例、可执行文件、执行线程、程序和/或计算机。作为图示,在计算机上运行的应用和计算机都可以是组件。一个或多个组件可以驻留在执行的进程和/或线程中,并且组件可以位于一个计算机上和/或分布在两个或多个计算机之间。此外,如本文中所使用的,术语“示例性”旨在表示用作某物的图示或示例,而并非旨在表示偏好。
[0013] 参考图1,图示了用于驱动程序执行的系统100。系统100在两个不同的保护域(例如,用户模式、内核模式、不同的虚拟信任级别、不同的地址空间等)中提供驱动程序代码的执行。
[0014] (多个)驱动程序可以控制相关联的设备。(多个)驱动程序可以与操作系统内核紧密合作,并且在许多情况下,驱动程序由(多个)第三方编写。这样,(多个)驱动程序可以在计算系统的可靠性、性能和/或安全性方面发挥巨大作用。设备驱动程序的某些部分(例如,I/O事务、CPU密集型
算法、安全的
生物特征事务、(多个)加密和/或解密密钥和/或(多个)算法和/或不同域中已存在可重用的代码)对可靠性、性能和安全性更加灵敏。通过在单独的保护域中执行驱动程序代码的这样的部分,在不会使驱动程序复杂化的情况下,系统100促进提高可靠性、性能和/或安全性。
[0015] 通过将驱动程序的各部分拆分为单独的独立驱动程序,和/或通过以可靠性、性能和/或安全性为代价编写单片驱动程序,系统100相对于其他尝试(例如,使得多个独立组件彼此通信)提高了可靠性、性能和/或安全性。
[0016] 使得多个独立组件彼此通信的缺点是增加了复杂性,从而导致更长的开发时间和更高的维护成本。复杂性的形式有例如两个不同且独立组件的状态管理、生存期管理、制定通信协议的需求、由于涉及多个组件而导致的故障调试能
力差等。
[0017] 类似地,将驱动程序拆分为两个独立驱动程序与上述类似,不同之处在于,两个组件均是驱动程序。单个硬件由两个驱动程序本身管理的事实导致更复杂的设计、两个驱动程序之间的同步操作困难以及为同一设备维护单独状态的两个驱动程序之间的同步困难。
[0018] 在两个驱动程序之间存在责任划分,并且每个驱动程序必须管理与其在设备堆栈中的
位置相对应的设备状态。这是麻烦的并且很难使之可靠,因为尽管驱动程序之间存在责任划分,但是每个驱动程序都必须像完整的驱动程序那样编写,并考虑对方的即插即用(PnP)和/或电源状态,然后再与之交互。两个驱动程序彼此通信也不直接,因为它们必须各自发送栈内I/O请求,这也需要与设备的PnP/电源状态同步。
[0019] 系统100包括框架110,框架110包括在第一域内执行的第一框架组件120和在第二域(例如,与第一域不同的域)内执行的第二框架组件130。框架110还包括促进第一框架组件120和第二框架组件130之间的通信的驱动程序管理服务组件140。框架110还包括配套托管进程150,配套托管进程150将与驱动程序170相关联的驱动程序配套160托管。
[0020] 系统100不创建两个完整的驱动程序。相反,在设计时,开发人员可以获取开发人员期望在不同域中运行的驱动程序代码的子集(例如,不同的进程、更高的信任级别等),并使得代码子集作为驱动程序配套160(例如,扩展)运行。在运行时,驱动程序170继续管理设备的即插即用(PnP)和/或电源状态,但是为驱动程序170提供方便地调出相关联的驱动程序配套160来执行由开发人员确定的、将在不同的域中(例如,安全地)执行的(多个)任务的能力。因为存在由单个驱动程序170管理的单个设备状态,所以这是简单得多的解决方案。操作系统的驱动程序框架110(例如, Driver Framework)管理驱动程序配套
160的加载及其生存期。
[0021] 在一个
实施例中,框架100还可以为驱动程序170提供“配套目标”,以用于将“任务”排队供驱动程序配套160处理。该“配套目标”的状态可以与设备状态自动同步。例如,在驱动程序配套160卸载之前,所有请求都可以被排空(drained)。
[0022] 在一个实施例中,内核模式驱动程序170与操作系统(OS)提供的驱动程序框架110交互。该框架110向驱动程序170提供允许驱动程序170方便地管理设备状态的API和/或事件回调。驱动程序170具有驱动程序配套160,框架110基于驱动程序包中
指定的设置,以用户模式在配套托管进程150中自动加载驱动程序配套160。驱动程序170然后使用框架110提供的对象和/或API来与驱动程序配套160交互。在一个实施例中,在设备被移除和/或配套托管进程150崩溃的情况下,框架110自动排空该任务队列。
[0023] 驱动程序管理服务140是可以根据设备的即插即用(PnP)状态,协助框架110管理驱动程序配套托管(多个)进程150的生存期的另一操作系统提供的组件。驱动程序管理服务140还可以用于在发生崩溃的情况下自动重新启动发生故障的托管进程,而不会使得整个系统崩溃(通常是内核模式崩溃)。
[0024] 在一个实施例中,驱动程序170及其相关联的驱动程序配套160两者都使用由同一驱动程序框架110提供的API表面。与内核驱动程序170相比,驱动程序配套160具有其可用的、框架110的子集提供的API,但驱动程序配套160可以像在内核模式下一样使用它们。
[0025] 在一个实施例中,系统100允许将驱动程序代码的子集(例如,驱动程序配套160)与用户模式进程隔离,例如作为增强系统可靠性的方式。在一个实施例中,系统100还允许将驱动程序代码的子集(例如,驱动程序配套160)隔离到不同的安全域(例如,较高的信任级别),例如以保护敏感的用户数据。在一个实施例中,系统100允许驱动程序170经由其用户模式驱动程序配套160访问在内核模式下不可用的服务/应用编程接口(API)。在一个实施例中,驱动程序配套160可以在安全环境中执行并与相关联的设备通信。
[0026] 在一个实施例中,系统100不需要将整个驱动程序移植(ported)为以用户模式运行,而是驱动程序170可以按照内核模式运行,而驱动程序配套160可以按照用户模式运行。驱动程序170与操作系统的一个或多个交互(例如,围绕电源和/或设备状态管理)可以继续驻留在驱动程序170中。
[0027] 在一个实施例中,特定的驱动程序170可以使用操作系统提供的抽象与相关联的驱动程序配套160通信,并且驱动程序170不需要为此而发明驱动程序自己的协议。在一个实施例中,用于与驱动程序配套160交互的抽象和API与驱动程序170的电源状态和即插即用(PnP)状态自动同步。
[0028] 在一个实施例中,由于驱动程序170管理单个设备并且操作系统可以提供(多个)调试扩展来诊断与驱动程序170和相关联的驱动程序配套160(例如,与单个设备通信)之间的通信相关联的(多个)任务队列,因此调试更加容易。在一个实施例中,驱动程序170和相关联的驱动程序配套160针对相同的框架110链接,因此驱动程序170和相关联的驱动程序配套160可以针对相同的API表面编程。
[0029] 系统100例如在与驱动程序170不同的保护域中执行驱动程序配套160,以提高可靠性、性能和/或安全性。在一个实施例中,驱动程序配套160的不同保护域是单独的地址空间。在一个实施例中,驱动程序配套160的不同保护域是单独的安全域(例如,用户模式、虚拟信任级别等)。
[0030] 在一个实施例中,驱动程序170可以通过发送被称为“任务”的定制命令控制消息来与相关联的驱动程序配套160交互。驱动程序配套160可以处理被称为“任务队列”的队列中的这些任务。通过从驱动程序170隔离驱动程序配套160(例如,如果存在,代码和相关联的数据)的执行,从而允许驱动程序配套160处理驱动程序配套160的域中的任务,系统100可以防止对驱动程序配套160的代码的攻击和/或驱动程序配套160的域中的数据
泄漏。
[0031] 例如,对于在内核模式中执行的驱动程序170,驱动程序170可以在用户模式中执行相关联的驱动程序配套160(例如,代码的子集),以避免内核模式异常(例如,可以使整个系统崩溃)。在内核模式中执行的驱动程序170无需整体移动即可在用户模式下运行。
[0032] 在一个实施例中,驱动程序170可以与生物特征测定设备(例如,指纹、虹膜扫描等)相关联。为了保护诸如与用户相关联的
生物特征数据的敏感数据,系统100可以促进驱动程序配套以不同的虚拟信任级别(VTL)执行。例如,与驱动程序170相比,驱动程序配套160可以在更高级别的VTL(例如,“经隔离的用户模式”)中执行,例如以防止在驱动程序170的内核被破坏的情况下,(多个)机密被窃取。
[0033] 图2和图3图示了与在两个不同的保护域中执行驱动程序代码有关的示例性方法。虽然将方法示出并描述为按顺序执行的一系列动作,但是应当理解,方法不受序列顺序的限制。例如,某些动作可以按照与本文所描述的顺序不同的顺序发生。附加地,一个动作可以与另一动作同时发生。此外,在某些情况下,实现本文所描述的方法可能不需要所有动作。
[0034] 此外,本文所描述的动作可以是可以由一个或多个处理器实现和/或存储在一个或多个计算机可读介质上的计算机可执行指令。计算机可执行指令可以包括例程、子例程、程序、执行线程等。更进一步,方法的动作的结果可以被存储在计算机可读介质中、显示在显示设备上等。
[0035] 参考图2,图示了执行驱动程序以及相关联的驱动程序配套的方法200。例如,方法200可以由操作系统的框架110执行。
[0036] 在210处,在第一域(例如,内核模式)中加载驱动程序(例如,驱动程序170)。在一个实施例中,驱动程序控制相关联的设备。在220处,响应于来自驱动程序的请求,在与第一域不同的第二域(例如,用户模式)中加载驱动程序配套(例如,驱动程序配套160)。在一个实施例中,第二域包括安全环境。驱动程序配套与相关联的设备通信。
[0037] 在230处,管理驱动程序与驱动程序配套之间的(多个)通信。在240处,响应于来自驱动程序的请求,驱动程序配套被卸载。
[0038] 转到图3,图示了执行驱动程序300的方法。例如,方法300可以由在第一域中执行的驱动程序170执行。
[0039] 在310处,请求将驱动程序配套加载到不同的域中。在320处,将任务发送到驱动程序配套。在330处,接收任务完成通知。在340处,请求卸载驱动程序配套。
[0040] 本文描述的是用于驱动程序执行的系统。系统包括计算机,计算机包括处理器和具有存储在其上的计算机可执行指令的存储器,当计算机可执行指令由处理器执行时,使得计算设备:在第一域中加载驱动程序,其中驱动程序控制相关联的设备;响应于来自驱动程序的请求,在不同于第一域的第二域中加载驱动程序配套,第二域包括安全环境,驱动程序配套与相关联的设备通信;管理驱动程序与驱动程序配套之间的通信;以及响应于来自驱动程序的请求,卸载驱动程序配套。系统可以包括其中驱动程序在内核模式中执行并且驱动程序配套在用户模式中执行。
[0041] 系统可以进一步包括其中驱动程序以第一虚拟信任级别执行,并且驱动程序配套以第二较高的虚拟信任级别执行。系统可以包括其中驱动程序在第一地址空间中执行并且驱动程序配套在第二不同的地址空间中执行。系统可以进一步包括其中驱动程序配套安全地存储关于计算机用户的生物特征信息。
[0042] 系统可以包括其中驱动程序配套安全地存储加密密钥或解密密钥中的至少一项。系统可以进一步包括其中驱动程序配套安全地执行敏感输入事务或敏感输出事务中的至少一项。系统可以包括其中任务队列促进驱动程序与驱动程序配套之间的通信。
[0043] 系统可以进一步包括其中框架管理与驱动程序配套相关联的生存期。系统可以包括其中驱动程序管理与驱动程序相关联的设备的即插即用(PnP)状态和电源状态。
[0044] 本文描述的是执行驱动程序和相关联的驱动程序配套的方法。方法包括在第一域中加载驱动程序,其中驱动程序控制相关联的设备;响应于来自驱动程序的请求,在不同于第一域的第二域中加载驱动程序配套,第二域包括安全环境,驱动程序配套与相关联的设备通信;管理驱动程序与驱动程序配套之间的通信;以及响应于来自驱动程序的请求,卸载驱动程序配套。
[0045] 方法可以包括其中第一域是内核模式,且第二域是用户模式。方法可以进一步包括其中驱动程序使用驱动程序配套来管理相关联的设备。方法可以进一步包括其中驱动程序在第一地址空间中执行,并且驱动程序配套在第二不同的地址空间中执行。方法可以包括其中驱动程序配套安全地存储关于计算机用户的信息。
[0046] 本文描述了计算机存储介质,计算机存储介质存储计算机可读指令,计算机可读指令在被执行时使得计算设备:在第一域中加载驱动程序,驱动程序控制相关联的设备;响应于来自驱动程序的请求,在不同于第一域的第二域中加载驱动程序配套,第二域包括安全环境,驱动程序配套与相关联的设备通信;管理驱动程序与驱动程序配套之间的通信;以及响应于来自驱动程序的请求,卸载驱动程序配套。计算机存储介质可以进一步包括其中第一域是内核模式且第二域是用户模式。
[0047] 计算机存储介质可以包括其中第一域是第一虚拟信任级别,且第二域是第二较高的虚拟信任级别。计算机存储介质可以进一步包括其中驱动程序在第一地址空间中执行,并且驱动程序配套在第二不同的地址空间中执行。计算机存储介质可以包括其中驱动程序配套安全地存储关于计算机用户的信息。
[0048] 参考图4,图示了示例通用计算机或计算设备402(例如,
移动电话、台式机、膝上型计算机、
平板电脑、
手表、
服务器、手持式设备、可编程消费或工业
电子设备、机顶盒、游戏系统、计算
节点等)。例如,计算设备402可以在用于驱动程序执行的系统100中使用。
[0049] 计算机402包括一个或多个处理器420、存储器430、
系统总线440、(多个)
大容量存储设备450以及一个或多个接口组件470。系统总线440将至少上述系统组成通信地耦合。然而,应理解,计算机402以其最简单的形式可包括耦合到存储器430的一个或多个处理器420,一个或多个处理器420执行存储在存储器430中的各种计算机可执行动作、指令和/或组件。指令可以是例如用于实现被描述为由上述一个或多个组件执行的功能的指令或用于实现上述方法中的一个或多个的指令。
[0050] 可以利用通用处理器、数字
信号处理器(DSP)、专用集成
电路(ASIC)、现场可编程
门阵列(FPGA)或其他可编程逻辑设备、离散门或晶体管逻辑、分立硬件组件或旨在执行本文所述的功能的其任何组合来实现(多个)处理器420。通用处理器可以是
微处理器,但是备选地,处理器可以是任何处理器、
控制器、
微控制器或状态机。(多个)处理器420还可以被实现为计算设备的组合(例如,DSP和微处理器的组合)、多个微处理器、
多核处理器、与DSP核结合的一个或多个微处理器、或者任何其他这样的配置。在一个实施例中,(多个)处理器420可以是图形处理器。
[0051] 计算机402可以包括各种计算机可读介质或与各种计算机可读介质交互,以促进控制计算机402来实现所要求保护的主题的一个或多个方面。计算机可读介质可以是计算机402可以访问的任何可用介质,并且包括易失性和非易失性介质以及可移动和不可移动介质。计算机可读介质可以包括两个不同且互斥的类型(即,计算机存储介质和通信介质)。
[0052] 计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模
块或其他数据的信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括诸如存储器设备(例如,
随机存取存储器(RAM)、
只读存储器(ROM)、
电可擦除可编程只读存储器(EEPROM)等)的存储设备、磁存储设备(例如,
硬盘、
软盘、盒式磁带、磁带等)、光盘(例如,光盘(CD)、数字多功能磁盘(DVD)等)和固态设备(例如,固态驱动(SSD)、闪存驱动(例如,卡、棒、秘钥驱动等))或存储(而不是传输或通信)计算机402可访问的期望信息的任何其他类似的介质。因此,计算机存储介质不包括调制数据信号以及关于通信介质所描述的介质。
[0053] 通信介质在诸如载波或其他传输机制的调制数据信号中体现计算机可读指令、数据结构、程序模块或其他数据,并且包括任何信息传递介质。术语“调制数据信号”是指以将信号中的信息编码的方式来设置或改变其一个或多个特性的信号。作为示例而非限制,通信介质包括诸如有线网络或直接有线连接的有线介质,以及诸如声学、RF、红外和其他无线介质的无线介质。
[0054] 存储器430和(多个)大容量存储设备450是计算机可读存储介质的示例。根据计算设备的确切配置和类型,存储器430可以是易失性的(例如,RAM)、非易失性的(例如,ROM、闪存等)或两者的某个组合。例如,包括诸如在启动期间在计算机402内的元件之间传递信息的基本例程的基本输入/输出系统(BIOS)可以存储在
非易失性存储器中,而易失性存储器可以充当外部高速缓存存储器,以促进(多个)处理器420的处理等。
[0055] 一个或多个大容量存储设备450包括可移动/不可移动、易失性/非易失性计算机存储介质,用于相对于存储器430来存储大量数据。例如,一个或多个大容量存储设备450包括但不限于诸如磁盘或光盘驱动的一个或多个设备、软盘驱动、闪存、固态驱动或记忆棒。
[0056] 存储器430和(多个)大容量存储设备450可以包括或已存储有操作系统460、一个或多个应用462、一个或多个程序模块464以及数据466。操作系统460用于控制和分配计算机402的资源。应用462包括系统和
应用软件中的一个或两者,并且可以借助程序模块464,通过操作系统460来管理资源以及存储在存储器430和/或(多个)大容量存储设备450中的数据,以执行一个或多个动作。因此,应用462可以根据由此提供的逻辑将通用计算机402变成专用机器。
[0057] 可以使用标准编程和/或工程技术来实现所要求保护的主题的全部或部分,以产生软件、
固件、硬件或其任何组合来控制计算机实现所公开的功能。作为示例而非限制,系统100或其部分可以是应用462或形成应用462的一部分,并且包括存储在存储器和/或(多个)大容量存储设备450中、当由一个或多个处理器420执行时,可以实现功能的一个或多个模块464和数据466。
[0058] 根据一个特定实施例,一个或多个处理器420可以对应于片上系统(SOC)或类似架构(包括或换言之,将硬件和软件两者集成在单个集成电路
基板上)。在此,(多个)处理器420可包括一个或多个处理器以及至少类似于(多个)处理器420和存储器430的存储器等。
常规处理器包括最少数量的硬件和软件,并且广泛依赖于外部硬件和软件。相比之下,处理器的SOC实现更为强大,因为它在其中嵌入了硬件和软件,在对外部硬件和软件的依赖程度降到最低或没有的情况下,这些硬件和软件实现了特定功能。例如,系统100和/或相关联的功能可以被嵌入SOC架构中的硬件内。
[0059] 计算机402还包括可通信地耦合到系统总线440并促进与计算机402的交互的一个或多个接口组件470。作为示例,接口组件470可以是端口(例如,串行、并行、PCMCIA、USB、FireWire等)或接口卡(例如,声音、视频等)等。在一个示例实现中,接口组件470可以体现为用户输入/输出接口,以使得用户能够例如通过一个或多个手势或语音输入、通过一个或多个输入设备(例如,
鼠标、
轨迹球、手写笔、
触摸板、
键盘、麦克
风、操纵杆、游戏板、碟形卫星天线、
扫描仪、相机、其他计算机等),将命令和信息输入到计算机402中。在另一示例实现中,接口组件470可以体现为输出外围接口,以将输出提供给显示器(例如,LCD、LED、等离子等)、扬声器、
打印机和/或其他计算机等。更进一步,接口组件470可以体现为网络接口,以使得能够例如通过有线或无线通信链路,与其他计算设备(未示出)通信。
[0060] 上面已描述的内容包括所要求保护的主题的各方面的示例。当然,为了描述所要求保护的主题的目的,不可能描述组件或方法的每个可能的组合,但是本领域的普通技术人员可以认识到,所公开的主题的许多进一步的组合和置换是可能的。因此,所公开的主题旨在涵盖落入所附权利要求的精神和范围内的所有这样的改变、
修改和变化。此外,因为当在权利要求中使用时,“包括(comprising)”被解释为过渡词语,就在详细描述或权利要求中使用术语“包含(includes)”的程度而言,这样的术语旨在以与术语“包括(comprising)”相似的方式包括。