디바이스 드라이버

덤프버전 :

1. 개요
2. 상세
3. 각종 드라이버
3.1. 그래픽 드라이버
3.2. 휴먼 인터페이스 장치 드라이버
3.2.1. 사운드 드라이버
3.2.2. 포인팅 장치 드라이버
3.3. 네트워크 드라이버
3.4. 저장 장치 드라이버
4. 가상 장치 드라이버
5. 미니필터 드라이버



1. 개요[편집]


Device Driver

컴퓨터에서 하드웨어 장치를 운영체제에 연결하기 위해 필요한 소프트웨어. 하드웨어의 기능을 추상화#추상화 (컴퓨터공학)하는 역할이 주 목적이다. 몇몇 사람들은 드라이브라고 잘못 부르기도 한다.

확장자는 3.1까지는 drv, Windows 9x 계열은 drv와 vxd(가상장치), Windows NT 계열은 sys이다.

macOS에서는 kext(커널 확장)라는 패키지가 드라이버를 대신한다. 물론 애플의 코드서명을 받아야만 작동할 수 있다.[1] 리눅스 커널에서는 커널 모듈(.ko)이 드라이버 역할을 한다. 커널 소스에 포함된 드라이버는 컴파일 시 옵션에 따라서 커널 이미지에 내장되도록 할 수도 있고, 웬만한 리눅스 배포판에서는 커널에서 지원하는 드라이버를 대부분 커널 모듈로 포함시킨다. 단 nVIDIA 그래픽 카드 드라이버 같은 경우는 라이선스 문제 때문에 리눅스 커널 소스에 들어갈 수 없다. 다만 사용자 편의를 위해 배포판에서는 자동화된 컴파일 및 설치 과정이 별도로 들어가기도 한다.

Windows 95까지는 순화하여 '장치 제어기'라고 불렀다.


2. 상세[편집]


연결을 하기 위해 해당하는 하드웨어나 특수한 소프트웨어 인터페이스에 대한 별도의 정보가 포함되어 있다. 예를 들어 프린터나 디스플레이 모니터 등을 새로 구입했다면 사용자는 이에 관련된 드라이버를 새로 설치해야 한다. 또한 지금 쓰고 있는 드라이버에 문제가 생겼다면 당연히 최신 버전의 드라이버로 업데이트를 해줘야 한다. 대표적으로 GeForce 20의 경우 Windows에서 자동으로 잡아주는 드라이버에서는 언리얼 엔진에서 주기적인 모니터 깜빡임을 유발하기 때문에 반드시 최신 드라이버를 받아서 새로 깔아줘야 한다. 반대로 이전 버전으로 롤백해 줘야 하는 경우도 있다.

그래서 대개 유명 메이커는 자사의 제품에 대해서 꾸준한 드라이버 지원을 해 주며, 운영 체제 차원에서도 드라이버가 제공되지만, 그렇지 않은 경우에는 제품 공급사에서 별도로 제공하는 드라이버를 사용하면 된다. 그리고 사실, 웬만하면 공급사가 제공하는 드라이버를 사용하는 게 좋다. 특히 회사가 그렇게 자랑하는 특수 기능을 이용하려면 공급된 드라이버를 깔아야 한다. 안 그러면 컴퓨터는 돌아가지만 제 성능을 하나도 못 낸다.

자신의 컴퓨터에 설치된 하드웨어의 드라이버를 못 찾겠으면 3DP Chip같은 자신의 하드웨어에 맞는 드라이버를 찾아주는 유틸리티로 간단히 찾아낼 수 있다. 만약 Windows 7 이상 버전이면 어지간한 하드웨어는 전부 잡아내서 전용 드라이버로 설치해주기도 한다.

제조사가 망하거나, 출시 후 너무 오랜 시간이 지나면 드라이버를 제공하지 않는다. 대체로 유명 제조사라 해도 출시 후 6~8년이 지난 후에 나온 윈도우에 대해서는 지원을 포기했다. 이런 경우 사용자는 OS 업그레이드를 못 하고 일부러 구형 OS를 사용하거나, 멀쩡한 부품을 갖다 버려야 한다. 이런 목적으로 2019년까지 Windows 98을 돌리는 펜티엄 3 컴퓨터를 유지하는 경우가 간혹 있다. 똥컴 문서 참고. 아주 간혹 오픈소스 드라이버가 나오는 경우는 있다.

