메모장 입니다2
Windows] 드라이버 개발 - 2) 부가 설명, 코드, 환경설정, 명령어 본문
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) 파일을 관리하는 유틸리티.
'Study > Programming' 카테고리의 다른 글
Windows] 드라이버 개발 - 6) IRP (0) | 2017.02.24 |
---|---|
Windows] 드라이버 개발 - 5) WDM 드라이버, 디바이스 스택 (0) | 2017.02.23 |
Windows] 드라이버 개발 - 4) 권한, 콜백함수 (1) | 2017.02.23 |
Windows] 드라이버 개발 - 3) windbg 기능, 커널 덤프 (0) | 2017.02.23 |
Windows] 드라이버 개발 - 1) 정의, 개발 킷 종류 (0) | 2017.02.23 |