정보공간_1

[6기 대구 류지현] Window Device Driver #1 본문

IT 놀이터/Elite Member Tech & Talk

[6기 대구 류지현] Window Device Driver #1

알 수 없는 사용자 2014. 8. 8. 07:27

안녕하세요. 대구멤버십 21-1기 류지현입니다.

제가 포스팅할 주제는 Windows Device Driver입니다.

그 중에서도 FileSystem MiniFilter Driver에 대해서 공부한 내용을 주로 포스팅 할 예정입니다.

오늘은 그중 첫번째로 Windows Device Driver에 대한 간단한 개념과, 디바이스 스택에 대해서 소개하겠습니다.


Windows Device Driver


Windows Device Driver란?

디바이스 드라이버란 특정 하드웨어나 장치를 제어하는 프로그램으로 주로 커널모드에서 동작하며, DDI 인터페이스를 이용해 장치와 운영체제 또는 장치와 응용프로그램간의 연결고리 역할을 해주는 프로그램입니다.


Windows에서의 Device Driver 개발

윈도우 디바이스 드라이버는 예전에는 주로 WDM(Windows Driver Model)형식으로 개발이 되었지만, 최근에는 개발자들이 보다 편리하게 개발 할 수 있도록 WDM을 COM기반으로 랩핑한 WDF(Windows Driver Foundation)를 사용합니다.

위의 WDM 또는 WDF를 이용하여 드라이버를 개발하기 위해서는 Microsoft에서 제공하는 WDK(Windows Driver Kit)을 설치해야 하며 WDK는 Msdn을 통해 자유롭게 다운로드 할 수 있습니다.

WDK 다운로드


1. 윈도우 핵심 운영체제 아키텍쳐



[출처 : WDF 윈도우를 위한 차세대 통합 드라이버 개발 모델]

(1) 유저모드와 커널모드

-> 윈도우는 유저모드와 커널모드 두가지의 동작방식을 가지고 있습니다. 일반적으로 어플리케이션과 어플리케이션에서 사용되는 API의 경우 유저모드에서 동작하며, 드라이버와 같은 핵심 운영체제는 일반적으로 커널모드에서 실행됩니다.

    유저모드에서 동작하는 프로그램의 경우 운영체제에서 신뢰하지 않기 때문에 커널모드에서 동작하는 프로그램에 비해 제한적인 환경에서 동작합니다. 그렇기 때문에 치명적인 오류에서 다소 자유로울 수 있지만, 커널모드에서 동작하는 프로그램의 경우 운영체제에서 신뢰하는 프로그램이기 때문에 적은 제약 사항에서 동작하고 그에따른 위험요소( 시스템 충돌과 같은..)를 가집니다.


(2) 어플리케이션 & 윈도우 API

-> 어플리케이션은 커널 모드 구성요소에 대해 직접적으로 접근 할 수 없기 때문에, 윈도우 API를 이용해서 I/O를 발생시기켜 디바이스로 부터 필요한 정보를 획득합니다. (대부분의 I/O는 어플리케이션에서 발생)


(3) 커널 서브시스템

-> 커널 서브시스템은 많은 핵심 윈도우 기능을 처리하는 부분으로써 시스템과 드라이버를 연동하는 DDI 루틴 또한 여기에 포함됩니다. 드라이버와 관련된 커널 서브시스템중 가장 많이 사용되는 커널 서브시스템으로는 I/O 매니저, PnP 매니저, 파워 매니저 등이 있습니다.


(4) 드라이버 & 디바이스

-> 드라이버는 커널 서브시스템과 디바이스간의 인터페이스를 제공합니다. 커널 서브시스템이 I/O를 특정 디바이스에 대해 요청하면 드라이버는 요청을 처리하여 I/O를 생성한 커널 서브시스템에게 디바이스로에서 얻은 데이터를 돌려 줍니다.


2. 디바이스 스택

커널 서브시스템이 특정 디바이스에 대한 I/O를 요청할 경우 하나 이상의 드라이버가 I/O를 처리 합니다. 각각의 드라이버는 자신이 처리과정 참여 여부를 나타내는 디바이스 오브젝트를 가지고있으며, 각각의 디바이스 오브젝트는 드라이버가 해당 I/O를 처리하기 위한 디스패치 함수들의 포인터를 포함하고 있고 이 함수를 이용하여 각각의 I/O를 처리하게 됩니다.

디바이스 스택은 이러한 처리과정을 위해 필요한것으로 디바이스는 각각의 디바이스 스택을 가지고, 각각의 디바이스 스택은 디바이스 오브젝트를 정렬하여 가지고 있습니다. 이때 하나의 디바이스는 하나의 디바이스 스택만을 가질 수 있으며, 드라이버들은 여러 디바이스 스택에 참여 할 수 있습니다.

그림으로 나타내자면 아래와 같습니다.


[출처 : WDF 윈도우를 위한 차세대 통합 드라이버 개발 모델]


위 글은 아래 래퍼런스를 기반으로 작성되었습니다.

Reference

- [MSDN] : Device and Driver Technologies

WDF 윈도우를 위한 차세대 통합 드라이버 개발 모델