CN1627258A - 内核模式填补的驱动程序专用上下文 - Google Patents
内核模式填补的驱动程序专用上下文 Download PDFInfo
- Publication number
- CN1627258A CN1627258A CNA2004100958106A CN200410095810A CN1627258A CN 1627258 A CN1627258 A CN 1627258A CN A2004100958106 A CNA2004100958106 A CN A2004100958106A CN 200410095810 A CN200410095810 A CN 200410095810A CN 1627258 A CN1627258 A CN 1627258A
- Authority
- CN
- China
- Prior art keywords
- driver
- assembly
- filling
- fill
- component
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4411—Configuring for operating with peripheral devices; Loading of device drivers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
- G06F9/4484—Executing subprograms
- G06F9/4486—Formation of subprogram jump address
Abstract
揭示了一种内核模式填补系统和方法。该内核是一共享环境。因此,许多不同的内核模式驱动程序使用由该内核提供的服务。此外,当必须填补驱动程序时,期望支持具有类似的问题或难题的驱动程序之间的填补重使用,而非为每一驱动程序生成定制的填补。为方便内核模式填补和填补重使用,需要检索并维护上下文信息,使得填补可标识特定的驱动程序调用并保存驱动程序专用链接信息。本发明通过采用一种客户机或驱动程序调用与共享填补之间的中间结构-上下文组件,来向该填补提供上下文信息。本发明也提供了一种用驱动程序专用上下文信息实现并支持内核模式填补的系统。
Description
技术领域
本发明一般涉及计算机,尤其涉及填补(shim)内核模式驱动程序的系统和方法。
背景技术
填补(shimming)是一种允许在应用编程接口(API)客户(如,应用程序,驱动程序)和API服务器(如,由操作系统提供)之间插入额外功能的技术。一API客户应用程序可被写成使用提供某些较佳描述的功能的外部提供的服务(API)的集合。这些API服务驻留在客户程序外部,如包含在动态链接库(DLL)中。
外部API服务提供的一个主要的好处是能够构建客户应用程序,而无需在客户应用程序中直接包括API服务代码。具体地,这一模式提供了一种应用程序用于声明其对特定API服务的使用,而将到该API的绑定推迟到该应用程序实际被加载用于执行的方法。这允许应用程序代码与API服务代码分离,并允许构造应用程序运行时环境的模块性。外部API服务被认为是“导入”到客户应用程序中,并具有对应用程序的“加载时绑定”。因此,应用程序声明其使用导入的API服务的意图,并且作为响应,编译程序可在应用程序导入地址表(IAT)中隐含地生成“占位程序(stub)”条目。包含导入占位程序的IAT可由编译程序生成。这些IAT占位程序标识导入API的名称以及对应于该API的外部服务或DLL。当应用程序被加载或准备好执行时,将执行加载时绑定,并且将更新IAT占位程序以引用正确的API服务。
图1示出了用于链接应用程序110和API服务提供者120的常规系统100。应用程序110包括代码段112和IAT 114。在代码段112中,有导入过程的调用,此处为Foo。IAT 114包含到API服务提供者120中Foo过程的地址的指针。常规的用户模式应用程序填补技术基于操纵IAT表条目以实现功能插入。这可通过改变应用程序的IAT中导入的API条目使其指向填补代码而非原始API服务代码来实现。
图2示出了在应用程序110和API服务提供者120之间的填补130的常规的用户模式使用。填补130可被写成向API服务提供“增值”好处,或者它可完全替代API服务功能并从不调用原始的API服务提供者120。用户模式应用程序运行在本质上由该应用程序拥有的进程中。因此,进程中仅有一个客户,即该应用程序。对于执行内核模式的驱动程序的系统进程却并非如此。在系统进程中,API服务提供者,如操作系统内核,由多个不同且基本上唯一的驱动程序调用。
简要地转向图3,示出了示例性系统驱动程序交互。驱动程序X具有代码312,它使用IAT 314以导入或链接到操作系统内核330中的Foo过程332。驱动程序Y320具有代码322,它采用IAT 324以导入或链接到系统内核330中的VerifierFoo过程334,该过程然后调用同样在内核330中的Foo过程332。这两个驱动程序都被写成调用Foo过程或API 332,但是驱动程序X的链接不同于驱动程序Y的链接。驱动程序Y令其Foo导入由填补中的构建,即VerifierFoo来填补,而驱动程序X直接链接到内核中的原始Foo API。
填补开发者的一个重要的目标是可重复使用性。由此,一个较佳的填补框架应当在可能时支持填补的重复使用。例如,如果创建了提供某一扩展的服务或修补的填补,并期望该填补可应用到表达该问题的所有应用程序,则填补是正确设计的。例如,如果填补X修补了问题X,并且应用程序A、B和C具有问题X,则期望令填补X能够修补应用程序A、B和C,而无需对填补X的任何改变。然而,到目前为止,提供这样一个公用的填补是不可能的,这部分是由于不同的驱动程序通常具有不同的链接配置,如上述驱动程序X和驱动程序Y。此外,常规的用户模式填补和填补系统只能保留一个链接配置,即最近的链接配置,而与先前填补的驱动程序相关联的其它链接配置都被丢失。使该问题进一步复杂化的是用于导入的API或服务的现有基础结构无法容易地提供关于驱动程序所使用的API或服务的上下文信息。
因此,本领域需要一种能确定并维护对要填补的每一应用程序或驱动程序唯一的多个链接配置、上下文的填补系统和方法。
发明内容
下文提出了本发明的简化概述,以提供对本发明的某些方面的基本理解。本概述并非本发明的广泛综述。它并不意味着标识本发明的关键/决定性元素,或描绘本发明的范围。其唯一的目的是以简化的形式提出本发明的某些概念,作为对后文提出的更详细描述的序言。
本发明揭示了一种用于建立并维护对驱动程序唯一的上下文信息的系统和方法,使得公用填补可用于提供与多个驱动程序或其它类似的应用程序相关联某一服务或修补与其相关联的特定问题。通过一驻留在驱动程序和填补组件之间的中间上下文组件将唯一的上下文形式注入到填补系统中。上下文组件包括一挂钩组件和一形实替换程序(thunk)组件。挂钩组件储存关于由驱动程序应用的内核过程的上下文信息,并将驱动程序重定向到上下文组件。形实替换程序组件将上下文组件链接到填补组件,并向填补组件提供对驱动程序唯一的上下文信息。填补然后可执行其功能,并随后链接或跳跃到最初由驱动程序引用的内核过程或服务。
依照本发明的另一方面,揭示了一种实现并支持对驱动程序唯一的上下文信息的填补系统。更具体地,该系统包括一接收指示驱动程序何时被加载的通知信号的填补引擎组件。在接收信号之后,填补引擎可查询填补数据库,以确定是否有任何填补组件或填补包与该加载的驱动程序相关联。之后,填补引擎可加载任何关联的填补组件,并生成或加载与所加载的驱动程序关联的上下文组件。另外,本发明所揭示的填补系统可包括一诊断组件,它监控系统,并在系统崩溃时或检测到不稳定性或低效率时,查询填补数据库以确定是否有填补组件可用,当应用该填补组件时,能够修补或补偿导致崩溃、不稳定性或低效率的问题。此外,依照本发明的一个方面的填补系统可采用一接口组件以方便用户或开发者开发、展开并管理填补组件和包。
为实现上述和相关的目的,此处结合以下描述和附图揭示了本发明的某些说明性方面。这些方面表明了可实践本发明的各种方法,所有这些方法都由本发明所覆盖。当结合附图考虑以下本发明的详细描述时,可以清楚本发明的其它优点和新特征。
附图说明
当阅读以下详细描述以及此后简要描述的附图时,可以清楚本发明的上述和其它方面。
图1是用于将应用程序链接到应用程序服务提供者的系统的框图。
图2所示是常规填补系统的框图。
图3所示是用于与系统内核交互的系统的框图。
图4所示是依照本发明的一个方面的内核模式驱动程序填补系统的框图。
图5所示是依照本发明的一个方面的驱动程序组件的框图。
图6所示是依照本发明的一个方面的上下文组件的框图。
图7所示是依照本发明的一个方面的上下文组件的示例性使用的框图。
图8所示是依照本发明的一个方面用于内核模式驱动程序填补的系统的框图。
图9所示是依照本发明的一个方面填补内核模式驱动程序的方法的流程图。
图10所示是依照本发明的一个方面填补内核模式驱动程序的方法的流程图。
图11所示是依照本发明的一个方面填补内核模式驱动程序的方法的流程图。
图12所示是依照本发明的一个方面的合适的操作环境的示意性框图。
具体实施方式
现在参考附图描述本发明,贯穿整个附图,相同的标号标识相同的元件。然而,应当理解,附图及其详细描述并不意味着将本发明限于所揭示的具体形实。相反,本发明覆盖落入本发明的精神和范围之内的所有修改方案、等效方案和替换方案。
如本申请中所使用的,术语“组件”和“系统”指的是计算机相关的实体,可以是硬件、硬件和软件的组合、软件或执行中的软件。例如,组件可以是,但不限于,运行在处理器上的进程、处理器、对象、可执行码、执行线程、程序和/或计算机。作为说明,运行在服务器上的应用程序和服务器都可以是组件。一个或多个组件可驻留在进程和/或执行线程中,组件可在一个计算机上本机化和/或在两个或多个计算机之间分布。
此外,本发明可被实现为使用标准编程和/或工程技术来生成软件、固件、硬件或其任一组合的方法、装置或制造物品。本发明所使用的术语“制造物品”(或可选地,为“计算机程序产品”)旨在包含可从任何计算机可读装置、载体或媒质访问的计算机程序。当然,本领域的技术人员将认识到,可在不脱离本发明的精神和范围的情况下对该配置作出许多修改。
转向图4,依照本发明的一个方面示出了填补系统400。系统400包括驱动程序组件410、内核组件420、过程422(过程1、过程2到过程N,其中,N大于1)、上下文组件440和填补组件430。驱动程序组件410(此处也简称为驱动程序)可用于执行计算机上的几乎任何功能,然而,驱动程序组件通常用于向特定的硬件设备或软件片段提供接口。驱动程序组件410可封装与特定的设备或软件片段相关联的特殊指令和信息,并向用户(如,硬件、软件)提供对一组一般指令的访问。设备或软件然后使用该一般命令以与设备或软件组件进行通信。驱动程序组件410可将接收的一般指令转换成由设备或软件组件使用的专用指令。可由操作系统、软件应用程序或通过与特定的设备(如,盘驱动器、打印机、扫描仪、键盘、鼠标、扬声器……)关联的软件提供驱动程序组件。驱动程序组件410可在计算机系统中被实现为动态链接库(DLL)文件。DLL文件是由较大的程序或设备用于执行特定的功能的小文件。例如,驱动程序组件或DLL文件可提供对诸如打印机等特定设备的支持。驱动程序组件或DLL文件然后可由诸如文字处理程序等较大的程序使用来方便使用与该驱动程序组件相关联的特定打印机打印文档。
简要地转向图5,依照本发明的一个方面更详细地示出了驱动程序组件410。驱动程序组件410包括驱动程序代码412和导入地址表414。驱动程序代码412对应于软件专用过程以及驱动程序组件410用于实现驱动程序功能的功能。驱动程序组件410可通过使用内核组件提供的外部服务或过程422(图4)来增强其效用,而同时将其总尺寸最小化。驱动程序组件410通过使用导入地址表414“导入”外部过程422来访问它们。当加载或执行驱动程序组件410时,导入表中列出的过程422可被绑定到该驱动程序,使得该驱动程序可使用其提供的功能和过程。这一绑定被称为驱动程序链接或导入链接。
应当注意,尽管本详细描述几乎排他地集中在驱动程序和驱动程序组件上,然而本发明的范围不限于此。本发明的范围覆盖能够被填补的任何应用程序或组件、驱动程序等等。尽管本描述集中在驱动程序和驱动程序组件上,但是它并不意味着排除能够被填补的所有其它软件应用程序,而是相反,便于清楚且可理解地描述没有混淆术语(如,客户/应用程序/组件/驱动程序)的本发明。
转向图4,内核组件420是计算机操作系统的核心或中心。操作系统一般负责处理数据,并管理输出和输入。内核组件420作为操作系统的一部分被首先加载并保留在主存储器中。除负责进程管理、文件管理和存储器管理等之外,内核组件420提供应用程序和驱动程序所需的基本服务或过程422。过程422可对应于,但不限于,I/O调度、缓冲、假脱机(spooling)和出错处理。此外,应当注意,本发明所使用的术语“内核模式服务”或“内核模式过程”旨在覆盖位于内核地址空间中的任何服务、过程、驱动程序、应用程序或其它组件。
填补组件430提供驱动程序组件410和内核服务或过程422之间的额外的功能。依照本发明的一个方面,这类功能可对应于对有缺陷的驱动程序的修补;然而,填补组件430也可用作协助根本原因分析的诊断填补。有缺陷的驱动程序可以是许多系统崩溃以及构成通常被不正确地归因于操作系统的负面计算机体验(如,延迟、死锁)的其它问题的原因。填补组件420提供一种用于通过补偿驱动程序的缺陷来修补驱动程序的行为的机制。因此,填补组件430驻留在一个或多个驱动程序组件410和具有期望过程422的内核组件之间。然而,与常规的填补系统不同,本发明还采用了上下文组件440。
上下文组件440是驱动程序系统调用和公用填补组件430之间的中间组件。上下文组件440提供了一种建立并维护每一驱动程序唯一的链接信息的机制。常规的填补系统不为调用填补组件的每一驱动程序建立上下文,而是仅保留嵌入在填补本身中的一个链接配置,尤其是最后一个填补的驱动程序的链接配置。因此,与先前的填补有关的所有填补链接配置数据丢失。转向图6,依照本发明的一个方面,更详细地示出了上下文组件440,包括挂钩组件442和形实替换程序444。挂钩组件442可在驱动程序加载期间构成。挂钩组件442从要填补的驱动程序检索上下文信息(如,使用上述的填补引擎组件),并令这一信息对形实替换程序组件444可用。具体地,挂钩组件442可检索要由来自驱动程序导入地址表(IAT)的驱动程序使用的内核过程或服务的地址。此外,挂钩组件442可确定要使用的填补的地址。该上下文数据然后可储存在数据结构中,用于由形实替换程序组件442和填补组件430稍后访问。形实替换程序组件444使用由挂钩组件442检索的信息以将驱动程序的导入地址表变为指向或引用填补的位置而非最初指定的服务或过程。此外,形实替换程序组件444向填补组件430提供对与调用该填补组件430的驱动程序有关的上下文信息的访问。可通过将这一信息或信息位置作为过程参数传递,或将数据储存在填补组件已知的特定位置中,以向填补组件430提供上下文信息。填补组件430然后可使用该信息来检索调用驱动程序最初引用的内核过程。随后,填补组件430可在提供额外的功能(如,驱动程序修补)之后前向链接到最初引用的过程或服务。
转向图7,示出了依照本发明的一个方面的示例性系统700的框图。系统700描述了在两个驱动程序组件之间的上下文组件的使用。驱动程序X710和驱动程序Y720包含各自的驱动程序代码712和722,以及导入地址表714和724。此外,每一驱动程序与上下文组件730和740相关联。使用公用填补组件750来提供驱动程序与内核过程Foo 762和VerifierFoo 764之间的额外功能。驱动程序X710使用其代码段710中的Foo过程762。因此,在驱动程序X的导入地址表714中有指向包含内核过程762的存储器位置的指针。然而,此处使用了填补组件750来提供额外的功能,如,补偿驱动程序X710的问题。依照本发明的一个方面,也使用了上下文组件730来向填补组件750提供驱动器专用的上下文信息。上下文组件730包括挂钩组件732和形实替换程序组件734。挂钩组件732将导入地址表714中最初引用Foo的指针变为将驱动器X对Foo过程的导入指向或链接到上下文组件730。另外,上下文组件730接收填补组件750的存储器地址,并储存指向填补组件750的指针以及指向数据结构(这里为Hook struct)中最初引用的内核过程762的指针等等。由此,Hook struct包含驱动程序上下文信息。形实替换程序组件734使用该信息以跳至填补组件750,并向填补组件750提供上下文数据。在跳跃完成之后,填补组件750执行其功能,然后使用上下文数据来链接,并最终执行原始的过程调用Foo 762。
驱动程序Y720用公用填补组件750完成类似的过程。然而,在这一情况下,驱动程序Y720使用其自己的上下文组件740和不同的过程调用。驱动程序Y720最后寻求调用Foo过程762,但是如此处所示出的在调用了VerifierFoo过程764之后。驱动程序上下文组件740的挂钩组件742确定并保存与填补组件750调用的过程有关的信息。形实替换程序组件744通过改变驱动程序Y的导入地址表724中的引用地址以将驱动程序链接到填补组件750。之后,当驱动程序Y720调用其代码段722中的Foo过程时,将控制传递到上下文组件740。上下文组件然后在寄存器中储存指向上下文信息的指针,或者可选地向填补组件750传输上下文信息位置或上下文信息本身。填补组件750然后执行其功能,并然后使用上下文信息以跳至VerifierFoo过程764,该过程执行并跳至Foo过程762。应当注意,通过对每一驱动程序检索并维护上下文数据,本发明确保在由另一驱动程序使用或调用填补之时,先前所填补的驱动程序的上下文数据不被丢失。常规的填补实践将在执行驱动程序Y720之时丢失关于驱动程序X的上下文的信息。在这一情况下,如果在驱动程序Y720之后再次调用驱动程序X710,常规的填补将无法知道驱动程序X最初引用了哪一过程,因为没有保留上下文数据,并且驱动程序导入地址表中的引用被变为引用填补组件750。本发明通过为每一驱动程序组件储存唯一的上下文信息消除了这一问题。
图8描述了用于依照本发明的一个方面使用填补的系统800。系统800包括驱动程序加载器组件810、填补引擎组件820、填补数据库830、诊断组件840以及接口组件850。驱动程序加载器组件810从一实体(如,个人、应用程序、设备、即插即用组件……)接收信号以加载驱动程序。驱动程序加载器组件810建立驱动程序初始链接,并将目标驱动程序加载到存储器中用于执行。加载器组件810可为外部API或过程解析驱动程序可能具有的任何未解析的动态引用,并当所有的引用被解析之后,生成一通知信号。通知信号提供要加载到填补引擎组件820中的驱动程序的身份等等。这一通知信号允许其它服务在驱动程序加载过程中,在调用驱动程序之前接收控制。填补引擎组件接收该通知信号,并使用包含在内的信息来查询填补数据库830,以确定是否填补了目标驱动程序。填补数据库830担当关于哪一驱动程序需要被填补以及哪一填补组件可应用到特定的驱动程序的数据的中央存储库。如果填补引擎组件820至少使用填补数据库830确定应当填补一驱动程序,则填补引擎组件标识要应用的填补集或填补包、加载它们(如果尚未加载)、并允许填补初始化唯一的上下文。随后,填补引擎组件820可将目标驱动程序API导入重定向到一个或多个填补组件。
系统800也可包括分析计算机系统并启动纠正行动的诊断组件840。依照本发明的一个方面,诊断组件840协助系统崩溃的根本原因分析。因此,诊断组件可采用各种分析系统转储信息和/或程序跟踪的方法(如,使用专家系统、神经网络……)来确定崩溃的原因。然而,诊断组件840不需要等候系统崩溃。诊断组件840也可以是主动的,并从事系统分析以检测系统不稳定性和/或低效率。在确定了崩溃原因或检测到系统不稳定性和/或低效率之后,可由诊断组件840启动纠正行动。这类纠正行动可包括通过接口850向用户或操作员提供通知。纠正行动也可包括搜索填补数据库830以确定是否存在一填补组件,使得如果应用该填补组件可修复检测到的问题-不稳定性或低效率。这一确定可使用贝叶斯网络、神经网络、决策树、支持矢量机器、线性和非线性回归和/或其它学习模型来智能地作出。依照本发明的一个方面,诊断组件可参加基于作出不正确的诊断和/或对纠正的好处选择了错误的填补加权的代价的概率分析。可由开发者或用户采用并指定置信度等级来控制诊断组件的行动。
接口850令用户能够与填补数据库830交互。依照本发明的一个方面,接口组件850是方便为驱动程序创建填补组件或填补包,并将填补组件或填补包储存到填补数据库830的图形用户界面(GUI)。例如,接口组件850可以是以协助生成填补组件的图形窗口向用户呈现一系列步骤以补救检测到的问题、不稳定性或低效率的向导。接口组件850也可向开发者或用户提供开发并展开可协助理解操作序列的诊断填补组件的装置,以确定或集中在一个问题上。
鉴于上述示例性系统,参考图9-11的流程图将更好地理解依照本发明实现的方法。尽管为简要解释的目的,示出并描述该方法为一系列的块,然而可以理解,本发明不受块的顺序所限制,依照本发明,从所描述的内容可知,某些块可以不同的顺序和/或与其它块并发地出现。此外,并非需要所有示出的块来实现依照本发明的方法。
另外,还应当理解,后文所揭示并且贯穿此说明书的方法能够储存在方便向计算机传送并传递该方法的制造物品中。所使用的术语制造物品旨在包括可从任何计算机可读设备、载体或媒体访问的计算机程序。
转向图9,依照本发明的一个方面描述了用于填补内核模式驱动程序的方法900。在910,生成对若干驱动程序公用的填补组件。例如,公用填补组件提供一种向一个或多个驱动程序添加功能以补偿与该一个或多个驱动程序关联的缺陷的有效机制。可使用程序编辑器和/或图形用户界面生成填补组件。可选地,可使用指导用户或开发者通过一系列步骤的向导,这些步骤与使用众多窗口与诸如按钮、滚动条、文本框等图形界面组件生成填补组件相关联。在920,为要填补的每一驱动程序生成驱动程序唯一的上下文数据。随后,在930,向公用填补提供驱动程序唯一的上下文。该唯一的上下文数据允许公用填补组件标识使用该填补组件的驱动程序。这使填补组件能够添加额外的功能,然后前向链接到由该驱动程序使用的内核模式服务或过程,并因此保持驱动程序的执行链的完整。
图10所示是用于依照本发明的一个方面填补内核模式驱动程序的方法1000的流程图。在1010,生成对多个驱动程序公用的填补组件。如上所述,填补组件提供一种向驱动程序提供如补偿某一缺陷(如,引用受限制的存储器……)的功能的有效机制。然而,应当注意,填补组件可用作确定并查明系统问题的工具。可使用若干方法、组件和设备之一来生成填补组件,如使用GUI或向导。在1020,从驱动程序导入地址表检索驱动程序的导入的API或内核模式服务。随后,在1030,用指向填补组件的指针替换其导入地址表中的驱动程序API服务引用。然后在1040向填补提供替换的API或内核模式服务。可通过采用其作为调用填补的函数或过程中的参数、通过将其加载到特定的存储器位置等向填补组件提供该上下文信息。因此,与公用组件相关联的驱动程序变为链接到该填补组件,它然后能够在填补组件执行其额外添加的功能之后前向链接到API或内核模式服务。
图11描述了依照本发明的一个方面修改内核模式驱动程序的方法1100。在1110,接收指示已加载驱动程序的信号。依照本发明的一个方面,信号可由驱动程序加载器组件在为外部API解析了该驱动程序可具有的任何未解析的动态引用之后生成。这一通知允许其它服务在调用该驱动程序的驱动程序条目之前接收控制。在1120,在填补数据库上执行查询以确定驱动程序是否为要填补的那一个。然后在1130,基于与该驱动程序相关联的填补组件的存在或不存在确定是否要填补该驱动程序。如果没有与该驱动程序相关联的填补,则过程终止。然而,如果有与该驱动程序相关联的一个或多个填补,则过程前进到1140,初始化并加载唯一的驱动程序上下文。随后,在1150,驱动程序被重定向到填补组件而非诸如内核模式服务或过程的驱动程序导入条目。这一重定向可通过用指向填补组件的指针替换该驱动程序的导入地址表中的条目来实现。此后,填补组件可以,但非必须,使用该唯一的驱动程序上下文来前向链接到替换的驱动程序导入条目。
为向本发明的各方面提供环境,图12以及以下描述旨在提供可实现本发明的各方面的合适的计算环境的简要、一般描述。尽管上文在运行在计算机和/或多个计算机上的计算机程序的计算机可执行指令的一般上下文中描述了本发明,然而本领域的技术人员将认识到,本发明也可组合其它程序模块实现。一般而言,程序模块包括例程、程序、组件、数据结构等等,执行特定的任务和/或实现特定的抽象数据类型。此外,本领域的技术人员可以理解,本发明也能可用其它计算机系统配置来实践,包括单处理器或多处理器计算机系统、小型计算设备、大型机以及个人计算机、手持式计算设备、基于微处理器或可编程消费者电子产品等等。示出的本发明的各方面也可在分布式计算环境中实践,其中任务由通过通信网络连接的远程处理设备来执行。然而,本发明的某些方面,如果不是所有,可在独立计算机上实践。在分布式计算环境中,程序模块可位于本地和远程存储器存储设备中。
参考图12,用于实现本发明的各方面的示例性环境1210包括计算机1212。计算机1212包括处理单元1214、系统存储器1216以及系统总线1218。系统总线1218将包括但不限于系统存储器1216的系统组件耦合至处理单元1214。处理单元1214可以是各种可用处理器的任一种。双微处理器和其它多处理器体系结构也可用作处理单元1214。
系统总线1218可以是若干种总线结构的任一种,包括存储器总线或存储器控制器、外围总线或外部总线和/或使用各种可用总线体系结构的任一种的局部总线,这类体系结构包括但不限于,11位总线、工业标准体系结构(ISA)、微通道体系结构(MSA)、扩展ISA(EISA)、智能设备电子技术(IDE)、VESA局部总线(VLB)、外围部件互连(PCI)、通用串行总线(USB)、高级图形端口(AGP)、个人计算机存储卡国际协会总线(PCMCIA)和小型计算机系统接口(SCSI)。
系统总线1216包括易失存储器1220和非易失存储器1222。基本输入/输出系统(BOIS)包含如在启动时协助在计算机1212中的元件之间传递信息的基本例程,通常储存在非易失存储器1222中。作为示例而非局限,非易失存储器1222可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除ROM(EEPROM)或闪存。易失存储器1220包括随机存取存储器(RAM)、担当外部高速缓存的作用。作为示例而非局限,RAM以多种形式可用,如同步RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SRAM(DDR SDRAM)、增强SDRAM(ESDRAM)、同步链路DRAM(SLDRAM)以及直接存储器总线RAM(DRRAM)。
计算机1212也包括可移动/不可移动、易失/非易失计算机存储媒质。例如,图12示出了盘存储1224。盘存储1224包括但不限于,诸如磁盘驱动器、软盘驱动器、磁带驱动器、Jaz驱动器、Zip驱动器、LS-100驱动器、闪存卡或记忆棒等设备。另外,盘存储1224可包括单独的存储媒质或与其它存储媒质组合,包括但不限于,诸如光盘ROM设备(CD-ROM)、CD可记录驱动器(CD-R驱动器)、CD可重写驱动器(CD-RW驱动器)或数字多功能盘ROM驱动器(DVD-ROM)等光盘驱动器。为方便将盘存储设备1224连接到系统总线1218,通常使用诸如接口1226等可移动或不可移动接口。
可以理解,图12描述了担当用户和合适的操作环境1210中描述的基本计算机资源之间的中间媒介的软件。这类软件包括操作系统1228。操作系统1228可储存在盘存储1224中,控制并分配计算机系统1212的资源。系统应用程序1230利用操作系统1228通过储存在系统存储器1216或盘存储1224上的程序模块1232和程序数据234对资源的管理。可以理解,本发明可用各种操作系统或操作系统的组合来实现。
用户通过输入设备1236向计算机1212输入命令或信息。输入设备1236包括但不限于,诸如鼠标、跟踪球、触摸板等定位设备、键盘、麦克风、操纵杆、游戏垫、圆盘式卫星天线、扫描仪、TV调谐卡、数码相机、数码摄像机、web相机等等。这些和其它输入设备通过系统总线1218经接口端口1238连接到处理单元1214。接口端口1238包括,如串行端口、并行端口、游戏端口和通用串行总线(USB)。输入设备1240使用一些与输入设备1236同一类型的端口。由此,例如,USB端口可用于向计算机1212提供输入,并从计算机1212向输出设备1240输出信息。提供了输出适配器1242以说明有某些输出设备1240,如监视器、扬声器、打印机等需要特殊适配器的其它输出设备1240。输出适配器1242包括但不限于,提供输出设备1240和系统总线1218之间的连接装置的视频和声音卡。应当注意,其它设备和/或设备系统提供输入和输出能力,如远程计算机1244。
计算机1212可在使用到一个或多个远程计算机,如远程计算机1244的逻辑连接的网络化环境中操作。远程计算机1244可以是个人计算机、服务器、路由器、网络PC、工作站、基于微处理器的器件、对等设备或其它公用网络节点等等,并通常包括上述与计算机1212有关的许多或所有元件。为简明目的,仅示出远程计算机1244具有存储器存储设备1246。远程计算机1244通过网络接口1248逻辑上连接至计算机1212,然后通过通信连接1250物理上连接。网络接口1248包含诸如局域网(LAN)和广域网(WAN)等通信网络。LAN技术包括光纤分布式数据接口(FDDI)、铜缆分布式数据接口(CDDI)、以太网/IEEE 1102.3、令牌环/IEEE1102.5等等。WAN技术包括但不限于,点对点链路、诸如综合业务数字网络(ISDN)及其变异等电路交换网络、分组交换网络和数字用户线(DSL)。
通信连接1250涉及用于将网络接口1248连接到总线1218的硬件/软件。尽管为清晰的说明,示出通信网络1250在计算机1212内,然而它也可以对计算机1212是外部的。连接到网络接口所必需的硬件/软件包括,仅为示例性目的,内部和外部技术,如调制解调器,包括常规电话级调制解调器、电缆调制解调器和DSL调制解调器、ISDN适配器和以太网卡。
上文描述的内容包括本发明的示例。当然,不可能为描述本发明的目的而描述组件或方法的每一可考虑到的组合,但是本领域的技术人员可认识到,本发明的许多其它的组合和置换也是可能的。因此,本发明旨在包含落入权利要求书的精神和范围之内的所有这样的替换方案、修改和变化。此外,在详细描述或权利要求书中使用了术语“包括”的意义上,该术语旨在以与术语“包括”在用作权利要求书中的过渡词语时所解释的类似的方式是包含性的。
Claims (30)
1.一种用于内核模式填补的系统,其特征在于,它包括:
多个驱动程序组件;
一公共填补组件,它向所述多个驱动程序组件提供附加的功能;以及
一与每一驱动程序组件相关联的上下文组件,它检索并维护驱动程序上下文信息。
2.如权利要求1所述的系统,其特征在于,所述驱动程序上下文信息包括驱动程序的链接配置。
3.如权利要求2所述的系统,其特征在于,所述上下文组件包括一挂钩组件,它从一驱动程序组件的导入地址表检索与一内核模式服务相关联的地址。
4.如权利要求3所述的系统,其特征在于,所述挂钩组件确定所述上下文组件的地址。
5.如权利要求4所述的系统,其特征在于,所述上下文组件还包括一形实替换程序组件,它用所述上下文组件的地址替换与所述驱动程序的导入地址表中的内核模式服务相关联的至少一个地址,以将所述执行流程从所述内核模式服务重定向到所述上下文组件。
6.如权利要求5所述的系统,其特征在于,所述形实替换程序组件将所述上下文组件链接到所述填补组件。
7.如权利要求6所述的系统,其特征在于,所述形实替换程序组件向所述填补组件提供关于被所述上下文组件替换的所述内核模式服务的上下文信息。
8.如权利要求7所述的系统,其特征在于,所述填补组件提供到所述内核模式服务的链接,以将所述执行流程从所述填补组件定向到所述服务。
9.如权利要求1所述的系统,其特征在于,由所述填补组件提供的所述附加功能包括补偿驱动程序缺陷。
10.如权利要求1所述的系统,其特征在于,由所述填补组件提供的所述附加功能包括提供诊断测试。
11.一种用于填补内核模式驱动程序的系统,其特征在于,它包括:
一驱动程序加载器组件,它加载驱动程序并生成通知信号以指示已加载了特定的驱动程序;
一填补数据库,它储存填补组件、标识要填补的驱动程序并将一个或多个填补组件与要填补的驱动程序相关联;以及
一填补引擎组件,它从所述驱动程序加载器组件接收一通知信号、查询所述填补数据库以确定所加载的特定驱动程序是否需要被填补、并加载与所述驱动程序相关联的填补组件。
12.如权利要求11所述的系统,其特征在于,所述填补引擎是内核模式服务。
13.如权利要求11所述的系统,其特征在于,所述填补引擎生成一与所加载的特定驱动程序相关联的上下文组件,所述上下文组件包括:
一数据结构,它标识由所述驱动程序使用的内核模式过程;以及
一形实替换程序组件,用于将所述驱动程序链接到所述上下文组件,并将所述上下文组件链接到一填补组件。
14.如权利要求11所述的系统,其特征在于,它还包括一诊断组件,用于确定系统问题、不稳定性或低效率的原因,并启动纠正行动。
15.如权利要求14所述的系统,其特征在于,所述纠正行动包括查找并向驱动程序应用储存在所述填补数据库中的一个或多个填补组件。
16.如权利要求14所述的系统,其特征在于,所述纠正行动包括通知用户。
17.如权利要求14所述的系统,其特征在于,它还包括一接口组件,它方便一补救填补组件的开发和展开。
18.如权利要求17所述的系统,其特征在于,所述接口组件包括一填补向导,它导航用户通过开发填补组件或向驱动程序应用先前开发的填补组件的一系列步骤。
19.一种用于填补内核模式驱动程序的系统,其特征在于,它包括:
多个驱动程序组件;
对所述多个驱动程序组件公用的一填补组件;以及
一用于向所述填补组件提供对驱动程序唯一的上下文数据,使得所述填补组件可在总体驱动程序链接配置中标识其调用者的装置。
20.如权利要求19所述的系统,其特征在于,所述上下文数据包括关于由所述驱动程序使用的内核模式过程的信息。
21.一种用于填补内核模式驱动程序的方法,其特征在于,它包括:
生成对若干驱动程序公用的一填补组件;
生成与要填补的每一驱动程序相关联的对驱动程序唯一的上下文数据;
向所述填补组件提供所述对驱动程序唯一的上下文数据,使得所述填补组件可在总体驱动程序链接配置中确定其调用者。
22.如权利要求19所述的方法,其特征在于,所述调用者是驱动程序。
23.如权利要求21所述的方法,其特征在于,向所述填补组件提供所述上下文数据包括通过一过程或方法参数传递所述上下文数据。
24.如权利要求20所述的方法,其特征在于,向所述填补组件提供所述上下文数据包括将所述数据加载到存储器中。
25.如权利要求20所述的方法,其特征在于,它还包括以保持填补组件、上下文数据和驱动程序之间的关联的方式在一填补数据库中储存所述填补组件和所述上下文数据。
26.一种在其上储存了用于实现权利要求20所述的方法的计算机可执行指令的计算机可读媒质。
27.一种用于修改内核模式驱动程序调用的方法,其特征在于,它包括:
接收一指示已加载驱动程序的信号;
查询一填补数据库以确定所加载的驱动程序是否具有与其关联的填补组件;
加载与所述驱动程序相关联的任何填补组件;
初始化对所述驱动程序唯一的上下文;以及
将所述驱动程序重定向到所述填补组件,其中,所述唯一的上下文向所述填补组件标识所述驱动程序。
28.如权利要求27所述的方法,其特征在于,将所述驱动程序重定向到所述填补组件包括用指向所述填补组件的指针替换指定要导入的内核模式过程的驱动程序导入地址表条目。
29.如权利要求28所述的方法,其特征在于,它还包括从所述填补组件调用被指向所述填补组件的指针替换的内核模式过程。
30.一种在其上储存了用于实现权利要求27所述的方法的计算机可执行指令的计算机可读媒质。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/732,746 US7392527B2 (en) | 2003-12-10 | 2003-12-10 | Driver-specific context for kernel-mode shimming |
US10/732,746 | 2003-12-10 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN1627258A true CN1627258A (zh) | 2005-06-15 |
Family
ID=34710424
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2004100958106A Pending CN1627258A (zh) | 2003-12-10 | 2004-11-15 | 内核模式填补的驱动程序专用上下文 |
Country Status (5)
Country | Link |
---|---|
US (1) | US7392527B2 (zh) |
EP (1) | EP1569100A3 (zh) |
JP (1) | JP4615971B2 (zh) |
KR (1) | KR101099337B1 (zh) |
CN (1) | CN1627258A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102541543A (zh) * | 2010-12-20 | 2012-07-04 | 微软公司 | 发现对象接口的技术 |
CN102708076A (zh) * | 2011-03-04 | 2012-10-03 | 微软公司 | 驱动程序填隙 |
WO2015006923A1 (en) * | 2013-07-16 | 2015-01-22 | Intel Corporation | Techniques for dynamically redirecting device driver operations to user space |
CN104583932A (zh) * | 2012-08-08 | 2015-04-29 | 佳能株式会社 | 信息处理装置、安装方法及程序 |
CN115599505A (zh) * | 2021-06-28 | 2023-01-13 | 华为技术有限公司(Cn) | 用户态中断请求的处理方法及装置 |
Families Citing this family (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7571448B1 (en) * | 2004-07-28 | 2009-08-04 | Symantec Corporation | Lightweight hooking mechanism for kernel level operations |
US8572371B2 (en) * | 2005-10-05 | 2013-10-29 | Ca, Inc. | Discovery of kernel rootkits with memory scan |
US8117625B2 (en) * | 2008-03-19 | 2012-02-14 | Microsoft Corporation | Module interrogation |
US8793662B2 (en) * | 2008-03-25 | 2014-07-29 | Microsoft Corporation | Runtime code hooking for print driver and functionality testing |
US8341602B2 (en) * | 2009-01-29 | 2012-12-25 | Microsoft Corporation | Automated verification of a type-safe operating system |
US8468332B2 (en) * | 2009-06-13 | 2013-06-18 | Kinglite Holdings Inc. | Dynamic link loading in extensible firmware interface compliant systems |
US8365019B2 (en) * | 2009-06-16 | 2013-01-29 | International Business Machines Corporation | System and method for incident management enhanced with problem classification for technical support services |
US20110063309A1 (en) * | 2009-09-16 | 2011-03-17 | Nvidia Corporation | User interface for co-processing techniques on heterogeneous graphics processing units |
US8607094B2 (en) * | 2009-09-29 | 2013-12-10 | Hyundai Motor Company | Operational system test method |
US9830889B2 (en) | 2009-12-31 | 2017-11-28 | Nvidia Corporation | Methods and system for artifically and dynamically limiting the display resolution of an application |
US8627426B2 (en) * | 2010-04-26 | 2014-01-07 | Vmware, Inc. | Cloud platform architecture |
US9003363B2 (en) | 2011-03-21 | 2015-04-07 | Microsoft Technology Licensing, Llc | Device flags |
US8799898B2 (en) * | 2011-05-31 | 2014-08-05 | Adobe Systems Incorporated | Methods and apparatus for binding applications to a cloud computing environment |
US8776094B2 (en) | 2011-08-11 | 2014-07-08 | Microsoft Corporation | Runtime system |
US20130055291A1 (en) * | 2011-08-31 | 2013-02-28 | Microsoft Corporation | Describing native application programming interfaces of an operating system with metadata |
US8695021B2 (en) * | 2011-08-31 | 2014-04-08 | Microsoft Corporation | Projecting native application programming interfaces of an operating system into other programming languages |
US20140129686A1 (en) * | 2012-11-08 | 2014-05-08 | Nvidia Corporation | Mobile computing device configured to filter and detect application profiles, a method of manufacturing the same and an external source for delivering hierarchical filtered application profiles to mobile computing devices |
US10635504B2 (en) | 2014-10-16 | 2020-04-28 | Microsoft Technology Licensing, Llc | API versioning independent of product releases |
US10176329B2 (en) * | 2015-08-11 | 2019-01-08 | Symantec Corporation | Systems and methods for detecting unknown vulnerabilities in computing processes |
US10831394B2 (en) * | 2018-08-27 | 2020-11-10 | International Business Machines Corporation | Live upgrade of storage device driver using shim application |
CN110927642B (zh) * | 2019-12-05 | 2021-09-10 | 湖南迈太科医疗科技有限公司 | 磁共振成像的匀场控制方法、装置和系统 |
US20230110698A1 (en) * | 2021-10-05 | 2023-04-13 | Salesforce.Com, Inc. | Systems and methods for implementing a shim database driver |
WO2023211899A1 (en) * | 2022-04-27 | 2023-11-02 | Viam Inc. | Device control system and method |
Family Cites Families (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3509911A (en) * | 1966-09-02 | 1970-05-05 | Kirk & Blum Mfg Co | Dust collecting plenum installation |
JPS6355631A (ja) * | 1986-08-27 | 1988-03-10 | Fujitsu Ltd | プログラムのパツチ管理方法 |
JPH02224122A (ja) * | 1989-02-27 | 1990-09-06 | Nec Corp | メモリパッチデータのダイナミックリンク方式 |
DE69031191T2 (de) | 1989-05-15 | 1998-02-12 | Ibm | System zur Steuerung von Zugriffsprivilegien |
US5390301A (en) * | 1992-08-11 | 1995-02-14 | Acer Incorporated | Method and apparatus for communicating device-specific information between a device driver and an operating system in a computer system |
JPH06242990A (ja) * | 1993-02-12 | 1994-09-02 | Fujitsu Ltd | メモリパッチ装置 |
US6449660B1 (en) * | 1995-07-31 | 2002-09-10 | International Business Machines Corporation | Object-oriented I/O device interface framework mechanism |
US6418485B1 (en) * | 1997-04-21 | 2002-07-09 | International Business Machines Corporation | System and method for managing device driver logical state information in an information handling system |
US6321323B1 (en) * | 1997-06-27 | 2001-11-20 | Sun Microsystems, Inc. | System and method for executing platform-independent code on a co-processor |
US6230118B1 (en) * | 1997-06-30 | 2001-05-08 | Cirrus Logic, Inc. | DOS based application supports for a controllerless modem |
US6289464B1 (en) | 1998-01-07 | 2001-09-11 | Microsoft Corporation | Receiving wireless information on a mobile device with reduced power consumption |
US6505300B2 (en) | 1998-06-12 | 2003-01-07 | Microsoft Corporation | Method and system for secure running of untrusted content |
JP3831538B2 (ja) | 1998-11-26 | 2006-10-11 | インターナショナル・ビジネス・マシーンズ・コーポレーション | ディスプレイの省電力方法及び装置 |
US6538773B1 (en) | 1999-03-26 | 2003-03-25 | International Business Machines Corporation | Method and apparatus for rendering grayscales at a facsimile presentation device using a calibrated transform |
US6745385B1 (en) * | 1999-09-01 | 2004-06-01 | Microsoft Corporation | Fixing incompatible applications by providing stubs for APIs |
US20010044904A1 (en) * | 1999-09-29 | 2001-11-22 | Berg Ryan J. | Secure remote kernel communication |
WO2001044935A1 (en) * | 1999-12-15 | 2001-06-21 | Sun Microsystems, Inc. | Computer system with an improved device and driver framework |
US6615312B1 (en) * | 2000-02-29 | 2003-09-02 | Western Digital Ventures, Inc. | Method for processing file system service requests in a computer having an attached disk drive that can reproduce stream data and non-stream data |
JP5055492B2 (ja) * | 2001-05-07 | 2012-10-24 | サイエンスパーク株式会社 | 電子計算機のインターフェースドライバプログラム及びその記録媒体 |
US7574713B2 (en) * | 2001-11-05 | 2009-08-11 | Trendium, Inc. | Methods, systems, and computer program products for instantiating a device driver for communication with a device by dynamically associating the device driver at run-time with a device-specific and/or service-specific software component |
US7739693B2 (en) * | 2002-11-25 | 2010-06-15 | Sap Ag | Generic application program interface for native drivers |
US6889167B2 (en) * | 2003-02-27 | 2005-05-03 | Hewlett-Packard Development Company, L.P. | Diagnostic exerciser and methods therefor |
US7404193B2 (en) * | 2003-09-03 | 2008-07-22 | Intel Corporation | Method, system, and program for accessing device driver functions |
-
2003
- 2003-12-10 US US10/732,746 patent/US7392527B2/en active Active
-
2004
- 2004-11-03 EP EP04026074A patent/EP1569100A3/en not_active Withdrawn
- 2004-11-05 KR KR1020040089637A patent/KR101099337B1/ko not_active IP Right Cessation
- 2004-11-15 CN CNA2004100958106A patent/CN1627258A/zh active Pending
- 2004-11-26 JP JP2004342840A patent/JP4615971B2/ja not_active Expired - Fee Related
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102541543A (zh) * | 2010-12-20 | 2012-07-04 | 微软公司 | 发现对象接口的技术 |
CN102541543B (zh) * | 2010-12-20 | 2015-07-22 | 微软技术许可有限责任公司 | 发现对象接口的技术 |
CN102708076A (zh) * | 2011-03-04 | 2012-10-03 | 微软公司 | 驱动程序填隙 |
US9519600B2 (en) | 2011-03-04 | 2016-12-13 | Microsoft Technology Licensing, Llc | Driver shimming |
CN102708076B (zh) * | 2011-03-04 | 2017-09-15 | 微软技术许可有限责任公司 | 驱动程序填隙 |
CN104583932A (zh) * | 2012-08-08 | 2015-04-29 | 佳能株式会社 | 信息处理装置、安装方法及程序 |
CN104583932B (zh) * | 2012-08-08 | 2017-06-30 | 佳能株式会社 | 信息处理装置及安装方法 |
WO2015006923A1 (en) * | 2013-07-16 | 2015-01-22 | Intel Corporation | Techniques for dynamically redirecting device driver operations to user space |
CN115599505A (zh) * | 2021-06-28 | 2023-01-13 | 华为技术有限公司(Cn) | 用户态中断请求的处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
EP1569100A2 (en) | 2005-08-31 |
US7392527B2 (en) | 2008-06-24 |
JP4615971B2 (ja) | 2011-01-19 |
US20050149947A1 (en) | 2005-07-07 |
EP1569100A3 (en) | 2007-11-28 |
JP2005182775A (ja) | 2005-07-07 |
KR101099337B1 (ko) | 2011-12-26 |
KR20050056852A (ko) | 2005-06-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1627258A (zh) | 内核模式填补的驱动程序专用上下文 | |
CN1313922C (zh) | 用于在预存储器执行环境中链接固件模块的方法和系统 | |
US9529589B2 (en) | Distributed parallel build system | |
US8307379B2 (en) | Determining an extension to use to process an input object to a call in a program | |
US8924944B2 (en) | Implementation of distributed methods that support generic functions | |
CN103493011A (zh) | 与库操作系统的应用兼容性 | |
CN1755619A (zh) | 提供文档预览的方法、系统和装置 | |
CN1535417A (zh) | 通过散列的绑定 | |
KR20070049166A (ko) | 목표 기기 상에서의 종속 소프트웨어 패키지의 검출 및이용을 자동화하기 위한 방법 및 소프트웨어 리포지터리를생성하기 위한 시스템 | |
CN1783004A (zh) | 使用可扩展固件接口的持久性存储器操作 | |
CN1815440A (zh) | 用于数字设备菜单编辑器的方法和系统 | |
CN1292527A (zh) | 逐模块验证 | |
CN101206573A (zh) | 维护软件组件的系统和方法 | |
US20090235284A1 (en) | Cross-platform compatibility framework for computer applications | |
CN104137062A (zh) | 将代码动态注入到运行中的进程 | |
CN101346693A (zh) | 产生、链接和更新基于组件的软件的方法和其上记录有这种软件的信息存储介质 | |
US20070220249A1 (en) | Data structure and method for managing modules associated with a kernel | |
CN1783015A (zh) | 启用子系统间的资源共享 | |
CN101484878B (zh) | 为基于efi的固件中的预efi初始化模块使用全局变量的方法 | |
US10481892B2 (en) | Multiple domain embedded system | |
US8533702B2 (en) | Dynamically resolving fix groups for managing multiple releases of multiple products on multiple systems | |
CN1305152A (zh) | 完全迟缓链接 | |
US20110252414A1 (en) | System using separate modules to update software and the method thereof | |
CN103064783A (zh) | 使用重复利用动态链接库进行功能测试的系统和方法 | |
CN110334031A (zh) | 内存分配代码检测方法、装置、计算机设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20050615 |