다음을 통해 공유


드라이버 파일 매핑

드라이버 파일을 바꾸는 것은 어려울 수 있습니다. Microsoft Windows 안전 빌드로 부팅하고 드라이버 이진 파일을 교체한 다음 다시 부팅해야 하는 경우가 많습니다.

매핑 파일을 사용하는 다른 메서드가 있습니다. 이 매핑 방법을 사용하여 커널 모드 드라이버(디스플레이 드라이버 포함), Windows 하위 시스템 드라이버 또는 다른 커널 모드 모듈을 바꿀 수 있습니다. 간단히 하기 위해 이러한 파일은 커널 모드 모듈에 이 메서드를 사용할 수 있더라도 이 항목의 드라이버라고 합니다.

WinDbg 또는 KD가 커널 디버거로 연결될 때마다 이 메서드를 사용할 수 있습니다. 부팅 드라이버에서 이 메서드를 사용할 수도 있지만 더 어렵습니다. 부팅 드라이버에서 이 메서드를 사용하는 방법에 대한 자세한 내용은 부팅 드라이버 바꾸기를 참조하세요.

드라이버 교체 맵을 사용하여 드라이버 파일을 바꾸려면 다음을 수행합니다.

  1. 드라이버 교체 맵 파일을 만듭니다. 이 파일은 대상 컴퓨터의 드라이버와 호스트 컴퓨터의 대체 드라이버를 나열하는 텍스트 파일입니다. 원하는 수의 드라이버를 바꿀 수 있습니다. 예를 들어 다음 정보를 포함하는 호스트 컴퓨터의 d:\Map_Files 디렉터리에 Mymap.ini 이름이 지정된 파일을 만들 수 있습니다.

    map
    \Systemroot\system32\drivers\videoprt.sys
    \\myserver\myshare\new_drivers\videoprt.sys
    

    이 파일의 구문에 대한 자세한 내용은 드라이버 대체 맵 파일 형식을 참조 하세요.

  2. 대상 컴퓨터에 대한 커널 디버깅 연결을 설정하고 호스트 컴퓨터에서 커널 디버거(KD 또는 WinDbg)를 시작합니다. (실제로 대상 컴퓨터에 침입할 필요는 없습니다.)

  3. 다음 중 하나를 수행하여 드라이버 교체 맵 파일을 로드합니다.

    • 커널 디버거를 시작하기 전에 _NT_KD_FILES 환경 변수 를 설정합니다.

      D:\Debugging Tools for Windows> set _NT_KD_FILES=d:\Map_Files\mymap.ini
      D:\Debugging Tools for Windows> kd
      
    • 커널 디버거를 시작한 후 .kdfiles(드라이버 대체 맵 설정) 명령을 사용합니다.

      D:\Debugging Tools for Windows> kd
      kd> .kdfiles d:\Map_Files\mymap.ini
      KD file associations loaded from 'd:\Map_Files\mymap.ini'
      

      .kdfiles 명령을 사용하여 현재 드라이버 교체 맵 파일을 표시하거나 드라이버 교체 맵을 삭제할 수도 있습니다. 이 명령을 사용하지 않으면 디버거를 종료할 때까지 맵이 유지됩니다.

이 절차를 완료하면 드라이버 교체 맵이 적용됩니다.

대상 컴퓨터가 드라이버를 로드하려고 할 때마다 커널 디버거를 쿼리하여 이 드라이버가 매핑되었는지 여부를 확인합니다. 드라이버가 매핑된 경우 교체 파일은 커널 연결을 통해 전송되고 이전 드라이버 파일을 통해 복사됩니다. 그런 다음 새 드라이버가 로드됩니다.

드라이버 교체 맵 파일 형식

각 드라이버 파일 교체는 드라이버 교체 맵 파일의 세 줄로 표시됩니다.

  • 첫 번째 줄은 "map"이라는 단어로 구성됩니다.

  • 두 번째 줄은 대상 컴퓨터에서 이전 드라이버의 경로 및 파일 이름을 지정합니다.

  • 세 번째 줄은 새 드라이버의 전체 경로를 지정합니다. 이 드라이버는 호스트 컴퓨터 또는 다른 서버에 있을 수 있습니다.

이 정보 패턴을 여러 번 반복할 수 있습니다.