드라이버는 커널을 마음대로 손댈 수 있다. 즉 커널 함수를 쓸 수 있다는 것이다. (ntoskrnl.exe의 함수를 사용할 수 있다) 이렇듯 커널에 영향을 줄 수 있는 소프트웨어이기 때문에 옛날에는 드라이버끼리 충돌을 일으켜서 커널 패닉이 일어나는 일이 종종 있었다. 빌 게이츠의 굴욕 역시 이거 때문에 벌어진 일이다. 그래서 당시에는 속칭 '궁합'을 잘 맞추는 것도 컴퓨터 실력을 측정하는 기준이 되기도 했다. 물론 지금은 거의 옛날 이야기가 되었다. 안전성을 엄격하게 확인하여 Microsoft의 WHQL 인증을 받은 하드웨어 드라이버만 작동할 수 있게 되어서 드라이버로 인해 커널 패닉이 발생하는 경우가 많이 줄어들었다. 또한 드라이버가 불안정하면 아무리 성능이 좋아도 널리 쓰이기가 힘들어서 고수들만 많이 쓰는 부품이 되기도 한다. 대표적인 예로 예전에 인기가 있었던 국산 사운드 카드인 사운드 트랙 시리즈는 드라이버 설치가 까다롭기로 악명이 자자했었다.

또 커널 함수를 쓸 수 있다는 점에서 보안 취약점으로 작용하기도 했다. 해커들이 드라이버를 만들어 악성 코드에 삽입. 실행시 드라이버를 자동으로 설치하는 식이다. 악성 드라이버의 주 목적은 악성 코드 보호 등이다. 또한 프로세스 목록에서 악성 프로세스가 나오지 않게 하기도 하는데, 그러면 메모리 단위에서 검사하여 찾는 것 예외에는 프로세스가 실행되고 있음을 알 수 없다. 사실 이건 유저모드에서도 후킹을 통해 구현할 수 있다. Microsoft도 이에 대한 대책을 마련해 놓았다. Windows 2000 이후의 NT 계열 윈도우는 서명이 없거나 올바르지 않은(변조된) 드라이버는 설치시 경고 메시지를 띄우고 설치 여부를 사용자가 선택할 수 있다.

Windows 8 이후부터[2] 서명이 안 된 드라이버는 설치를 매우 까다롭게 해놨다. 먼저 UEFI 설정에서 보안 부트(Secure Boot) 기능을 끄고, 관리자 권한으로 명령 프롬프트를 실행한 다음
bcdedit /set {default} bootmenupolicy legacy
를 입력한 후 다시 부팅해 부팅 로고가 뜨기 직전에 F8키를 눌러서 Windows 부팅 관리자로 접근하거나, 윈도우가 돌아가고 있는 상황에선 Windows 10 Redstone 4 기준으로 시작 → 설정에 들어가서 업데이트 및 보안 → 복구 → 고급 시작 옵션 아랫쪽의 지금 다시 시작 버튼을 눌러 재부팅을 시켜, 고급 시작 옵션 화면이 떴을 때 '드라이버 서명 적용 사용 안 함'을 선택해 부팅하지 않는 이상은 아예 설치하지 못하게 막아놨다.

이 방식은 서명이 되지 않은 드라이버를 하나만 설치할 때나 해당되고, 2개 이상을 설치해야 한다면 드라이버를 매번 설치할 때 마다 Windows 부팅 관리자를 띄워서 '드라이버 서명 적용 사용 안 함'을 선택해야 한다. 그래서 부팅하기 매우 번거로워지기 때문에 좀더 편리한 방법을 소개한다. 먼저 명령 프롬프트를 관리자 권한으로 실행한다. 명령 프롬프트에서
bcdedit -set TESTSIGNING ON
을 입력한 후[3] '작업을 완료했습니다.'[4]라고 뜬걸 확인하고 재부팅을 하면 굳이 매번 Windows 부팅 관리자를 띄워야 하는 번거로움은 사라질 것이다. 하지만, 필요한 드라이버를 전부 다 설치하고 그냥 내버려 두는것은 보안상 좋지 않기 때문에 다시 관리자 권한으로 명령 프롬프트를 실행해서
bcdedit -set TESTSIGNING OFF
를 각각 입력한 후 재부팅을 하고, UEFI 설정에 들어가서 보안 부트 기능을 다시 켜줘야 한다.

