메모장 입니다2

Windows] 드라이버 개발 - 2) 부가 설명, 코드, 환경설정, 명령어 본문

Study/Programming

Windows] 드라이버 개발 - 2) 부가 설명, 코드, 환경설정, 명령어

Wooum@n 2017. 2. 23. 23:40

1.서비스


 -NT서비스 프로그램으로 불림.

 -로그인 세션과 무관하게 시스템에서 계속 동작할 수 있음.

 -일반 응용프로그램과 달리, GUI(Graphic user Interface)를 사용할 수 없음.




2.드라이버


 -드라이버도 서비스와 같은 형태로 관리됨.

 -부팅과정 중 시스템에 자동으로 상주/제거 될 수 있음.

 -세션과 무관하게 동작.

 -응용프로그램은 디바이스를 통해서만 디바이스를 인식

>응용프로그램이 프린터 드라이버를 통해 프린터와 통신하려는데, 프린터 드라이버가 마우스와 연결되었다고 하더라도

 응용프로그램은 알 수 없어 원래 동작 수행




3.레지스트리 값


 -HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services

>서비스 목록이 나타남.

 -확인

*Start: 드라이버 로드 순서

*Type: 드라이버 유형(1::커널단에서 동작)




4.소스 코드


 -헤더 파일

>ntddk.h

>>NT Legacy Style 드라이버 개발

->디바이스 스택을 사용하지 않음(단순히 커널레벨의 코드 동작을 위한 드라이버)

->어느 디렉토리에 있어도 실행 가능.


>wdm.h

>>WDM Style 드라이버 개발

->디바이스 스택을 사용(장치와 통신)

->Windows\System32\Drivers 에 존재해야 함.



 -함수

>DriverEntry 함수가 존재해야 한다.(≒Main)

/* Source */

NTSTATUS DriverEntry(

IN PDRIVER_OBJECT DriverObject,

IN PUNICODE_STRING RegistryPath

)

{

return STATUS_UNSUCCESSFUL;

}


*Driver Object: 드라이버에 대한 설명 //설명 미흡 

*RegistryPath: 레지스트리에 설치된 위치

*STATUS UNSUCCESSFUL: 이 값을 리턴해야 메모리에서 제거된다 //라고 설명엔 나와잇는데.. 이 값을 리턴하지 않으면 메모리에 남아있는 건가?




5.프로젝트 환경 설정


 -실습은 NT Legacy Style로 진행한다.

 -NT Legacy Style 플랫폼이 없기 때문에, 프로젝트 생성시 WDM 플랫폼 선택. (이후 NT Legacy에 맞게끔 수정해야 함.)

>Empty WDM Driver

 -Target OS Version 수정

>동작할 OS에 맞게 설정한다.

->하위 호환은 되지만 상위호환은 되지 않기 때문에,

 Windows7로 만든 드라이버 파일을 Windows 10에서 동작시킬 경우 정상동작 하지만,

 Windows10으로 만든 드라이버 파일을 Windows7에서 동작시킬 경우 에러가 발생한다.



 -설치파일(.inf)을 제거

>WDM에서 필요한 파일이며, NT Legacy Style에선 해당 파일이 존재할 때 에러가 발생하므로 제거해준다.

 -x86, x64 선택

>드라이버는 32비트 하위호환이 없이, 64비트 드라이버는 64비트 환경에서만 동작하기 때문에 설정 필수.




6.서비스 관련 CMD 명령


 -SC.EXE: 윈도우 서비스 관리용 프로그램.

>옵션

1)create: 서비스 생성.

2)query: 서비스 상태 확인.

3)start: 서비스 실행. 

->드라이버가 메모리에 로드됨.

4)stop: 서비스 동작 중지.

->드라이버가 메모리에서 제거됨.

5)delete: 서비스 제거.


>실습

1)`sc create [서비스 이름] binpath= "c:\work\helloworld.sys" displayname= "helloworld" start= demand type= kernel  

//`= 인자값` 사이에 한 칸 띄우는거 주의!

2)`sc start helloworld`



7.64비트의 인증서(Cerificate)


 -윈도우 64비트 환경에선인증서명(Signing)이 완료된 드라이버만 실행 가능.

1)설치 파일(.inf)을 사용하는 드라이버(WDM Driver)

>MS에서 요구하는 WHQL(Windows Hardware Quality Labs) 검증 프로그램을 수행완료 해야 함.

cf, 윈도우의 Test Signing 모드에서 진행할 수 있음.


2)설치 파일을 사용하지 않는 드라이버(Legacy Style)

>하드웨어를 다루는 목적이 아닌, 커널레벨의 동작을 위한 드라이버.

>외부적인 수정이 없다는 것을 보증하는 크로스 사이닝 과정을 수행완료 해야 함.

but, Test Signing 모드에서는 검증안된 드라이버도 실행 가능


 -Test Signing 모드

-*bcdedit.exe를 이용하여 Test Sigining 모드로 부팅

>모드 설정

`bcdedit.exe -set TESTSIGNING ON`


>해제

`bcdedit.exe -set TESTSIGNING OFF


*bcdedit.exe: BCD(Boot Configuration Data) 파일을 관리하는 유틸리티.