경로와 파일 이름은 대/소문자를 구분하지 않으며 실제 드라이버 파일 이름은 다를 수 있습니다. 세 번째 줄에 지정한 파일은 대상 컴퓨터가 해당 드라이버를 로드하려고 할 때 두 번째 줄에 지정한 파일 위에 복사됩니다.

Kdfiles는 SCM(서비스 제어 관리자) 데이터베이스에 저장된 파일 이름과 일치하려고 시도합니다. SCM 데이터베이스의 이름은 MmLoadSystemImage에 전달된 이름과 동일합니다.

Windows 10 이상 버전의 디버깅 도구에서 드라이버 매핑은 드라이버 이름을 동적으로 일치시키고 적절한 경로를 결정하기 위해 작동합니다. 전체 경로를 지정할 필요가 없으며 파일 확장명은 선택 사항입니다. 이러한 항목을 사용하여 NT 파일 시스템 드라이버와 일치시킬 수 있습니다.

  • ntfs
  • NTFS
  • ntfs.sys
  • windows\system32\drivers\ntfs.sys

이러한 항목을 사용하여 NT 커널 드라이버와 일치시킬 수 있습니다.

  • ntoskrnl
  • NTOSKRNL
  • ntoskrnl.sys
  • windows\system32\drivers\ntoskrnl.sys

지도 파일에는 빈 줄이 포함될 수 있으며 숫자 기호(#)로 시작하는 주석 줄을 포함할 수 있습니다. 그러나 파일에 "map"이 표시되면 다음 두 줄은 이전 드라이버와 새 드라이버여야 합니다. 빈 줄과 주석 줄은 3줄 지도 블록을 분리할 수 없습니다.

다음 예제에서는 드라이버 교체 맵 파일을 보여줍니다.

# Use the # for comments like this one
map
\Systemroot\system32\drivers\videoprt.sys
e:\MyNewDriver\binaries\videoprt.sys
map
\Systemroot\system32\mydriver.sys
\\myserver\myshare\new_drivers\mydriver0031.sys

# This is replacing a beep driver
map
\??\c:\windows\system32\beep.sys
\\myserver\myshare\new_drivers\new_beep.sys

드라이버 대체 맵 파일은 텍스트 파일이어야 하지만 파일 이름 및 파일 이름 확장명(.ini, .txt, .map 등)을 사용할 수 있습니다.

추가 참고 사항

드라이버 대체가 발생하면 커널 디버거에 메시지가 나타납니다.

Ctrl+D(KD) 또는 Ctrl+Alt+D(WinDbg)를 사용하는 경우 대체 요청에 대한 자세한 정보가 표시됩니다. 이 정보는 나열한 이름이 SCM 데이터베이스의 이름과 일치하는지 확실하지 않은 경우에 유용할 수 있습니다.

bcdedit bootdebug 옵션을 사용하도록 설정하여 커널, hal 또는 부팅 드라이버를 교체하는 데 유용한 초기 부팅 정보를 볼 수 있습니다.

bcdedit -bootdebug on

자세한 내용은 BCDEdit 옵션 참조를 참조하세요.

커널 디버거가 종료되면 드라이버 교체가 더 이상 발생하지 않습니다. 그러나 이미 교체된 드라이버는 드라이버 파일을 실제로 덮어쓰기 때문에 이전 이진 파일로 되돌리지 않습니다.

이 드라이버 교체 기능은 WFP(Windows 파일 보호)를 자동으로 무시합니다.

대상 컴퓨터를 다시 시작할 필요가 없습니다. 드라이버 교체는 다시 시작되었는지 여부에 관계없이 대상 컴퓨터에서 드라이버를 로드할 때마다 발생합니다. 물론 대부분의 드라이버는 부팅 프로세스 중에 로드되므로 실제로는 맵 파일이 로드된 후 대상 컴퓨터를 다시 시작해야 합니다.

_NT_KD_FILES 변수가 정의되면 커널 디버거가 시작될 때 지정된 드라이버 대체 맵 파일을 읽습니다. .kdfiles 명령을 실행하면 지정된 파일을 즉시 읽습니다. 이 시점에서 디버거는 파일에 기본 지도/선/선 형식이 있음을 확인합니다. 그러나 대체가 발생할 때까지 실제 경로 및 파일 이름은 확인되지 않습니다.

맵 파일을 읽은 후 디버거는 해당 콘텐츠를 저장합니다. 이 시점 이후에 이 파일을 변경하면 .kdfiles 명령을 다시 실행하지 않는 한 변경 내용이 적용되지 않습니다.