Поделиться через


Файлы драйвера сопоставления

Замена файлов драйверов может оказаться сложной задачей. Часто приходится загружать безопасную сборку Microsoft Windows, заменять двоичный файл драйвера, а затем снова загружаться.

Существует альтернативный метод, использующий файлы сопоставления. Этот метод сопоставления можно использовать для замены любого драйвера в режиме ядра (включая драйверы отображения), любого драйвера подсистемы Windows или любого другого модуля режима ядра. Для простоты в этом разделе эти файлы называются драйверами , хотя этот метод можно использовать для любого модуля режима ядра.

Этот метод можно использовать при каждом присоединении WinDbg или KD в качестве отладчика ядра. Этот метод также можно использовать в загрузочном драйвере, но это сложнее. Дополнительные сведения об использовании этого метода с загрузочными драйверами см. в разделе Замена загрузочных драйверов.

Чтобы использовать карту замены драйверов для замены файлов драйверов, сделайте следующее:

  1. Создайте файл карты замены драйвера. Этот файл представляет собой текстовый файл, в котором перечислены драйверы на целевом компьютере и их заменяющие драйверы на хост-компьютере. Вы можете заменить любое количество драйверов. Например, можно создать файл с именем Mymap.ini в каталоге d:\Map_Files главного компьютера, который содержит следующие сведения.

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

    Дополнительные сведения о синтаксисе этого файла см. в разделе Driver Replacement Map File Format.

  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 (Set Driver Replacement Map) после запуска отладчика ядра.

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

      Вы также можете использовать команду .kdfiles , чтобы отобразить текущий файл карты замены драйвера или удалить карту замены драйверов. Если эта команда не используется, карта сохраняется до выхода из отладчика.

После выполнения этой процедуры вступает в силу схема замены драйверов.

Всякий раз, когда целевой компьютер загружает драйвер, он запрашивает отладчик ядра, чтобы определить, сопоставлен ли этот драйвер. Если драйвер сопоставлен, файл замены отправляется через подключение ядра и копируется в старый файл драйвера. Затем загружается новый драйвер.

Формат файла карты замены драйвера

Каждая замена файла драйвера обозначается тремя строками в файле карты замены драйверов.

  • Первая строка состоит из слова "карта".

  • Во второй строке указывается путь и имя файла старого драйвера на целевом компьютере.

  • В третьей строке указывается полный путь к новому драйверу. Этот драйвер может находиться на хост-компьютере или на другом сервере.

Вы можете повторять этот шаблон информации любое количество раз.

В путях и именах файлов регистр не учитывается, а имена файлов драйвера могут отличаться. Файл, указанный в третьей строке, копируется поверх файла, указанного во второй строке, когда целевой компьютер вот-вот загрузит этот драйвер.

Kdfiles будет пытаться сопоставить имя файла, хранящегося в базе данных Service Control Manager (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, следующие две строки должны быть старым и новым драйвером. Пустые строки и строки комментариев не могут разбить блоки карты из трех строк.

В следующем примере показан файл карты замены драйвера.

# 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.

Если отладчик ядра завершает работу, замена драйвера больше не происходит. Однако все драйверы, которые уже были заменены, не отменить изменения старых двоичных файлов, так как файлы драйверов фактически перезаписываются.

Эта функция замены драйверов автоматически обходит защиту файлов Windows (МПП).

Перезагружать целевой компьютер не требуется. Замена драйвера происходит каждый раз, когда целевой компьютер загружает драйвер, независимо от того, был ли он перезапущен. Конечно, большинство драйверов загружаются во время загрузки, поэтому на практике следует перезагрузить целевой компьютер после загрузки файла карты.

Если определена переменная _NT_KD_FILES, указанный файл сопоставления замены драйвера считывается при запуске отладчика ядра. При запуске команды .kdfiles указанный файл считывается немедленно. На этом этапе отладчик проверяет, имеет ли файл базовый формат map/line/line. Но фактические пути и имена файлов не проверяются до тех пор, пока не произойдет подстановка.

После чтения файла карты отладчик сохраняет его содержимое. Если вы измените этот файл после этого момента, изменения не будут действовать (если вы не повторно выполните команду .kdfiles ).