Windows 64비트로 드라이버 포팅

Windows 64비트로 드라이버 포팅 할 일이 생겼다.
아래의 문서와 링크를 참고한다.

윈도우 커널모드 드라이버 64비트 포팅.ppt

http://support.microsoft.com/kb/888728/ko

————–

64bit 플랫폼은 x64와 IA64가 있다.
IA64는 진정한 Real 64bit 운영체제를 위한 CPU로써 인텔 HP Microsoft의 공동 작품.
그리고 x64는 AMD에서 인텔의 64비트 프로세서에 대응하기 위해 Memory Addressing 영역을 2의 64승까지 늘린 프로세서.
IA64는 비싼가격이기에 보통 일반 유저는 사용하지 않는다.

————–

빌드시 error C2220: warning treated as error – no ‘object’ file generated 에러가 난다면 아래를 Sources 파일에 추가한다.

!if $(FREEBUILD)
MSC_WARNING_LEVEL=/W1
!else
MSC_WARNING_LEVEL=/W3
!endif

그래도 안되면.. /W1 부분을 /W0 으로 변경한다.

————–
64비트 드라이버는 반드시 인증을 거쳐야한다.
인증을 받지 않은 드라이버는 로딩조차 되지 않는다.

설치시 아래와 같은 화면이 뜬다.
ivory2

아래와 같이 사용할 수 없다.
ivory

개발시에는 테스트 모드로 부팅해서 개발이 가능하다.
하지만 어차피 인증은 받아야 하는데, 대략 1년에 40만원 정도라한다.
인증 방법은 여기, 여기 를 본다.

인증 업체는 아래와 같다.

Baltimore CyberTrust
Equifax Secure
GTE CyberTrust
GlobalSign
GeoTrust
VeriSign

——————
윈도우즈 7 테스트 모드로 변경 및 드라이버 파일(.sys) 에 테스트 사인 삽입 프로그램
(개발자들이 필요한 프로그램)

dseo13b.7z

sc

——————

아래는 64비트에 와서 갑자기 인증 방법이 왜 생겼는지에 대한 마소의 답변이다.

결론: 보안을 위해서 인증을 사용한다.

출처: http://www.driveronline.org/bbs/view.asp?tb=systembbs&no=12

대충의 내용을 살펴보면 아래와 같습니다.

Q. kernel-mode code signing을 하는 이유는 무엇이냐
커널 모드 code를 사용하는 악성코드가 많이 늘어났기 때문에

Q. 32Bit는 안하고 64Bit 에서만 하는 이유는?
32Bit를 할경우 이미 많은 드라이버가 설치 되어 있어서 문제가 많이 발생한다.
아주 적은 Driver 만이 64Bit에서 동작하고 있기 때문에 64Bit에서만 한다.

Q. 32Bit version을 가지고 있는데 signed 받아야 하나?
64Bit 모듈과 32Bit 모듈 둘다 제공 한다면 MS에서는 인증 받으라고 권하고 있다.

Q. 왜 그룹 Policy 적책으로 신뢰하게 하지 않는가
악성코드들이 이용할 수 있기 때문에 MS 에서는 허용하지 않는다.

Q. 왜 VeriSign 으로 부터 $499 짜리 인증서가 필요한가?
믿을만한 인증기관에서 인증을 받아야 한다고 한다. 전세계에 판매하는 Software에서 $499는 작은 돈이라고 한다.

Q. 왜 VeriSign만 되는가 다른 CA가 안되는 이유?
현재 MS가 OCA, WER 에서 VeriSign의 인증을 사용하고 있기 때문이고 다른 CA하고도 진행중이다.

Q. $500은 나에게 비싸다 다른 방법이 없겠나?
^^; 인증을 받는것이 더 좋다는 이야기 뿐이네요

Q. 이것은 DRM 적책의 시작인가?
아니다 보안과 품질을 향상 시키고자 하는 것이다.

Q. 왜 Windows Logo, DRS대신 signing 이 필요한 것인가?
Logo, DRS는 보안영역에 대한 보증을 하지 못한다 signing을 사용해야 한다.

————–
출처: http://www.driveronline.org/bbs/view.asp?tb=drivetc&no=948

H/W 를 사용하는 DeviceDriver 라면 WHQL 인증을 받으셔야 합니다.
(WHQL 인증방법: http://www.sinwoong.co.kr/144)
이것은 지금 DTM 으로 변경되었지요
결국 Microsoft 가 원하는 방식으로 Code 가 작성되고 동작하는지 검증을 받은 후 Microsoft 에서 해당 드라이버가 안전하다는 인증을 해주는 것 입니다.
그러나 파일 필터와 같이 장치를 사용하지 않는 드라이버에 대해서는 DTM 을 통하지 않고 SelfSing 을 진행 합니다.
필터 드라이버와 같이 자주 Update 하는 드라이버를 DTM 인증을 통하면 너무 많은 시간이 걸리기 때문에 다른 길을 열어 준 것 입니다.
방법은 Test sing 한 것과 비슷 합니다.
먼저 Microsoft 의 whdc 사이트에서 cross sign 을 지원하는 cross certification 을 지원하는 회사에서 인증서를 하나 구입하신 후 아래 site 에서 cross sing 인증서를 다운 받으신 후 구입하신 인증서와 cross 인증서를 사용하여 인증하시면 됩니다.
이 게시판에 인증에 대한 이야기가 있으므로 검색해보세요
그리고 보다 자세한 내용은 아래 사이트를 참고하세요

————–

바이너리 호환(.sys)은, 64bit 시스템에서 사용하는 드라이버는 64bit 컴파일러로 만든 바이너리 파일 이여야 한다.
32bit 컴파일러에서 만든 바이너리 파일은 응용프로그램에서는 wow64를 통해서 허용 되지만, 드라이버 파일에서는 허용되지 않는다.
반드시 64bit 컴파일러로 컴파일해서 사용한다.

상위 커널 버전의로의 포팅

상위 커널 버전의 포팅시에 참고할 만한 내용을 적어본다.

1. 리눅스 커널 2.6.19 이후 버전부터는 include/linux/config.h를 더 이상 지원하지 않는다. 따라서, linux/config.h: No such file or directory 라는 오류 메시지가 나올 경우 리눅스 커널 디렉터리에서 다음과 같은 명령으로 config.h의 dummy 파일을 생성해준다.

% touch include/linux/config.h

2. chgrp: invalid group: ‘wheel’ 에러 발생시 아래와 같이 아래의 파일에 다음을 추가한다.

% vi /etc/group
wheel:x:10:root --> 10은 겹치는 않는 번호로 할것

추후 계속 업데이트.