KR101099337B1 - 커널 모드 쉬밍을 위한 드라이버 특정 컨텍스트 - Google Patents

커널 모드 쉬밍을 위한 드라이버 특정 컨텍스트 Download PDF

Info

Publication number
KR101099337B1
KR101099337B1 KR1020040089637A KR20040089637A KR101099337B1 KR 101099337 B1 KR101099337 B1 KR 101099337B1 KR 1020040089637 A KR1020040089637 A KR 1020040089637A KR 20040089637 A KR20040089637 A KR 20040089637A KR 101099337 B1 KR101099337 B1 KR 101099337B1
Authority
KR
South Korea
Prior art keywords
component
driver
shim
kernel mode
context
Prior art date
Application number
KR1020040089637A
Other languages
English (en)
Other versions
KR20050056852A (ko
Inventor
캘린더로빈엘.
Original Assignee
마이크로소프트 코포레이션
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by 마이크로소프트 코포레이션 filed Critical 마이크로소프트 코포레이션
Publication of KR20050056852A publication Critical patent/KR20050056852A/ko
Application granted granted Critical
Publication of KR101099337B1 publication Critical patent/KR101099337B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4411Configuring for operating with peripheral devices; Loading of device drivers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • G06F9/4486Formation of subprogram jump address

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Stored Programmes (AREA)

Abstract

커널 모드 쉬밍 시스템 및 방법이 여기에 개시된다. 커널은 공유된 환경이다. 따라서, 많은 상이한 커널 모드 드라이버들은 커널에 의하여 제공된 서비스들을 이용한다. 또한, 드라이버의 쉬밍이 필요한 경우, 각각의 드라이버에 대하여 개별화된 쉼을 생성하는 것보다는, 유사한 문제 또는 이슈를 갖는 드라이버들 사이에서의 쉼 재사용(shim reuse)을 지원하는 것이 바람직하다. 커널 모드 쉬밍과 쉼 재사용을 용이하게 하기 위하여, 쉼이 특정의 드라이버 호출을 식별하고 드라이버 지정 연결 정보를 보존할 수 있도록 컨텍스트 정보가 검색되고 유지될 필요가 있다. 본 발명은 클라이언트 또는 드라이버 호출과 공통의 공유된 쉼 사이에 중간 구조(컨텐트 구성요소)를 채용하여 컨텍스트의 정보를 쉼에 제공함으로써 전술된 것들을 이룬다. 또한 드라이버 지정 컨텍스트 정보로 커널 모드 쉬밍을 실시하고 지원하는 시스템도 여기에 제공된다.
컨텍스트, 커널 모드 쉬밍, 쉼 재사용, 커널 모드 드라이버, 모듈

Description

커널 모드 쉬밍을 위한 드라이버 특정 컨텍스트{DRIVER-SPECIFIC CONTEXT FOR KERNEL-MODE SHIMMING}
도 1은 어플리케이션 서비스 제공자로 어플리케이션을 연결하는 시스템의 블럭도.
도 2는 종래의 쉬밍 시스템을 도시하는 블럭도.
도 3은 시스템 커널과 상호작용하는 시스템을 묘사하는 블럭도.
도 4는 본 발명의 일 측면에 따른 커널 모드 드라이버 쉬밍 시스템을 도시하는 블럭도.
도 5는 본 발명의 일 측면에 따른 드라이버 구성요소의 블럭도.
도 6은 본 발명의 일 측면에 따른 컨텍스트 구성요소의 블럭도.
도 7은 본 발명의 일 측면에 따른 컨텍스트 구성요소의 예시적인 이용을 도시하는 블럭도.
도 8은 본 발명의 일 측면에 따른 커널 모드 드라이버 쉬밍을 위한 시스템을 설명하는 블럭도.
도 9는 본 발명의 일 측면에 따라 커널 모드 드라이버를 쉬밍하는 방법을 도시하는 흐름도.
도 10은 본 발명의 일 측면에 따라 커널 모드 드라이버를 쉬밍하는 방법을 설명하는 흐름도.
도 11은 본 발명의 일 측면에 따라 커널 모드 드라이버를 쉬밍하는 방법론을 도시하는 흐름도.
도 12는 본 발명의 일 측면에 따른 적절한 오퍼레이팅 환경을 도시하는 블럭 구성도.
*도면의 주요부분에 대한 부호의 설명*
400: 쉬밍 시스템 410: 드라이버 구성요소
420: 커널 구성요소 422: 프로시저
440: 컨텍스트 구성요소 412: 드라이버 코드
414: 임포트 어드레스 테이블 442: 후크 구성요소
444: 썽크(thunk) 구성요소 750: 공통 쉼 구성요소
762: 커널 구성요소 프로시저 Foo 764: 검증 프로시저
쉬밍(shimming)은 API(application programming interface) 클라이언트(예를 들면, 어플리케이션, 드라이버)와 API 서비스(예를 들면, 오퍼레이팅 시스템에 의하여 지원됨) 사이에 추가적인 기능성(functionality)이 삽입되도록 하는 기술이다. API 클라이언트 어플리케이션은 잘 서술된 기능성을 제공하는 외부적으로 제공된 서비스들(APIs)의 컬렉션을 사용하도록 기록될 수 있다. 이 API 서비스들은 예를 들면, DLL(dynamically linked library)에 포함된 클라이언트 프로그램 외부에 상주한다.
외부 API 서비스들에 의하여 제공된 주요 장점들중 하나는 클라이언트 어플리케이션은 클라이언트 어플리케이션내에 직접 API 서비스 코드를 포함하지 않고 만들어질 수 있다는 것이다. 특히, 그런 스킴(scheme)은 어플리케이션들이 특정한 API 서비스의 이용을 선언하지만, 어플리케이션이 실질적으로 실행을 위하여 로드되기 전까지는 그 API로의 바인딩을 연기하는 방식을 제공한다. 이것은 어플리케이션 코드가 API 서비스로부터 분리되도록 하며 어플리케이션 런타임 환경의 구축시 모듈성(modularity)을 고려한다. 외부 API 서비스들은 클라이언트 어플리케이션으로 "임포트되고(imported)" 어플리케이션으로의 "로드-시간 바인딩"을 갖는 것으로 표현된다. 따라서, 어플리케이션은 임포트된 API 서비스를 사용하려는 그 의도를 선언하며 그에 응하여, 컴파일러는 어플리케이션 IAT(import address table)내에 "스터브(stub))" 엔트리를 암시적(implicitly)으로 생성할 수 있다. 임포트 스터브들을 포함하는 IAT가 컴파일러에 의하여 생성될 수 있다. 이 IAT 스터브들은 API에 대응하는 DLL 또는 외부 서비스 및 임포트 API의 명칭을 식별한다. 상기 어플리케이션이 로드되거나 그렇지 않은 경우 실행을 위하여 준비되는 경우, 로드-시간 바인딩이 수행될 것이고 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(310)는 IAT(314)를 이용하여 Foo 프로시저(332) 오퍼레이팅 시스템 커널(330)로 연결 또는 임포트하는 코드(312)를 갖는다. 드라이버 Y(320)는 IAT(324)를 이용하여 시스템 커널(330)내의 VerifierFoo 프로시저(334)(그 후 또한 커널(330)내의 Foo 프로시저(332)를 호출함)로 연결 또는 임포트하는 코드(322)를 갖는 다. 두 드라이버들은 모두 Foo 프로시저(332)를 요청하도록 기록되었지만, 드라이버X의 연결은 드라이버 Y의 연결의 경우와는 상이하다. 드라이버 Y는 그 Foo 임포트가 내장쉼(built in shim), 즉 VerifierFoo에 의하여 쉬밍되도록 했지만, 드라이버 X는 커널내의 오리지날 Foo API로 직접 연결된다.
쉼 개발자의 한 가지 목표는 재사용 가능성이다. 따라서, 양호한 쉼 프레임워크는 가능한 경우 쉼의 재사용을 지원해야 한다. 확장된 서비스 또는 수정(fix)을 제공하는 쉼이 생성되면 예를 들어, 쉼이 정정하도록 설계되었던 문제를 나타내는 모든 어플리케이션으로 쉼이 적용되는 것이 바람직하다. 예를 들면, 쉼 X가 문제 X를 해결하고 어플리케이션 A, B 및 C가 문제 X를 가지는 경우, 쉼 X에 대한 변경이 없이 쉼 X가 어플리케이션 A, B 및 C를 해결할 수 있도록 하는 것이 바람직할 것이다. 그러나, 그런 공통의 쉼을 제공하는 것은 부분적으로는 상이한 드라이버들은 종종 드라이버 X 및 드라이버 Y와 같은 상이한 연결 구성(linkage configurations)을 갖는다는 사실로 인하여 지금까지는 가능하지 않았다. 더욱이, 종래의 유저 모드 쉼 및 쉬밍 시스템은 오직 하나의 연결 구성(즉, 가장 최근의 것)만을 보유할 수 있는 한편, 이전에 쉬밍된 드라이버와 연관된 다른 연결 구성은 상실된다. 문제를 더 복잡하게 하는 것은 임포트된 API 또는 서비스에 대한 기존의 인프라스트럭쳐는 드라이버가 관련하여 API 또는 서비스를 이용하는 컨텍스트의 정보를 용이하게 제공하지 않는다는 사실이다.
따라서, 쉬밍되는 각각의 어플리케이션 또는 드라이버에 고유한, 복수의 연 결 구성, 컨텍스트를 결정 및 유지할 수 있는 쉼 시스템 및 방법에 대한 필요가 업계에 존재한다
발명의 개요
이하에서는 본 발명의 일부 측면의 기본적 이해를 제공하기 위하여 본 발명의 간략화된 요약을 제공한다. 본 개요는 본 발명의 포괄적인 개관은 아니다. 그것은 본 발명의 중대한(key/critical) 요소를 확인하고 본 발명의 범위를 정하기 위하려는 것이 아니다. 그 유일한 목적은 후술되는 상세한 설명에 대한 도입부로서 간략화된 형태로 본 발명의 일부 개념들을 제시하는 것이다.
여기에 개시된 것은 공통의 쉼들이 이용되어 어떤 서비스를 제공하거나 복수의 드라이버 또는 다른 유사한 어플리케이션과 연관된 특정한 문제를 수정할 수 있도록 하기 위하여 드라이버 고유의 컨텍스트의 정보를 구축 및 유지하는 시스템 및 방법이다. 고유의 컨텍스트 포메이션은 드라이버와 쉼 구성요소 사이에 존재하는 중간 컨텍스트 구성요소를 통하여 쉬밍 시스템으로 주입된다. 컨텍스트 구성요소는 후크 구성요소 및 썽크 구성요소를 포함한다. 상기 후크 구성요소는 드라이버에 의하여 참조되는 커널 프로시저에 관한 컨텍스트 정보를 기억하고 컨텍스트 구성요소로 드라이버 방향을 바꾼다. 썽크 구성요소는 컨텍스트 구성요소를 쉼 구성요소로 링크하고 쉼 구성요소에 드라이버 고유 컨텍스트 정보를 제공한다. 그 후, 쉼은 그 기능을 수행하며 후속하여 드라이버에 의하여 초기에 참조된 커널 프로시저 또는 서비스로 연결 또는 점프할 수 있다.
본 발명의 또 다른 측면에 따르면, 드라이버 고유 컨텍스트 정보를 실행하고 지원하는 쉬밍 시스템이 여기에 개시된다. 특히, 상기 시스템은 드라이버가 로드된 경우를 나타내는 통지신호를 수신하는 쉼 엔진 구성요소를 포함한다. 상기 신호를 수신하자 마자 쉼 엔진은 쉼 데이터 베이스에 질의하여 쉼 구성요소 또는 쉼 패키지가 상기 로드된 드라이버와 연관되는지 여부를 결정한다. 그 후, 쉼 엔진은 임의의 연관된 쉼 구성요소들을 로드하고 상기 로드된 드라이버와 연관된 컨텍스트 구성요소를 로드할 수 있다. 또한, 여기에 개시된 상기 쉬밍 시스템은 시스템을 모니터링하고, 시스템이 충돌하거나 또는 불안전성 또는 비능률이 검출되면, 쉼 데이터 베이스에 질의하여 상기 충돌, 불안전성 또는 비능률을 야기시키는 문제를 수정하거나 보상할 쉼 구성요소가 이용 가능한지 여부를 결정한다. 또한, 본 발명의 일 측면에 따른 쉬밍 시스템은 유저 또는 전개자(developer)에 의하여 쉼 구성요소 및 패키지의 전개, 배치, 및 관리를 용이하게 하는 인터페이스 구성요소를 채용할 수 있다.
상기 및 관련된 목적을 이루기 위하여, 본 발명의 특정한 예시적인 측면들이 이하의 상세한 설명 및 첨부된 도면들과 연계하여 여기에서 개시된다. 이 측면들은 본 발명이 실시될 수 있고, 그 모두가 본 발명에 의하여 커버되는 것이 의도되는 다양한 방법들을 나타낸다. 본 발명의 다른 장점들 및 신규한 특성들은 도면들과 연계하여 고려하는 경우 본 발명의 후속하는 상세한 설명으로부터 자명해질 수 있다.
본 발명의 이전의 그리고 다른 측면들은 이하의 상세한 설명 및 추후에 간략 히 설명되는 첨부도면으로부터 자명하게 될 것이다.
본 발명은 이제 첨부된 도면(동일한 참조부호는 동일한 요소들을 의미함)을 참조하여 기술된다. 그러나, 상기 도면 및 그에 대한 상세한 설명은 본 발명을 개시된 특정한 형태로 한정하려는 의도가 아님을 이해해야 한다. 오히려, 본 발명의 취지 및 범위내에 있는 모든 변형, 균등물, 및 대안을 커버하려는 의도이다.
본 출원에 이용된 바와 같이, 용어 "구성요소" 및 "시스템"은 컴퓨터 관련 엔티티, 하드웨어, 하드웨어 및 소프트웨어의 조합, 소프트웨어, 또는 실행중인 소프트웨어를 의미하려는 것이다. 예를 들어, 일 구성요소는 프로세서에서 실행하는 프로세스, 프로세서, 오브젝트, 실행가능(executable), 실행의 스레드(thread), 프로그램 및/또는 컴퓨터(그러나 이에 한정하는 것은 아님)일 수 있다. 예로서, 서버에서 실행하는 어플리케이션 및 서버는 모두 일 구성요소일 수 있다. 하나 이상의 구성요소들은 일 프로세스 및/또는 실행의 스레드내에 존재할 수 있고 일 구성요소는 하나의 컴퓨터상에 배치될 수 있고/거나 둘 이상의 컴퓨터들 사이에 분산될 수 있다.
또한, 본 발명은 소프트웨어, 펌웨어, 하드웨어, 또는 그 임의의 조합을 만들기 위한 표준 프로그래밍 및/또는 엔지니어링 기술을 이용하는 방법, 장치, 또는제조품으로서 실시될 수 있다. 여기에서 이용된 용어 "제조품"(또는 대안적으로 "컴퓨터 프로그램 제품")은 임의의 컴퓨터 판독가능 장치, 캐리어, 또는 미디어로부터 액세스 가능한 컴퓨터 프로그램을 포함하려는 것이다. 물론, 당업자는 본 발명의 범위 또는 취지를 벗어나지 않고서 본 구성에 대하여 많은 변형들이 이루어질 수 있음을 인식할 것이다.
도 4를 참조하면, 본 발명의 일 측면에 따른 쉬밍 시스템(400)이 도시된다. 시스템(400)은 드라이버 구성요소(410), 커널 구성요소(420), 프로시저(422)(프로시저1, 프로시저2 내지 프로시저N, 여기서 N은 1 이상임), 컨텍스트 구성요소(440) 및 쉼 구성요소(430)를 포함한다. 드라이버 구성요소(410)(여기서 단순히 드라이버로 지칭되기도 함)는 컴퓨터상에서 거의 어떤 기능이라도 수행하도록 이용될 수 있지만 드라이버 구성요소는 특정한 하드웨어 장치 또는 소프트웨어로의 인터페이스를 제공하도록 이용되는 것이 보통이다. 드라이버 구성요소(410)는 특정한 장치 또는 소프트웨어와 연관된 특별한 명령 및 정보를 캡슐화시킬 수 있고 유저에게(예를 들면 하드웨어, 소프트웨어)에게 한 세트의 일반적 명령(generic instructions)으로의 액세스를 제공할 수 있다. 장치들 또는 소프트웨어는 그 후 사이 일반적 명령을 이용하여 장치 또는 소프트웨어 구성요소와 통신한다. 드라이버 구성요소(410)는 수신된 일반적 명령들을 장치 또는 소프트웨어 구성요소에 의하여 이용되는 특정의 명령들로 변환시킬 수 있다. 드라이버 구성요소(들)는 오퍼레이팅 시스템, 소프트웨어 어플리케이션에 의하여, 또는 특별한 장치(예를 들면, 디스크 드라이브, 프린터, 스캐너, 키보드, 마우스, 스피커...)와 연관된 소프트웨어를 통하여 제공될 수 있다. 드라이버 구성요소(410)는 DLL(dynamically linked library) 파일들로서 컴퓨터 시스템내에서 실시될 수 있다. DLL 파일들은 특정한 기능을 수행하도록 더 큰 프로그램 또는 장치에 의하여 이용되는 작은 파일들이다. 예를 들 어, 드라이버 구성요소 또는 DLL 파일은 프린터와 같은 특정한 장치에 대한 지원을 제공할 수 있다. 그 후, 드라이버 구성요소 또는 DLL 파일은 워드 프로세싱 프로그램과 같은 더 큰 프로그램에 의하여 이용되어 상기 드라이버 구성요소와 연관된 특정 프린터를 이용하여 문서를 프린팅하는 것을 용이하게 할 수 있다.
도 5를 참조하면, 본 발명의 일 측면에 따른 드라이버 구성요소(410)가 더욱 상세히 도시된다. 드라이버 구성요소(410)는 드라이버 코드(412) 및 임포트 어드레스 테이블(414)을 포함한다. 드라이버 코드(412)는 드라이버 구성요소(410)가 드라이버 기능성을 실시하기 위하여 이용하는 소프트웨어 특정된 프로시저 및 기능에 대응한다. 드라이버 구성요소(410)는 그 유틸리티를 증대할 수 있는 한편 커널 구성요소에 의하여 제공되는 외부 서비스 또는 프로시저(422)(도 4)를 이용하여 전체 사이즈를 줄일 수 있다. 드라이버 구성요소(410)는 임포트 어드레스 테이블(414)을 이용하여 "임포팅"함으로써 외부 프로시저(422)에 액세스한다. 드라이버 구성요소(410)가 로드되거나 실행되는 경우 임포트 테이블에 리스트된 프로시저(422)는 드라이버에 구속되어 드라이버는 거기에 제공된 기능 및 프로시저를 이용할 수 있다. 이 구속은 여기에서는 드라이버 연결(driver linkage) 또는 임포트 연결(import linkage)로서 지칭된다.
이 상세한 설명은 거의 배타적으로 드라이버 및 드라이버 구성요소에 초점을 맞추지만, 본 발명의 범위는 그렇게 제한되는 것은 아니라는 점을 주목해야 한다. 본 발명의 범위는 쉬밍될 수 있는 임의의 어플리케이션 또는 구성요소, 드라이버 또는 그 밖의 것을 커버한다. 본 명세서가 드라이버 및 드라이버 구성요소에 초점 을 맞추는 한편, 쉬밍될 수 있는 다른 모든 소프트웨어 어플리케이션의 배제를 의도하는 것은 아니며, 오히려 혼동되는 용어(예를 들면, 클라이언트/어플리케이션/구성요소/드라이버)없이 본 발명의 명백하고 이해 가능한 설명을 용이하게 하려는 것이다.
다시 도 4를 참조하면, 커널 구성요소(420)는 컴퓨터 오퍼레이팅 시스템의 핵심이다. 오퍼레이팅 시스템은 일반적으로는 데이터를 처리하고 입력 및 출력을 관리하는 것에 대한 책임이 있다. 오퍼레이팅 시스템의 일부로서, 커널 구성요소(420)가 먼저 로드되고 메인 메모리에 잔류한다. 프로세스 관리, 파일 관리, 및 메모리 관리에 대한 책임이 있는 것 이외에, 무엇보다도, 커널 구성요소(420)는 어플리케이션 및 드라이버에 의하여 요구되는 본질적인 서비스 또는 프로시저(422)를 제공한다. 프로시저(422)는 I/O 스케쥴링, 버퍼링 스풀링, 및 에러 핸들링에 대응할 수 있다(그러나 이에 한정하는 것은 아님). 더욱이, 여기에 이용된 용어 커널 모드 서비스 또는 커널 모드 프로시저는 커널 어드레스 공간에 위치된 임의의 서비스, 프로시저, 드라이버, 어플리케이션 또는 다른 구성요소를 커버하려는 의도임을 주목해야 한다.
쉼 구성요소(430)는 드라이버 구성요소(410)와 커널 서비스 또는 프로시저(422) 사이에서 추가적인 기능성을 제공한다. 본 발명의 일 측면에 따르면 그런 기능성은 고장 드라이버에 대한 수정(fix)에 대응할 수 있지만, 쉼 구성요소(430)는 또한 진단 쉼으로서 이용되어 근본 원인(root cause) 분석을 보조할 수 있다. 고장 드라이버는 보통은 오퍼레이팅 시스템에 기인한 것으로 잘못 여겨지는 부정적 인 컴퓨터 경험(예를 들면, 지연, 교착(lockups)...)에 원인이 되는 많은 시스템 충돌 및 다른 문제들의 원인이 될 수 있다. 쉼 구성요소(420)는 드라이버 고장을 보상함으로써 드라이버의 행위를 수정하는 메커니즘을 제공한다. 따라서, 쉼 구성요소(430)는 하나 이상의 드라이버 구성요소(410)와 바람직한 프로시저(422)를 갖춘 커널 구성요소 사이에 존재한다. 그러나, 종래의 쉬밍 시스템과는 달리, 본 발명은 또한 컨텍스트 구성요소(440)를 이용한다.
컨텍스트 구성요소(440)는 드라이버 시스템 호출과 공통의 쉼 구성요소(430) 사이의 중간적 구성요소이다. 컨텍스트 구성요소(440)는 고유한 드라이버당(per-driver) 연결 정보를 구축 및 유지하는 메커니즘을 제공한다. 종래의 쉬밍 시스템은 쉼 구성요소를 호출하는 각각의 드라이버에 대한 컨텍스트를 구축하지 않으며, 오히려 쉼 그 자체에 매입된(embedded) 하나의 연결 구성만을 보유한다(특히 쉬밍된 마지막 드라이버의 연결 구성). 따라서, 이전의 쉬밍된 드라이버에 연관된 모든 쉼 연결 구성 데이터는 상실된다. 도 6을 참조하면, 본 발명의 일 측면에 따라, 컨텍스트 구성요소(440)는 후크 구성요소(442) 및 썽크 구성요소(444)를 포함하여 더욱 상세히 도시된다. 후크 구성요소(442)는 주체 드라이버(subject driver)의 로딩동안 구성될 수 있다. 후크 구성요소(442)는 쉬밍되는 드라이버로부터 컨텍스트의 정보를 검색하고(예를 들면, 후술되는 쉼 엔진구성요소를 이용하여) 그런 정보를 썽크 구성요소(44)가 이용 가능하게 한다. 특히, 후크 구성요소(442)는 드라이버의 IAT(import address table)로부터의 일 드라이버에 의하여 이용되기 위하여 구해지는 커널 프로시저 또는 서비스의 어드레스를 검색할 수 있다. 또한, 후크 구성요소(442)는 이용되는 쉼의 어드레스를 결정할 수 있다. 이 컨텍스트 데이터는 그 후 썽크 구성요소(442) 및 쉼 구성요소(430)에 의한 나중의 액세스를 위하여 데이터 구조내에 기억될 수 있다. 썽크 구성요소(444)는 후크 구성요소(442)에 의하여 검색된 정보를 이용하여 드라이버의 임포트 어드레스 테이블을 변경하여 초기 특정된 서비스 또는 프로시저보다는 쉼의 위치를 가리키거나 참조하도록 한다. 또한, 썽크 구성요소(444)는 쉼 구성요소(430)에 쉼 구성요소(430)를 호출하는 드라이버와 관련된 컨텍스트 정보로의 액세스를 제공한다. 컨텍스트 정보는 그런 정보 또는 상기 정보의 위치를 프로시저 파라미터로서 보내거나 쉼 구성요소(430)에 알려진 특정한 위치에 상기 데이터를 기억시킴으로써 쉼 구성요소(430)에 제공될 수 있다. 쉼 구성요소(430)는 그 후 이 정보를 이용하여 호출 드라이버의 초기 참조된 커널 프로시저를 검색할 수 있다. 후속하여, 쉼 구성요소(430)는 추가적인 기능성(예를 들면, 드라이버 수정(fix))을 제공한 후 초기 참조 프로시저 또는 서비스로 연쇄될 수 있다.
도 7을 참조하면, 본 발명의 일 측면에 따른 예시적인 시스템(700)의 블럭도가 도시된다. 시스템(700)은 두개의 상이한 드라이버 구성요소들 사이에서의 컨텍스트 구성요소의 사용을 묘사한다. 드라이버 X(710) 및 드라이버 Y(720)는 각각의 드라이버 코드(712 및 722) 및 임포트 어드레스 테이블(714 및 724)을 포함한다. 또한, 각각의 드라이버는 컨텍스트 구성요소(730 및 740)와 연관된다. 공통의 쉼 구성요소(750)가 이용되어 드라이버 및 커널 구성요소 프로시저 Foo(762)와 VerifierFoo(764) 사이에 추가적인 기능성을 제공한다. 드라이버 X(710)는 그 코 드 섹션(710)내의 Foo 프로시저(762)를 이용한다. 따라서, 드라이버 X의 임포트 어드레스 테이블(714)내에는 커널 프로시저(762)를 포함하는 메모리 위치를 가리키는 포인터가 존재한다. 그러나, 여기에서, 일 쉼 구성요소(750)가 이용되어 추가적 기능성(예를 들면, 드라이버 X(71)와의 문제를 보상하는 것)을 제공하였다. 본 발명의 일 측면에 따르면, 컨텍스트 구성요소(730)도 이용되어 쉼 구성요소(750)로 드라이버 특정 컨텍스트 정보를 제공한다. 컨텍스트 구성요소(730)는 후크 구성요소(732) 및 썽크 구성요소(734)를 포함한다. 후크 구성요소(732)는 초기에 Foo를 참조하는 임포트 어드레스 테이블(714)내의 포인터를 변경하여 컨텍스트 구성요소(730)를 가리키거나 Foo 프로시저의 드라이버 X의 임포트를 컨텍스트 구성요소(730)로 연결시킨다. 또한, 컨텍스트 구성요소(730)는 쉼 구성요소(750)의 메모리 어드레스를 수신하고, 데이터 구조(여기서는 후크 구조)에, 무엇보다도, 쉼 구성요소(750)로의 포인터 및 초기에 참조된 커널 프로시저 Foo(762)로의 포인터를 기억시킨다. 따라서, 후크 구조는 드라이버 컨텍스트 정보를 포함한다. 썽크 구성요소(734)는 이 정보를 이용하여 쉼 구성요소(750)로 점프하며 쉼 구성요소(750)에 컨텍스트 데이터를 제공한다. 상기 점프가 완료된 후, 쉼 구성요소(750)는 그 기능을 실행하고 그 후 상기 컨텍스트 데이터를 이용하여 오리지날 프로시저 호출 Foo(762)를 연결 및 궁극적으로는 실행한다.
드라이버 Y(720)는 공통의 쉼 구성요소(750)와 유사한 프로세스를 거친다. 이 경우, 그러나, 드라이버 Y(720)는 그 고유의 컨텍스트 구성요소(740) 및 상이한 프로시저 호출을 이용한다. 드라이버 Y(720)는 궁극적으로는 Foo 프로시저(762)를 호출하려고 하지만, 여기에 도시된 바와 같이, VerifierFoo 프로시저(764)를 호출한 이후이다. 드라이버 컨텍스트 구성요소(740)의 후크 구성요소(742)는 쉼 구성요소(750)에 의하여 호출된 프로시저에 관련된 정보를 결정 및 기억시킨다. 변경에 의하여 드라이버를 쉼 구성요소(750)로 연결시키는 썽크 구성요소(744)는 드라이버 Y의 임포트 어드레스 테이블(724)내의 참조 어드레스이다. 그 후, 드라이버 Y(720)가 코드섹션(722)내의 Foo 프로시저를 호출하는 경우 컨텍스트 구성요소(740)로 제어가 전송된다. 그 후, 컨텍스트 구성요소는 레지스터내에 상기 컨텍스트 정보로의 포인터를 기억시키거나 대안적인 수단으로서 상기 컨텍스트 정보의 위치 또는 컨텍스트 정보 그 자체를 쉼 구성요소(750)로 전송한다. 그 후, 쉼 구성요소(750)는 그 기능성을 실행하며 그리고 나서 컨텍스트 정보를 이용하여 확인 프로시저(verifier procedure, 764)로 점프하며, 이것은 Foo 프로시저(762)를 실행하며 그곳으로 점프한다. 각각의 드라이버에 대한 컨텍스트 데이터를 검색 및 유지함으로써, 본 발명은 또 다른 드라이버에 의한 쉼의 이용 또는 호출 이후 이전에 쉬밍된 드라이버에 대한 컨텍스트 데이터가 상실되지 않는 것을 확실히 하는 것을 주목해야 한다. 종래의 쉬밍 실시는 드라이버 Y(720)의 실행 후 드라이버 X(710)의 컨텍스트에 관한 정보를 상실할 것이다. 이 경우, 드라이버 X(710)가 드라이버 Y(720) 이후 다시 호출되었다면, 종래의 쉼은 드라이버 X(710)가 컨텍스트 데이터로서 초기에 참조한 어느 프로시저가 보유되지 않을 것인지 그리고 드라이버 임포트 어드레스 테이블내의 참조가 쉼 구성요소(750)를 참조하도록 변경될 것인지에 대하여 알지 못할 것이다. 본 발명은 각각의 드라이버 구성요소에 대하여 고유의 컨텍스트 정보를 기억함으로써 이 문제를 제거한다.
도 8은 본 발명의 일 측면에 따라 쉼을 이용하는 시스템(800)을 묘사한다. 시스템(800)은 드라이버 로드 구성요소(810), 쉼 엔진 구성요소(820), 쉼 데이터 베이스(830), 진단 구성요소(840), 및 인터페이스 구성요소(850)를 포함한다. 드라이버 로더 구성요소(810)는 일 엔티티(예를 들면, 사람, 어플리케이션, 장치, 플러그앤플레이 구성요소...)로부터 일 신호를 수신하여 드라이버를 로드한다. 드라이버 로더 구성요소(810)는 드라이버 초기 연결을 구축하고 목표 드라이버를 실행을 위한 메모리로 로드한다. 로더 구성요소(810)는 상기 드라이버가 외부 API 또는 프로세스에 대하여 가질 수 있는 미해결 동적 참조들(unresolved dynamic references)을 해결할 수 있고 모든 참조들이 해결되는 경우 통지신호를 생성한다. 통지 신호는, 무엇보다도, 쉼 엔진 구성요소(820)로 로드되는 드라이버의 식별(identity)을 제공한다. 그런 통지 신호는 드라이버가 호출되기 직전 드라이버 로드 프로시저동안 다른 서비스들이 제어를 수신하는 것을 허용한다. 쉼 엔진 구성요소는 상기 통지 신호를 수신하고 그곳에 포함된 정보를 이용하여 쉼 데이터 베이스(830)에 질의하여 목표 드라이버가 쉬밍되는지 여부를 결정한다. 쉼 데이터 베이스(830)는 어느 드라이버가 쉬밍될 필요가 있고 어느 쉼 구성요소가 특정한 드라이버에 적용되는지에 관한 데이터를 위한 중앙 보관소(central repository)로서 작용한다. 적어도 쉼 데이터 베이스(830)를 이용하여, 쉼 엔진 구성요소(820)가 한 드라이버가 쉬밍되어야 하는 것을 결정하면, 쉼 엔진 구성요소는 적용될 쉼 패키지 또는 쉼의 세트를 식별하고, 그들을 로드하며(만일 아직 로드되지 않았다면), 심이 고유한 컨텍스트를 초기화하도록 허용한다. 후속하여, 상기 쉼 엔진 구성요소(820)는 하나 이상의 구성요소들로 상기 목표 드라이버 API 임포트의 방향을 다시 정할 수 있다.
시스템(800)은 또한 컴퓨터 시스템을 분석하고 정정 조치를 개시하는 진단 구성요소(840)를 포함할 수 있다. 본 발명의 일 측면에 따르면, 상기 진단 구성요소(840)는 시스템 충돌의 근본원인 분석(rot cause analysis)을 돕는다. 따라서, 진단 구성요소는 시스템 덤프 정보 및/또는 프로그램 추적을 분석(예를 들면, 엑스퍼트 시스템, 신경 회로망...을 이용하여)하는 다양한 방법을 이용하여 충돌의 원인을 결정할 수 있다. 그러나, 진단 구성요소(840)는 시스템 충돌을 기다릴 필요가 없다. 또한, 진단 구성요소(840)는 예방적으로 되고 시스템 불안전성 및/또는 비능률을 검출하기 위한 시스템 분석에 관련될 수 있다. 충돌의 원인을 결정하거나 시스템 불안전성 및/또는 비능률을 검출한 후, 진단 구성요소(840)에 의하여 정정 조치가 개시될 수 있다. 그런 정정 조치는 인터페이스(850)를 통하여 유저 또는 오퍼레이터에게 통지를 제공하는 것을 포함할 수 있다. 또한, 정정 조치는, 적용된다면 상기 검출된 문제, 불안전성 또는 비능률을 수정할 수 있는 쉼 구성요소가 이미 존재하는지 여부를 결정하기 위하여 쉼 데이터 베이스(830)를 검색하는 것을 포함할 수 있다. 그런 결정은 베이에시안(Bayesian) 네트워크, 신경회로망, 결정 트리, 지원벡터 기기(support vector machines), 선형 및 비선형 회귀(regression) 및/또는 다른 학습 모델(learning models)을 이용하여 지능적으로 이루어질 수 있다. 본 발명의 일 측면에 따르면, 진단 구성요소는 제조의 비용 에 기초하는 확률적 분석(probabilistic analysis) 및 부정확한 진단에 관련하고/거나 정정의 이익에 불리한 잘못된 쉼을 선택하는 것에 관련할 수 있다. 진단 구성요소의 동작을 제어하기 위하여 개발자 또는 유저에 의하여 신뢰수준(confidence levels)이 이용되고 특정될 수 있다.
인터페이스 구성요소(850)는 유저가 쉼 데이터 베이스(830)와 상호작용하는 것을 가능하게 한다. 본 발명의 일 측면에 따르면, 인터페이스 구성요소(850)는 드라이버에 대한 쉼 구성요소 또는 쉼 패키지의 생성 및 쉼 데이터 베이스(830)로의 쉼 구성요소 또는 쉼 패키지의 기억을 용이하게 하는 GUI(graphical user interface)이다. 예를 들어, 인터페이스 구성요소(850)는 검출된 문제, 불안전성, 또는 비능률을 치유하기 위한 쉼 구성요소의 생성을 돕는 그래픽 윈도우에서의 일련의 단계들을 유저에게 제시하는 위저드(wizard)일 수 있다. 인터페이스 구성요소(850)는 또한 한 문제를 결정하거나 집중하기 위한 동작 시퀀스의 이해를 도울 수 있는 진단 쉼 구성요소를 전개하고(developing) 배치하는(deploying) 수단을 개발자 또는 유저에게 제공할 수 있다.
전술된 예시적인 시스템에서, 본 발명에 따라 실시될 수 있는 방법론은 도 9 내지 11의 흐름도를 참조하여 더 잘 이해될 것이다. 간단한 설명을 위하여, 상기 방법론은 일련의 블럭들로 도시되고 설명되지만, 본 발명에 따라, 일부 블럭들은 여기에서 도시되고 설명된 것으로부터 다른 블럭들과 상이한 순서 및/또는 그와 동시에 발생할 수 있으므로, 본 발명은 상기 블럭들의 순서에 의하여 한정되지 않음이 이해되어야 한다. 또한, 도시된 모든 블럭들이 본 발명에 따른 방법론을 실시 할 것이 요구되는 것은 아닐 수 있다.
또한, 이후에 그리고 본 명세서에 걸쳐 개시된 방법론들은 그런 방법론들을 컴퓨터로 전송하는 것을 용이하게 하도록 제조의 물품에 기억될 수 있는 것도 이해되어야 한다. 상기 용어 제조의 물품은, 임의의 컴퓨터 판독가능 장치, 캐리어, 또는 미디어로부터 액세스 가능한 컴퓨터 프로그램을 포함하려는 것이다.
도 9를 참조하면, 커널 모드 드라이버를 쉬밍하기 위한 방법론(900)은 본 발명의 일 측면에 따라 묘사된다. 910에서, 수 개의 드라이버에 공통인 쉼 구성요소가 생성된다. 공통의 쉼 구성요소는 예를 들면, 하나 이상의 드라이버와 연관된 오류를 보상하기 위하여 하나 이상의 드라이버에 기능성을 부가하는 효율적인 메커니즘을 제공한다. 쉼 구성요소는 프로그램 에디터 및/또는 그래픽 유저 인터페이스를 이용하여 생성될 수 있다. 대안적으로, 쉼 구성요소는 버튼, 스크롤 바, 텍스트 박스 등과 같은 무수한 윈도우즈 및 그래픽 인터페이스 구성요소를 이용하여 쉼 구성요소를 생성하는 것과 연관된 일련의 단계들을 통하여 유저 또는 개발자를 가이드하는 위저드를 이용하여 생성될 수 있다. 920에서, 쉬밍되는 각각의 드라이버에 대하여 드라이버 고유 컨텍스트 데이터가 생성된다. 후속하여, 상기 드라이버 고유의 컨텍스트는 930에서 공통의 쉼으로 제공된다. 상기 고유의 컨텍스트 데이터는 공통의 쉼 구성요소가 쉼 구성요소를 이용하는 드라이버를 식별하는 것을 허용한다. 이것은 쉼 구성요소가 추가적인 기능성을 부가하고 그 후 드라이버에 의하여 이용된 커널 모드 서비스 또는 프로시저로 연쇄하는 것을 가능하게 하여 드라이버의 실행의 연쇄(driver's chain of execution)를 원래대로 유지한다.
도 10은 본 발명의 일 측면에 따라 커널 모드 드라이버를 쉬밍하는 방법론(1000)을 도시하는 흐름도이다. 1010에서, 복수의 드라이버에 공통인 쉼 구성요소가 생성된다. 전술된 바와 같이, 쉼 구성요소는 예를 들면 일부 오류(예를 들면, 제한된 메모리를 참조함...)를 보상하도록 드라이버에 기능성을 부가하는 효율적인 메커니즘을 제공한다. 그러나, 쉼 구성요소는 시스템 문제들을 결정하고 특정하기 위한 툴로서 이용될 수 있음도 주목해야 한다. 상기 쉼 구성요소는, 예를 들면 GUI 또는 위저드를 이용하여, 몇 가지 방법, 구성요소, 및 장치중 하나를 이용하여 생성될 수 있다. 1020에서, 드라이버의 임포트된 API 또는 커널 모드 서비스는 드라이버 임포트 어드레스 테이블로부터 검색된다. 후속하여, 1030에서 그 임포트 어드레스 테이블내의 드라이버 API 서비스 참조는 쉼 구성요소로의 포인터로 대체된다. 상기 대체된 API 또는 커널 모드 서비스는 그 후 1040에서 상기 쉼으로 제공된다. 이 컨텍스트 정보는, 쉼을 호출하는 함수(function) 또는 프로시저에서 파라미터로서 이용하고, 특정한 메모리 위치로 로딩하는 것 등에 의하여 상기 쉼 구성요소로 제공될 수 있다. 따라서, 공통의 쉼 구성요소에 연관된 드라이버는 쉼 구성요소로 연결되게 되며, 이것은 그 후 상기 쉼 구성요소가 그 추가적인 부가된 기능성을 실행한 후 API 또는 커널 모드 서비스로 연쇄할 수 있다.
도 11은 본 발명의 일 측면에 따라 커널 모드 드라이버를 수정하는 방법(1100)을 묘사한다. 1110에서, 하나의 드라이버가 로드되었다는 것을 표시하는 신호가 수신된다. 본 발명의 일 측면에 따르면, 상기 신호는 상기 드라이버가 외부 API에 대하여 가질 수 있는 임의의 미해결 동적 참조를 해결한 후 드라이버 로더 구성요소에 의하여 생성될 수 있다. 그런 통지는 호출되는 드라이버의 드라이버 엔트리 직전에 다른 서비스가 제어를 수신하는 것을 허용한다. 1120에서, 드라이버가 쉬밍되는 것인지 여부를 결정하기 위하여 쉼 데이터 베이스에 대하여 질의가 수행된다. 그 후 1130에서 상기 드라이버와 연관된 쉼 구성요소의 존재 또는 비존재에 기하여 상기 드라이버가 쉬밍되는지 여부에 대한 결정이 이루어진다. 상기 드라이버와 연관된 쉼이 존재하지 않으면 상기 프로시저는 종료된다. 그러나, 만일 상기 드라이버와 연관된 하나 이상의 쉼이 존재하면 상기 프로세스는 고유의 드라이버 컨텍스트가 초기화되고 로드되는 1140으로 진행한다. 후속하여, 상기 드라이버는 1150에서 커널 모드 서비스 또는 프로시저와 같은 드라이버 임포트 엔트리보다는 상기 쉼 구성요소로 방향이 바뀐다. 그런 방향전환(redirection)은 드라이버의 임포트 어드레스 테이블내의 엔트리를 상기 쉼 구성요소로의 포인터로 대체함으로써 이루어질 수 있다. 그 후, 상기 쉼 구성요소는 상기 대체된 드라이버 임포트 엔트리로 연쇄하도록 상기 고유의 드라이버 컨텍스트를 이용할 수 있다(그러나 요구되는 것은 아님). 본 발명의 다양한 측면들에 대한 컨텍스트를 제공하기 위하여, 도 12 및 이하의 설명은 본 발명의 다양한 측면들이 실시될 수 있는 적절한 컴퓨팅 환경의 간단한, 일반적인 설명을 제공하는 것을 의도한다. 본 발명은 컴퓨터 및/또는 컴퓨터에서 실행하는 컴퓨터 프로그램의 컴퓨터 실행가능 명령의 일반적인 컨텍스트에서 전술되었지만, 당업자는 본 발명은 다른 프로그램 모듈과 조합하여 실행될 수 있음도 이해할 것이다. 일반적으로, 프로그램 모듈은 특정의 태스크를 수행하고/거나 특정의 추상적 데이터 유형을 실시하는 루틴, 프로그램, 구성요소, 데이터 구조, 등을 포함한다. 또한, 당업자는 본 발명의 방법들은 단일의 프로세서 또는 멀티프로세서 컴퓨터 시스템, 미니 컴퓨팅 장치, 메인프레임 컴퓨터, 및 퍼스널 컴퓨터, 휴대형 컴퓨팅 장치, 마이크로프로세서 기반 또는 프로그램 가능 소비자 전자장치, 등을 포함하는 다른 컴퓨터 시스템 구성들과 함께 실시될 수 있음을 이해할 것이다. 본 발명의 상기 예시된 측면들은 통신 네트워크를 통하여 연결되는 원격 프로세싱 장치들에 의하여 태스크가 수행되는 분산된 컴퓨팅 환경에서 실시될 수도 있다. 그러나, 본 발명의 모든 측면들은 아니더라도 일부는 독립형(stand-alone) 컴퓨터에서 실시될 수 있다. 분산된 컴퓨팅 환경에서, 프로그램 모듈은 로컬 및 원격 메모리 기억장치 모두에 위치될 수 있다.
도 12를 참조하면, 본 발명의 다양한 측면들을 실시하는 예시적인 환경(1210)은 컴퓨터(1212)를 포함한다. 컴퓨터(1212)는 프로세싱 유니트(1214), 시스템 메모리(1216), 및 시스템 버스(1218)를 포함한다. 시스템 버스(1218)는 시스템 메모리(1216)를 포함하는(이에 한정하지는 않음) 시스템 구성요소들을 프로세싱 유니트(1214)로 연결한다. 프로세싱 유니트(1214)는 다양한 이용 가능한 프로세서들중 어느 하나일 수 있다. 듀얼 마이크로 프로세서 및 다른 멀티프로세서 아키텍쳐가 프로세싱 유니트(1214)로서 이용될 수도 있다.
시스템 버스(1218)는 11 비트 버스, ISA(Industrial Standard Architecture), MSA(Micro-channel Architecture), EISA(Extended ISA), IDE(Intelligent Drive Electronics), VLB(VESA Local Bus), PCI(Peripheral Component Interconnect), USB(Universal Serial Bus), AGP(Advanced Graphics Port), PCMCIA(Personal Computer Memory Card International Association bus), 및 SCSI(Small Computer systems Interface)를 포함하는(그러나 이에 한정하는 것은 아님) 다양하게 이용 가능한 버스 아키텍쳐를 이용하는 메모리 버스 또는 메모리 제어기, 주변장치 버스 또는 외부 버스, 및/또는 로컬 버스를 포함하는 버스 구조(들)의 몇 가지 유형들중 어느 하나일 수 있다.
시스템 메모리(1216)는 휘발성 메모리(1220) 및 비휘발성 메모리(1222)를 포함한다. 예를 들면, 스타트업(start-up)동안, 컴퓨터(1212)내의 소자들 사이에서 정보를 전송하는 기본 루틴들을 포함하는 BIOS(basic input/output system)는 비휘발성 메모리(1222)에 기억된다. 예로서(제한이 아님), 비휘발성 메모리(1222)는 ROM(read only memory), PROM(programmable ROM), EPROM(electrically programmable ROM), EEPROM(electrically erasable ROM)또는 플래시 메모리를 포함할 수 있다. 휘발성 메모리(1220)는 외부 캐시 메모리로서 작용하는 RAM(random access memory)를 포함한다. 제한이 아닌 예로서, RAM은 SRAM(synchronous RAM), DRAM(dynamic RAM), SDRAM(synchronous DRAM), DDR SDRAM(double data rate SDRAM), ESDRAM(enhanced SDRAM), SLDRAM(Synchlink DRAM), 및 DRRAM(direct Rambus RAM)과 같은 많은 형태로 이용 가능하다.
컴퓨터(1212)는 또한 제거가능/제거불가능, 휘발성/비휘발성 컴퓨터 기억 미디어를 포함한다. 도 12는 예를 들면 디스크 기억장치(1224)를 도시한다. 디스크 기억장치(4124)는 자기디스크 드라이브, 플로피 디스크 드라이브, 테이프 드라이브, 재즈(Jaz) 드라이브, 지프(Zip) 드라이브, LS-100 드라이브, 플래시 메모리 카 드, 또는 메모리 스틱과 같은 장치들을 포함(그러나 이에 국한하는 것은 아님)한다. 또한, 디스크 기억장치(1224)는 독립적으로 또는 CD-ROM(compact disk ROM) 장치, CD 기록가능 드라이브(CD-R Drive), CD 재기록가능 드라이브(CD-RW Drive) 또는 DVD-ROM(digital versatile disk ROM) 드라이브와 같은 광디스크 드라이브를 포함(그러나 이에 국한하지는 않음)하는 다른 기억 미디어와 조합하여 기억 미디어를 포함할 수 있다. 디스크 기억장치(1224)의 시스템 버스(1218)로의 접속을 용이하게 하기 위하여, 인터페이스(1226)와 같은 제거가능 또는 제거불가능 인터페이스가 이용되는 것이 보통이다.
도 12는 적절한 오퍼레이팅 환경(1210)에서 설명된 기본 컴퓨터 리소스들과 유저들 사이의 중간체로서 작용하는 소프트웨어를 설명하는 것이 이해되어야 한다. 그런 소프트웨어는 오퍼레이팅 시스템(1228)을 포함한다. 디스크 기억장치(1224)에 기억될 수 있는 오퍼레이팅 시스템(1228)은 컴퓨터 시스템(1212)의 리소스들을 제어 및 할당하는 작용을 한다. 시스템 어플리케이션(1230)은 시스템 메모리(1216) 또는 디스크 기억장치(1224)에 기억된 프로그램 데이터(1234) 및 프로그램 모듈(1232)을 통하여 오퍼레이팅 시스템(1228)에 의한 리소스들의 관리를 이용한다. 본 발명은 다양한 오퍼레이팅 시스템 또는 오퍼레이팅 시스템의 조합으로 실시될 수 있음이 이해된다.
유저는 입력장치(들)(1236)를 통하여 컴퓨터(1212)로 명령 또는 정보를 입력한다. 입력장치(1236)는 마우스, 트랙볼, 스타일러스, 터치패드, 키보드, 마이크로폰, 조이스틱, 게임패드, 위성접시, 스캐너, TV 튜너카드, 디지털 카메라, 디지 털 비디오 카메라, 웹카메라, 등과 같은 포인팅 장치를 포함한다(그러나 이에 한정되는 것은 아님). 이러한 그리고 다른 입력장치들은 인터페이스 포트(들)(1238)를 경유하여 시스템 버스(1218)를 통하여 프로세싱 유니트(1214)로 접속된다. 인터페이스 포트(들)(1238)는 예를 들면, 시리얼 포트, 패러렐 포트, 게임 포트, 및 USB(universal serial bus)를 포함한다. 다른 장치(들)(1240)는 입력장치(들)(1236)로서 동일한 유형의 포트들중 일부를 이용한다. 따라서, 예를 들면, USB 포트가 이용되어 컴퓨터(1212)로의 입력을 제공하고, 컴퓨터(1212)로부터 출력장치(1240)로 정보를 출력할 수 있다. 출력 어댑터(1242)가 제공되어 다른 출력장치들(1240) 가운데, 특별한 어댑터를 요구하는 모니터, 스피커, 및 프린터와 같은 몇몇 출력장치들(1240)이 존재함을 도시한다. 출력 어댑터(1242)는 제한이 아닌 예로서, 출력장치(1240)와 시스템 버스(1218) 사이에 접속의 수단을 제공하는 비디오 및 사운드 카드를 포함한다. 다른 장치들 및/또는 장치들의 시스템들은 원격 컴퓨터(들)(1244)와 같은 입력 출력 성능을 모두 제공한다는 점이 주목되어야 한다.
컴퓨터(1212)는 원격 컴퓨터(들)(1244)와 같은 하나 이상의 원격 컴퓨터들로의 논리접속을 이용하는 네트워크된 환경에서 동작할 수 있다. 원격 컴퓨터(들)(1244)는 퍼스널 컴퓨터, 서버, 라우터, 네트워크 PC, 워크스테이션, 마이크로프로세서 기반 어플라이언스, 피어장치 또는 다른 공통의 네트워크 노드 등일 수 있으며, 컴퓨터(1212)에 관련하여 설명된 많은 또는 모든 소자들을 포함하는 것이 보통이다. 간략화를 위하여, 메모리 기억장치(1246)만이 원격 컴퓨터(들)(1244)와 함께 도시된다. 원격 컴퓨터(들)(1244)는 네트워크 인터페이스(1248)를 통하여 컴 퓨터(1212)로 논리 접속되며 그 후 통신접속(1250)을 통하여 물리적으로 접속된다. 네트워크 인터페이스(1248)는 LAN(local-area networks) 및 WAN(wide-area networks)와 같은 통신네트워크를 포함한다. LAN 기술은 FDDI(Fiber Distributed Data Interface), CDDI(Copper Distributed Data Interface), 이더넷/IEEE 1102.3, 토큰링/IEEE 1102.5 등을 포함한다. WAN 기술은 포인트-대-포인트 링크, ISDN(Integrated Services Digital Networks)와 같은 회로 스위칭 네트워크 및 그 변형들, 패킷 스위칭 네트워크, 및 DSL(Digital Subscriber Lines)을 포함한다(그러나 이에 한정하는 것은 아님).
통신 접속(들)(1250)은 네트워크 인터페이스(1248)를 버스(1218)로 접속하기 위하여 이용된 하드웨어/소프트웨어를 의미한다. 통신접속(1250)은 컴퓨터(1212)내부에서 명료한 도시를 위하여 도시되는 한편, 컴퓨터(1212)의 외부에 있을 수도 있다. 네트워크 인터페이스(1248)로의 접속에 필요한 하드웨어/소프트웨어는 예를 들면, 예시적인 목적으로만, 정규의 전화 등급 모뎀, 케이블 모뎀 및 DSL 모뎀, ISDN 어댑터, 및 이더넷 카드를 포함하는 모뎀들과 같은 내부 및 외부 기술들을 포함한다.
전술된 것은 본 발명의 예시들을 포함한다. 물론, 본 발명을 설명하기 위한 구성요소 또는 방법론의 모든 가능한 조합을 설명하는 것은 불가능하지만, 당업자는 본 발명에 대한 다른 많은 조합 및 변형이 가능하다는 것을 인식한다. 따라서, 본 발명은 첨부된 청구범위의 취지 및 범위내에 있는 그러한 모든 개조, 수정 및 변형을 포함하는 것을 의도한다. 또한, 상세한 설명이나 청구범위에서 용어 "포함 하다(include)"가 이용되는 한, 그런 용어는, "포함하는(comprising)"이 청구항내에서 전환된 단어로서 이용되는 경우 번역되는 바와 같이 용어 "포함하는(comprising)"과 유사한 방식으로 포괄적으로 되는 것이 의도된다.
본 발명에 따르면, 어떤 서비스를 제공하거나 복수의 드라이버 또는 다른 유사한 어플리케이션과 연관된 특정한 문제를 수정할 수 있도록 하기 위하여 드라이버 고유의 컨텍스트의 정보를 구축 및 유지하는 시스템 및 방법이 제공된다.

Claims (30)

  1. 커널 모드 쉬밍(kernel-mode shimming)을 위한 시스템에 있어서,
    프로세싱 유니트;
    메모리;
    복수의 드라이버 구성요소;
    상기 복수의 드라이버 구성요소에 부가된 기능성(functionality)을 제공하는 공통의 쉼(shim) 구성요소;
    드라이버 컨텍스트 정보를 검색 및 유지하는, 각각의 드라이버 구성요소와 연관된 컨텍스트 구성요소;
    커널 모드 서비스로부터 상기 컨텍스트 구성요소로 실행 흐름의 방향을 바꾸도록(redirect), 드라이버 구성요소의 임포트 어드레스 테이블 내에서 상기 커널 모드 서비스와 연관된 적어도 하나의 어드레스를 상기 컨텍스트 구성요소의 어드레스로 대체하는 썽크(thunk) 구성요소- 상기 썽크 구성요소는 상기 컨텍스트 구성요소를 상기 공통의 쉼 컨포넌트에 연결(link)함 -; 및
    정정의 이익에 불리한 잘못된 쉼(shim)의 선택 및 부정확한 진단의 수행의 비용에 기초하여 확률적 분석(probabilistic analysis)을 행할 수 있는 진단 구성요소
    를 포함하는 커널 모드 쉬밍을 위한 시스템.
  2. 제1항에 있어서,
    상기 드라이버 컨텍스트 정보는 드라이버의 연결 구성을 포함하는, 커널 모드 쉬밍을 위한 시스템.
  3. 제2항에 있어서,
    상기 컨텍스트 구성요소는 상기 드라이버 구성요소의 임포트 어드레스 테이블로부터 커널 모드 서비스와 연관된 어드레스를 검색하는 후크(hook) 구성요소를 포함하는, 커널 모드 쉬밍을 위한 시스템.
  4. 제3항에 있어서,
    상기 후크 구성요소는 상기 컨텍스트 구성요소의 어드레스를 결정하는, 커널 모드 쉬밍을 위한 시스템.
  5. 제1항에 있어서,
    상기 썽크 구성요소는, 상기 컨텍스트 구성요소에 의하여 대체된 상기 커널 모드 서비스에 관한 컨텍스트 정보를 상기 공통의 쉼 구성요소에게 제공하는, 커널 모드 쉬밍을 위한 시스템.
  6. 제5항에 있어서,
    상기 공통의 쉼 구성요소는 상기 쉼 구성요소로부터 상기 커널 모드 서비스로 실행 흐름의 방향을 정하기 위해(direct) 상기 커널 모드 서비스로의 링크를 제공하는, 커널 모드 쉬밍을 위한 시스템.
  7. 제1항에 있어서,
    상기 공통의 쉼 구성요소에 의하여 제공된 상기 부가된 기능성은 드라이버 고장에 대한 보상을 포함하는, 커널 모드 쉬밍을 위한 시스템.
  8. 커널 모드 드라이버들(kernel-mode drivers)의 쉬밍(shimming)을 위한 시스템에 있어서,
    프로세싱 유니트;
    메모리;
    드라이버를 로드하고 특정 드라이버가 로드되었음을 나타내는 통지신호를 생성하는 드라이버 로더 구성요소;
    쉼 구성요소들을 저장하고, 쉬밍되는 드라이버들을 식별하며, 하나 이상의 쉼 구성요소를 쉬밍되는 드라이버와 연관시키는 쉼 데이터베이스;
    상기 드라이버 로더 구성요소로부터 통지 신호를 수신하고, 상기 특정 로드된 드라이버가 쉬밍될 필요가 있는지 여부를 결정하기 위해 상기 쉼 데이터베이스에 질의하며, 상기 드라이버와 연관된 쉼 구성요소들을 로드하는 쉼 엔진 구성요소; 및
    시스템 문제, 불안전성 또는 비효율성의 원인을 판단하고 수정 조치를 개시하는 진단 구성요소를 포함하고,
    상기 쉼 엔진 구성요소는 특정 로드된 드라이버와 연관된 컨텍스트 구성요소를 생성하고, 상기 컨텍스트 구성요소는,
    상기 로드된 드라이버에 의하여 이용되는 커널 모드 프로시저를 식별하는 데이터 구조; 및
    상기 로드된 드라이버를 상기 컨텍스트 구성요소에 연결하고 상기 컨텍스트 구성요소를 쉼 구성요소에 연결하기 위한 썽크 구성요소를 포함하는, 커널 모드 드라이버 쉬밍을 위한 시스템.
  9. 제8항에 있어서,
    상기 쉼 엔진 구성요소는 커널 모드 서비스인, 커널 모드 드라이버 쉬밍을 위한 시스템.
  10. 제8항에 있어서,
    상기 수정 조치는 상기 쉼 데이터 베이스에 저장된 하나 이상의 쉼 구성요소를 찾아 드라이버에 적용하는 것을 포함하는, 커널 모드 드라이버 쉬밍을 위한 시스템.
  11. 제8항에 있어서,
    상기 수정 조치는 유저에게 통지하는 것을 포함하는, 커널 모드 드라이버 쉬밍을 위한 시스템.
  12. 제8항에 있어서,
    교정 쉼 구성요소의 전개 및 배치를 용이하게 하는 인터페이스 구성요소를 더 포함하는 커널 모드 드라이버 쉬밍을 위한 시스템.
  13. 제12항에 있어서,
    상기 인터페이스 구성요소는 쉼 구성요소를 전개하거나 이전에 전개된 쉼 구성요소를 드라이버에 적용하는 일련의 단계들을 통하여 유저를 네비게이트(navigate)하는 쉼 위저드(shim wizard)를 포함하는, 커널 모드 드라이버 쉬밍을 위한 시스템.
  14. 커널 모드 드라이버 쉬밍을 위한 시스템에 있어서,
    프로세싱 유니트;
    메모리;
    복수의 드라이버 구성요소;
    상기 복수의 드라이버 구성요소에 공통인 쉼 구성요소; 및
    쉼 구성요소가 전체 드라이버 연결 구성 내에서 그의 호출자를 식별할 수 있도록 상기 쉼 구성요소에 드라이버 고유 컨텍스트 데이터를 제공하기 위한 수단;
    커널 모드 서비스로부터 상기 드라이버 고유 컨텍스트 데이터를 제공하기 위한 수단으로의 실행 흐름의 방향을 바꾸도록(redirect), 드라이버 구성요소의 임포트 어드레스 테이블 내에서 상기 커널 모드 서비스와 연관된 적어도 하나의 어드레스를 상기 드라이버 고유 컨텍스트 데이터를 제공하기 위한 수단의 어드레스로 대체하는 썽크(thunk) 구성요소 - 상기 썽크 구성요소는 상기 드라이버 고유 컨텍스트 데이터를 제공하기 위한 수단을 상기 공통의 쉼 컨포넌트에 연결(link)함 -; 및
    정정의 이익에 불리한 잘못된 쉼(shim)의 선택 및 부정확한 진단의 수행의 비용에 기초하여 확률적 분석(probabilistic analysis)을 행할 수 있는 진단 구성요소
    를 포함하는 커널 모드 드라이버 쉬밍을 위한 시스템.
  15. 제14항에 있어서,
    상기 컨텍스트 데이터는 드라이버 구성요소에 의해 이용되는 커널 모드 프로시저에 관한 정보를 포함하는, 커널 모드 드라이버 쉬밍을 위한 시스템.
  16. 커널 모드 드라이버 쉬밍을 위한 방법에 있어서,
    복수개의 드라이버에 공통인 쉼 구성요소를 생성하는 단계;
    쉬밍되는 각각의 드라이버와 연관된 드라이버 고유 컨텍스트 데이터를 생성하는 단계;
    커널 모드 서비스로부터 실행 흐름의 방향을 바꾸도록(redirect), 드라이버 구성요소의 임포트 어드레스 테이블 내에서 상기 커널 모드 서비스와 연관된 적어도 하나의 어드레스를 컨텍스트 구성요소의 어드레스로 대체하는 단계 - 썽크 구성요소가 상기 적어도 하나의 어드레스를 대체하고 상기 컨텍스트 구성요소를 상기 쉼 구성요소에 연결(link)함 -; 및
    상기 쉼 구성요소가 전체 드라이버 연결 구성에서 그의 호출자를 결정할 수 있도록 상기 드라이버 고유 컨텍스트 데이터를 상기 쉼 구성요소에 제공하고, 정정의 이익에 불리한 잘못된 쉼(shim)의 선택 및 부정확한 진단의 수행의 비용에 기초하여 확률적 분석(probabilistic analysis)을 행하는 단계
    를 포함하는 커널 모드 드라이버 쉬밍을 위한 방법.
  17. 제16항에 있어서,
    상기 호출자는 드라이버인, 커널 모드 드라이버 쉬밍을 위한 방법.
  18. 제16항에 있어서,
    상기 드라이버 고유 컨텍스트 데이터를 상기 쉼 구성요소에 제공하는 단계는 프로시저 또는 메소드 파라미터를 통하여 상기 콘텍스트 데이터를 보내는 단계를 포함하는, 커널 모드 드라이버 쉬밍을 위한 방법.
  19. 제16항에 있어서,
    상기 드라이버 고유 컨텍스트 데이터를 상기 쉼 구성요소에 제공하는 단계는 상기 드라이버 고유 컨텍스트 데이터를 메모리로 로드하는 단계를 포함하는, 커널 모드 드라이버 쉬밍을 위한 방법.
  20. 제16항에 있어서,
    쉼 구성요소, 컨텍스트 데이터, 및 드라이버 사이의 연관을 보존하는 방식으로, 쉼 데이터베이스에 상기 쉼 구성요소 및 상기 드라이버 고유 컨텍스트 데이터를 저장하는 단계를 더 포함하는 커널 모드 드라이버 쉬밍을 위한 방법.
  21. 커널 모드 드라이버 호출들을 수정하는 방법에 있어서,
    드라이버가 로드되었음을 표시하는 신호를 수신하는 단계;
    상기 로드된 드라이버가 연관된 쉼 구성요소들을 갖는지 판단하기 위해 쉼 데이터 베이스에 질의하는 단계;
    상기 로드된 드라이버와 연관된 임의의 쉼 구성요소들을 로드하는 단계;
    상기 로드된 드라이버에 대한 고유의 컨텍스트를 초기화하는 단계;
    커널 모드 서비스로부터 실행 흐름의 방향을 바꾸도록(redirect), 드라이버 구성요소의 임포트 어드레스 테이블 내에서 상기 커널 모드 서비스와 연관된 적어도 하나의 어드레스를 컨텍스트 구성요소의 어드레스로 대체하는 단계 - 썽크 구성요소가 상기 적어도 하나의 어드레스를 대체하고 상기 컨텍스트 구성요소를 쉼 구성요소에 연결(link)함 -;및
    상기 쉼 구성요소로 상기 로드된 드라이버의 방향을 고치고 - 상기 고유의 컨텍스트는 상기 쉼 구성요소로의 상기 로드된 드라이버를 식별함 -, 정정의 이익에 불리한 잘못된 쉼(shim)의 선택 및 부정확한 진단의 수행의 비용에 기초하여 확률적 분석(probabilistic analysis)을 행하는 단계
    를 포함하는 커널 모드 드라이버 호출들을 수정하는 방법.
  22. 제21항에 있어서,
    상기 쉼 구성요소로 상기 로드된 드라이버의 방향을 고치는 단계는 임포트되는 커널 모드 프로시저를 지정하는 드라이버 임포트 어드레스 테이블 엔트리를 상기 쉼 구성요소로의 포인터로 대체하는 단계를 포함하는, 커널 모드 드라이버 호출들을 수정하는 방법.
  23. 제22항에 있어서,
    상기 쉼 구성요소로부터, 상기 쉼 구성요소로의 포인터에 의해 대체된 상기 커널 모드 프로시저를 호출하는 단계를 더 포함하는 커널 모드 드라이버 호출들을 수정하는 방법.
  24. 삭제
  25. 삭제
  26. 삭제
  27. 삭제
  28. 삭제
  29. 삭제
  30. 삭제
KR1020040089637A 2003-12-10 2004-11-05 커널 모드 쉬밍을 위한 드라이버 특정 컨텍스트 KR101099337B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/732,746 2003-12-10
US10/732,746 US7392527B2 (en) 2003-12-10 2003-12-10 Driver-specific context for kernel-mode shimming

Publications (2)

Publication Number Publication Date
KR20050056852A KR20050056852A (ko) 2005-06-16
KR101099337B1 true KR101099337B1 (ko) 2011-12-26

Family

ID=34710424

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020040089637A KR101099337B1 (ko) 2003-12-10 2004-11-05 커널 모드 쉬밍을 위한 드라이버 특정 컨텍스트

Country Status (5)

Country Link
US (1) US7392527B2 (ko)
EP (1) EP1569100A3 (ko)
JP (1) JP4615971B2 (ko)
KR (1) KR101099337B1 (ko)
CN (1) CN1627258A (ko)

Families Citing this family (28)

* Cited by examiner, † Cited by third party
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
US8321655B2 (en) * 2009-06-13 2012-11-27 Phoenix Technologies Ltd. Execution parallelism 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
US20110063304A1 (en) * 2009-09-16 2011-03-17 Nvidia Corporation Co-processing synchronizing 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
US20120158794A1 (en) * 2010-12-20 2012-06-21 Microsoft Corporation Techniques to discover object interfaces
US9519600B2 (en) * 2011-03-04 2016-12-13 Microsoft Technology Licensing, Llc Driver shimming
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
US8695021B2 (en) * 2011-08-31 2014-04-08 Microsoft Corporation Projecting native application programming interfaces of an operating system into other programming languages
US20130055291A1 (en) * 2011-08-31 2013-02-28 Microsoft Corporation Describing native application programming interfaces of an operating system with metadata
JP5885616B2 (ja) * 2012-08-08 2016-03-15 キヤノン株式会社 情報処理装置、インストール方法、およびプログラム
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
US9384015B2 (en) 2013-07-16 2016-07-05 Intel Corporation Techniques for dynamically redirecting device driver operations to user space
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 湖南迈太科医疗科技有限公司 磁共振成像的匀场控制方法、装置和系统
CN115599505B (zh) * 2021-06-28 2024-07-05 华为技术有限公司 用户态中断请求的处理方法及装置
US20230110698A1 (en) * 2021-10-05 2023-04-13 Salesforce.Com, Inc. Systems and methods for implementing a shim database driver
US20230353640A1 (en) * 2022-04-27 2023-11-02 Viam Inc. Device control system and method

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20010044904A1 (en) * 1999-09-29 2001-11-22 Berg Ryan J. Secure remote kernel communication

Family Cites Families (22)

* Cited by examiner, † Cited by third party
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 メモリパッチデータのダイナミックリンク方式
JPH087709B2 (ja) * 1989-05-15 1996-01-29 インターナシヨナル・ビジネス・マシーンズ・コーポレーシヨン アクセス特権制御方法及びシステム
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
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

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20010044904A1 (en) * 1999-09-29 2001-11-22 Berg Ryan J. Secure remote kernel communication

Also Published As

Publication number Publication date
EP1569100A2 (en) 2005-08-31
JP2005182775A (ja) 2005-07-07
US20050149947A1 (en) 2005-07-07
KR20050056852A (ko) 2005-06-16
EP1569100A3 (en) 2007-11-28
US7392527B2 (en) 2008-06-24
JP4615971B2 (ja) 2011-01-19
CN1627258A (zh) 2005-06-15

Similar Documents

Publication Publication Date Title
KR101099337B1 (ko) 커널 모드 쉬밍을 위한 드라이버 특정 컨텍스트
US8739190B2 (en) Determining an extension to use to process an input object to a call in a program
US6253257B1 (en) Software Interface for dynamic API mapping
US6003095A (en) Apparatus and method for demand loading a dynamic link library
US8046779B2 (en) Dynamic resolution of dependent components
EP1224543B1 (en) Fixing applications that are incompatible to the operating system by providing stubs for apis
US6584612B1 (en) Transparent loading of resources from read-only memory for an application program
US7337436B2 (en) System and method for cross platform and configuration build system
US8516505B2 (en) Cross-platform compatibility framework for computer applications
US20090164973A1 (en) Contract programming for code error reduction
US10019598B2 (en) Dynamic service discovery
KR20120139692A (ko) 가상화를 위한 확장 포인트 선언적 등록
CN106796521B (zh) 独立于产品发布的api版本控制
US20040123308A1 (en) Hybird of implicit and explicit linkage of windows dynamic link labraries
US9286083B2 (en) Satisfying missing dependencies on a running system
US20100058305A1 (en) Automatic Generation of Language Bindings for Libraries Using Data from Compiler Generated Debug Information
US7519801B2 (en) Post-install configuration of modules during startup of a modular application platform
US10514940B2 (en) Virtual application package reconstruction
US7272824B2 (en) Method for runtime determination of available input argument types for a software program
US20050172263A1 (en) Methods, systems, and computer program products for integrating legacy applications into a platform-independent environment
US20040216138A1 (en) Method and system for processing input from a command line interface
US20050028152A1 (en) Method and apparatus for identifying a Java class package name without disassembling Java bytecodes
US20070083860A1 (en) SKU determination mechanism and API
US6901589B2 (en) System and method for determining a root cause of a failure
US7779430B2 (en) Method, system, and article of manufacture for providing service components

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
LAPS Lapse due to unpaid annual fee