그 외에도 커널 디버거를 키고 WinDbg로 연결시키면 자동으로 테스트 서명 및 드라이버 서명 확인 적용 사용 안함이 적용된다.

자신이 직접 드라이버를 만들고 싶다면 Windows SDK와 DDK를 설치하면 된다. 일반 소프트웨어와 달리 드라이버는 오류가 발생하면 사소한 것이라도 반드시 파란 화면을 보게 되며, 이때 오류코드는 KMODE_EXCEPTION_NOT_HANDLED이다. 그래서 일반 프로그램을 제작하는 것보다 더욱 주의해야 하며, 실제 컴퓨터가 아닌 가상머신이나 테스트 전용 컴퓨터에서 드라이버 작동을 테스트해야 한다. 이런 이유로 DDK에는 드라이버 개발을 위한 WinDbg라는 윈도우 디버깅 도구가 들어가 있다. 참고로 드라이버 개발 중에 블루스크린이 일어나는 대부분의 원인은 포인터 참조과 관련되어 있다. 즉 포인터 변수를 잘못 다루면 블루스크린이 일어날 수 있다는 것이다.

Windows 커널C언어를 사용하므로 드라이버도 C언어로 작성해야 한다. MS에서는 C++ 사용을 금지하지 않고 있지만 C언어로 만들어진 커널와 제대로 호환되지 않아서 문제가 발생할 수 있다. #

3. 각종 드라이버[편집]


사운드, 네트워크, 프린터 드라이버 등이 있다.

3.1. 그래픽 드라이버[편집]


  • AMD 라데온 소프트웨어
  • NVIDIA Forceware[5]
    • GeForce Game Ready Driver
    • GeForce Studio Driver
  • 인텔 그래픽 드라이버

3.2. 휴먼 인터페이스 장치 드라이버[편집]


  • USB HID 규격 드라이버[6]

3.2.1. 사운드 드라이버[편집]


  • Microsoft High Definition Audio 드라이버[7]
  • Realtek High Definition Audio 드라이버
  • NVIDIA High Definition Audio 드라이버[HDMI]
  • VIA High Definition Audio 드라이버
  • IDT(구 SigmaTel) High Definition Audio 드라이버[8]
  • SoundMAX High Definiiton Audio 드라이버
  • Creative Sound Blaster 드라이버
  • AMD(구 ATI) High Definition Audio 드라이버[HDMI]
  • 인텔 디스플레이 오디오 드라이버[HDMI]
  • Synaptics(구 Conexant) High Definition Audio 드라이버[9]

3.2.2. 포인팅 장치 드라이버[편집]




3.3. 네트워크 드라이버[편집]



3.4. 저장 장치 드라이버[편집]




4. 가상 장치 드라이버[편집]


디바이스 드라이버 외에 '소프트웨어 드라이버'라는 종류도 있는데 이 경우는 CPU에서 Ring0 권한이나 커널 모드가 필요한 코드의 실행이나 장치의 간접 제어, 또는 간섭이 필요할 경우 사용하는 드라이버다.

주로 '가상 하드웨어'를 구현하거나[10], VPN용 가상 랜카드[11], 방화벽이나 안티 바이러스, MDM, 안티치트 같은 보안 소프트웨어도 드라이버로 만들어져 있다.

하지만 드라이버 특성상 악용하는 수준에 따라 운영 체제를 갈아엎는 수준으로 끝나지 않기 때문에 하드웨어 드라이버와 마찬가지로 디지털 서명이 있지 않다면 설치시 경고가 뜨며 윈도우 8부터는 설치할 때 UEFI 설정에서 보안 부트(Secure Boot) 기능을 끄고 부팅 옵션을 변경한 후 설치할 수 있다. macOS의 경우는 루트리스의 적용으로 애플에 의해 서명되어 있는 드라이버만 설치할수 있도록 하였다. 애플 개발자 페이지에서는 보안 소프트웨어를 드라이버로 개발하는 것을 권장하지 않고 있다.


5. 미니필터 드라이버[편집]


Windows XP부터 추가된 드라이버의 한 종류로 I/O 관리자를 거치기 전/후 단계에서 콜백 처리할 수 있는 드라이버로 Fltmgr.sys라는 상위 드라이버에 의해 관리된다.

