디바이스 드라이버
Device Driver
1. 개요
컴퓨터에서 하드웨어 장치를 운영 체제에 연결하기 위해 필요한 소프트웨어. 몇몇 사람들은 드라이브라고 잘못 부르기도 한다.
확장자는 3.1까지는 drv, Windows 9x 계열의 경우 drv와 vxd(가상장치), 윈도우 NT 계열의 경우 sys이다.
윈도우 95까지는 순화하여 '장치 제어기'라고 불렀다.
2. 상세
연결을 하기 위해 해당하는 하드웨어나 특수한 소프트웨어 인터페이스에 대한 별도의 정보가 포함되어 있다. 이를테면, 프린터나 디스플레이 모니터 등을 새로 구입했다면 사용자는 이에 관련된 드라이버를 새로 설치해야한다. 또한 지금 쓰고 있는 드라이버에 문제가 생겼다면 당연히 최신 버전의 드라이버로 업데이트를 해줘야 한다.[1] 또는 반대로 이전 버전으로 롤백#s-1.1해줘야 하는 경우도 있다.
그래서 대개 유명 메이커는 자사의 제품에 대해서 꾸준한 드라이버 지원을 해주며, 운영체제 차원에서도 드라이버가 제공되지만, 그렇지 않은 경우에는 제품 공급사에서 별도로 제공하는 드라이버를 사용하면 된다. 그리고 사실, 웬만하면 공급사가 제공하는 드라이버를 사용하는게 좋다. 특히 회사가 그렇게 자랑하는 특수 기능을 이용하려면 공급된 드라이버를 깔아야한다. 안 그러면 컴퓨터는 돌아가지만 '''제 성능을 하나도 못 낸다.'''
자신의 컴퓨터에 설치된 하드웨어의 드라이버를 못찾겠으면 3DP Chip같은 자신의 하드웨어에 맞는 드라이버를 찾아주는 유틸리티로 간단히 찾아낼 수 있다. 만약 윈도우 7 이상 버전이면 어지간한 하드웨어는 전부 잡아내서 전용 드라이버로 설치해주기도 한다.
제조사가 망하거나, 출시 후 너무 오랜 시간이 지나면 드라이버를 제공하지 않는다. 대체로 유명 제조사라 해도 출시 후 6~8년이 지난 후에 나온 윈도우에 대해서는 지원을 포기했다. 이런 경우 사용자는 OS 업그레이드를 못 하고 일부러 구형 OS를 사용하거나, 멀쩡한 부품을 갖다 버려야 한다. 이런 목적으로 2019년까지 윈도우 98을 돌리는 펜티엄 3 컴퓨터를 유지하는 경우가 간혹 있다. 똥컴 문서 참조. 아주 간혹 오픈소스 드라이버가 나오는 경우는 있다.
드라이버는 커널을 마음대로 손댈 수 있다. 즉 커널 함수를 쓸 수 있다는 것이다. (ntoskrnl.exe의 함수를 사용할 수 있다) 이렇듯 커널에 영향을 줄 수 있는 소프트웨어이기 때문에 옛날에는 드라이버끼리 충돌을 일으켜서 커널 패닉이 일어나는 일이 종종 있었다.[2] 속칭 '궁합'을 잘 맞추는 것도 컴퓨터 실력을 측정하는 기준이 되기도 했다. 지금은 거의 옛날 이야기. 안전성을 엄격하게 확인하여 마이크로소프트의 인증을 받은 하드웨어 드라이버만 작동할 수 있게 되어서 드라이버로 인해 커널 패닉이 발생하는 경우가 많이 줄어들었다. 또한 드라이버가 불안정하면 아무리 성능이 좋아도 널리 쓰이기가 힘들어서 고수들이 많이 쓰는 부품이 되기도 한다. 좋은 예로 예전에 인기가 있었던 국산 사운드 카드인 사운드 트랙 시리즈. 드라이버 설치가 까다롭기로 악명이 자자했었다.
또 커널 함수를 쓸 수 있다는 점에서 보안 취약점으로 작용하기도 했다. 해커들이 드라이버를 만들어 악성코드에 삽입. 실행시 드라이버를 자동으로 설치하는 식이다. 악성 드라이버의 주 목적은 악성코드 보호등이다.[3] MS도 이에 대한 대책을 마련해 놓았다. Windows 2000 이후의 NT 계열 윈도우는 서명이 없거나 올바르지 않은(변조된) 드라이버는 설치시 경고창을 띄우고 설치한 것인가 안 할 것인가를 사용자가 선택할 수 있다. 이후 Windows 8 이후부터 서명이 안 된 드라이버는 윈도우 부팅 로고가 뜨기 직전에 F8키를 누르면 뜨는 부팅관리자[4] 혹은 윈도우가 돌아가고 있는 상황에선 Windows 10 RS4 기준으로 재부팅을 하기전에 설정 창에 들어가서 업데이트 및 보안 → 복구 → 고급 시작 옵션 아랫쪽의 지금 다시 시작 버튼을 눌러주고 재부팅이 됨과 동시에 고급 시작 옵션 화면이 떴을 때 '드라이버 서명 적용 사용 안 함'을 선택하고 부팅하지 않는 이상은 아예 설치 하는 것 자체를 못하도록 막아놨다. 이 방식은 서명이 되지 않은 드라이버를 하나만 설치할 때나 해당되고, 2개 이상을 설치해야 한다면 드라이버를 매번 설치할 때 마다 부팅관리자를 띄워서 '드라이버 서명 적용 사용 안 함'을 선택해서 부팅하기가 여간 번거로운 것이 아니기 때문에 먼저 명령 프롬프트를 관리자 권한으로 실행한다. 명령창에는 bcdedit.exe -set loadoptions DDISABLE_INTEGRITY_CHECKS 와 bcdedit.exe -set TESTSIGNING ON 을 각각 입력해서 엔터치고 두 명령줄 전부다 '작업을 완료했습니다.'[5] 라고 뜬걸 확인하고 재부팅을 하면 굳이 부팅관리자를 띄워야 하는 번거로움은 사라질 것이다. 하지만, 필요한 드라이버를 전부 다 설치하고 그냥 내버려 두는것은 보안상 좋지않기 때문에 다시 관리자 권한으로 명령 프롬프트를 실행해서 bcdedit.exe -set loadoptions ENABLE_INTEGRITY_CHECKS 와 bcdedit.exe -set TESTSIGNING OFF 를 각각 입력해서 엔터치고 재부팅을 하고, UEFI 설정에 들어가서 Secure Boot 기능을 다시 켜줘야 한다.
자신이 직접 드라이버를 만들고 싶다면 Windows DDK를 설치하면 된다.[6] 프로그램과 달리 드라이버는 오류가 발생하면 사소한 것이라도 반드시 파란 화면을 보게 된다. 따라서 드라이버를 만드는 것은 어렵고 커널 함수가 많은 것과 별개로 '''어셈블리어 코드도 작성한다.''' 그래픽카드 같은 부품 드라이버들은 기본적으로 어셈블리어를 사용한다.
3. 각종 드라이버
사운드, 네트워크, 프린터 드라이버 등이 있다.
3.1. 그래픽 드라이버
3.2. 사운드 드라이버
- Realtek HD 오디오 드라이버
3.3. 포인팅 장치 드라이버
3.4. 저장 장치 드라이버
4. 가상 장치 드라이버
디바이스 드라이버 외에 '소프트웨어 드라이버'라는 종류도 존재하는데 이 경우는 CPU에서 Ring0 권한이나 커널 모드가 필요한 코드의 실행이나 장치의 간접 제어, 또는 간섭이 필요할 경우 사용하는 드라이버다.
주로 '가상 하드웨어'를 구현하거나[8] 방화벽도 드라이버로 구현할수 있다. 백신 프로그램도 자가보호 기능만 해도 드라이버로 작성한다. 안티치트나 AhnLab Safe Transaction같은 보안 플러그인도 드라이버로 만들어져 있다.
하지만 드라이버 특성상 악용하는 수준에 따라 운영체제를 갈아엎는 수준으로 끝나지 않기 때문에 하드웨어 드라이버와 마찬가지로 디지털 서명이 있지 않다면 설치시 경고가 뜨며 윈도우 8부터는 설치할때 부팅옵션을 변경한후 설치해야한다. macOS의 경우는 루트리스의 적용으로 애플에 의해 서명되어 있는 드라이버만 설치할수 있도록 하였다.
[1] 대표적으로 GeForce 20의 경우 윈도에서 자동으로 잡아주는 드라이버에서는 언리얼 엔진에서 주기적인 모니터 깜빡임을 유발하기 때문에 반드시 최신 드라이버를 받아서 새로 깔아줘야 한다.[2] 빌 게이츠의 굴욕 역시 이거 때문에 벌어진 일이다.[3] 또한 프로세스 목록에서 악성 프로세스가 나오지 않게 하기도 한다. 그러면 메모리 단위에서 검사하여 찾는 것 예외에는 프로세스가 실행되고 있음을 알 수 없다. 사실 이건 유저모드에서도 후킹을 통해 구현할 수 있다.[4] 관리자 권한으로 명령 프롬프트 창을 띄운 다음 bcdedit /set {default} bootmenupolicy legacy를 입력 후 엔터치면 다음번에 재부팅을 하게되면 부팅 로고가 뜨기 직전에 F8키를 눌러서 부팅관리자로 접근하는 게 가능해진다.[5] bcdedit.exe -set TESTSIGNING ON 엔터를 쳤는데 '요소 데이터를 설정하는 동안 오류가 발생했습니다. 값은 보안 부팅 정책에 의해 보호되며 수정 또는 삭제할 수 없습니다.' 라는 결과물이 출력되면 해당 PC의 메인보드 롬에 심어진 펌웨어는 바이오스가 아닌 UEFI 이며, UEFI 설정메뉴에서 Secure Boot 기능이 안꺼져 있음을 의미하므로 제조사가 제공한 메뉴얼을 보고 Secure Boot 기능을 꺼야만 '작업을 완료했습니다.' 라고 뜨며 정상적으로 적용된다.[6] 물론 Windows SDK도 필요하다[7] 최근 엔비디아 드라이버들은 포스웨어라는 이름을 전면에 내세우지는 않는다. 여전히 정보창의 어딘가 구석지에 포스웨어라는 이름이 가뭄에 콩나듯 보일때도 있지만 공식적으로 그 이름은 더 이상 쓰이지 않는다.[8] 가상 머신의 필수덕목이기도 하다.