티스토리 뷰

1. 디바이스 드라이버 


1.1.1  기본 설명


유형에 따라서 드라이버 개발 방법이 서로 다르기 때문에 한 가지 유형의 드라이버를 개발해본 개발자라도 다른 지식의 도움 없이 다른 유형의 드라이버를 작성하는 것은 어렵다. 요컨데 오디오 디바이스 드라이버를 개발해봤어도 블루투스  드라이버를 개발하는 것은 힘들다는 것이다. 


디바이스 드라이버는 오디오 배터리 블루투스 디스플레이 파일시스템 네트워크 등등등 아주 다양하다. 


1.1.2 레거시 드라이버


개발자들에게 레거시 드라이버(legacy driver)는 여러가지 의미로 사용되는데 PNP Driver(Plug and Play) 의 한 종류로 실제 하드웨어가 존재하지 않는 상황에서 가상의 하드웨어를 하나 만든 뒤 이를 위한 드라이버를 만들게 되는데 이 것을 레거시 드라이버라고 한다. 응용프로그램 또는 서비스 프로그램이 원할 때 메모리에 상주하거나 메모리에서 제거되는 목적으로 사용하는 커널 레벨에서 동작하는 코드를 얻기 위해 드라이버를 만들기도 하는데, 이 드라이버를 레거시 드라이버라고 한다. 전자의 경우 가상의 하드웨어라고 하더라도 윈도우가 볼 때는 실제 하드웨어나 다름 없기 때문에 엄격히 PNP 드라이버라고 부르는 것이 맞다고 생각되기 때문이다.


윈도우는 PNP관리자와 Power관리자를 운영하고 있는데 이들의 영향력에서 벗어난 드라이버가 바로 레거시 드라이버다. 즉 레거시 드라이버를 작성하는 개발자는 PNP, Power 관련 준비를 전혀 할 필요가 없다.  


레거시 드라이버를 작성하는 개발자가 준비해야할 함수 리스트 : 


DriverEntry

드라이버가 메모리에 상주할 때 호출되는 함수이다. 일종의 메인함수이다. 

DriverUnload

드라이버가 메모리에서 해제될 때 호출되는 콜백 함수이다. 함수는 선택적임으로 가지지 않을 수 있다. 이 함수를 사용하지 않으면 메모리에서 해제되지 않는다. 


IRP Dispatch 

외부에서 드라이버로 전달되는 명령어(Request Packet)을 받아들이는 진입점이다. 드라이버 개발자는 이 곳에서 명령어를 신속하게 다루어야한다. 이 것은 호출자에게 리턴하라는 것을 의미한다. 이 것은 접수만 해놓고 호출자에게 리턴해버릴 수 있다는 뜻도 된다 == (STATUS_PENDING) 


1.1.3 PNP 드라이버 


윈도우가 운영하는 PNP 관리자 그리고 Power 관리자와 함께 운용되는 드라이버를 뜻한다. 따라서 레거시 드라이버가 가지는 콜백 함수 이외에 별도의 콜백함수를 추가해야한다. 


다음은 PNP 드라이버를 작성하는 개발자가 준비해야하는 함수의 리스트 : 


DriverEntry, DriverUnload, IRP Dispatch 


AddDevice 


디바이스 스택 : 하드웨어를 여러 PNP 드라이버들이 효과적으로 운영하기 위해 만든 자료구조)


디바이스 스택이 구성되자마자 호출되는 콜백함수이다. 개발자는 이 곳에서 디바이스 오브젝트를 만들어서  디바이스 스택에 올린다, 
DriverEntry 가 드라이버가 메모리에 상주했다는 의미라면 AddDevice는 드라이버가 관여할 하드웨어가 발견되었다는 의미이다. 만약 동일한

드라이버를 사용하는 하드웨어가 2개 연결된다면 DriverEntry의 경우 한 번만 실행되지만 AddDevice는 두 번 실행된다. 


AddDevice 가 호출된 시기가 하드웨어에 접근해도 좋다는 허가의 의미는 아니라는 점에 유의하자. 
하드웨어 접근 허용은 IRP_MJ_PNP  IRP_MJ_POWER 콜백함수 에 의해 결정된다. 


IRP_MJ_PNP

PNP 관리자가 전달하는 IRP를 처리하는 콜백 함수이다. PNP 관리자는 PNP와 관련된 이벤트가 일어나면 IRP에 담아서 드라이버에 전달한다. 이 때 드라이버 개발자는 이 곳에서 IRP의 내용을 파악해 그에 맞춰 행동할 수 있다. 


IRP_MJ_POWER

POWER 관리자가 전달하는 IRP를 처리하는 콜백함수이다. 전력공급 관련 이벤트 들이다. 






댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함