미니필터 드라이버 추가 되기 전에는 파일 변경을 막기 위해서는 시스템 콜 테이블을 후킹해야 하는데 잘못했다가 커널 패닉이 발생할 수도 있었다. 하지만 미니필터 드라이버가 추가된 이후 시스템 콜을 후킹할 필요 없이 파일 변경을 막을 수 있게 되었다. Windows 2000 이하에서는 미니필터 드라이버가 없지만 서드파티 미니필터 드라이버가 있다.

상위 드라이버인 Fltmgr.sys에서 I/O를 감시할 수 있는 여러 함수들을 제공하며 이를 통해 파일 변경 등의 I/O를 실행하기 전에 막거나 후에 감시할 수 있다. 예시로 백신 프로그램의 실시간 감시 기능은 미니필터 드라이버를 이용하여 쓰기/읽기가 이루어지는 파일들을 검사한다.

[1] 해킨토시는 Mac에 쓰이지 않은 부품들의 인식 및 정상 작동을 위해 이걸 우회하여 서명되지 않은 kext를 설치한다.[2] 임베디드 계열의 경우 Windows Embedded 7 Standard부터 해당된다.[3] 인터넷에 흔히 찾아볼 수 있는 가이드에는
bcdedit -set loadoptions DDISABLE_INTEGRITY_CHECKS
도 같이 입력하라고 되어 있는데, 이것은 Windows Vista에서만 적용 가능하고 Windows 7부터는 무시되기 때문에 굳이 입력할 필요가 없다. 참고로 해당 명령어를 취소하고 원래대로 되돌리려면
bcdedit -set loadoptions ENABLE_INTEGRITY_CHECKS
를 입력하면 된다.
[4] 명령 프롬프트에서
bcdedit -set TESTSIGNING ON
를 입력했는데 '요소 데이터를 설정하는 동안 오류가 발생했습니다. 값은 보안 부팅 정책에 의해 보호되며 수정 또는 삭제할 수 없습니다.' 라는 결과물이 출력되면 해당 PC의 메인보드 롬에 심어진 펌웨어는 바이오스가 아닌 UEFI이며, UEFI 설정 메뉴에서 보안 부트 기능이 켜져 있음을 뜻하므로 제조사가 제공한 메뉴얼을 보고 보안 부트 기능을 꺼야만 '작업을 완료했습니다.' 라고 뜨며 정상적으로 적용된다.
[5] 최근 엔비디아 드라이버들은 포스웨어라는 이름을 전면에 내세우지는 않는다. 여전히 정보창의 어딘가 구석지에 포스웨어라는 이름이 가뭄에 콩나듯 보일때도 있지만 공식적으로 그 이름은 더 이상 쓰이지 않는다.[6] 마우스나 키보드를 연결하면 이 드라이버가 알아서 잡한다.[7] 장치 관리자에서는 'High Definition Audio 장치'로 표시된다. 만약 사운드카드를 설치하고 따로 드라이버 설치를 하지 않으면 기본적으로 이 드라이버가 잡한다. 고급 기능을 쓰고 싶다면 제조사 드라이버를 깔아야 하겠지만 딱히 고급 기능이 없는 일반 내장 사운드카드는 이 드라이버로도 충분하다.[HDMI] A B C 임베디드 오디오 출력 기능[8] 주로 HP사의 컴퓨터에 탑재되었고, 2000년대까지는 LG전자Dell사의 컴퓨터에도 탑재되었다.[9] 주로 LG전자의 노트북에 탑재된다.[10] 가상 머신의 필수 덕목이기도 하다.[11] 운영 체제에서 접속하는 VPN도 가상 이더넷 카드를 만들고, 서드파티 소프트웨어에서는 SoftEther VPN이 유명하다.


파일:CC-white.svg 이 문서의 내용 중 전체 또는 일부는
문서의 r134 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}}에서 가져왔습니다. 이전 역사 보러 가기
파일:CC-white.svg 이 문서의 내용 중 전체 또는 일부는 다른 문서에서 가져왔습니다.
[ 펼치기 · 접기 ]
문서의 r134 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)
문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)




파일:크리에이티브 커먼즈 라이선스__CC.png 이 문서의 내용 중 전체 또는 일부는 2023-11-24 19:45:51에 나무위키 디바이스 드라이버 문서에서 가져왔습니다.