Сопоставление файлов драйверов
Замена файлов драйверов может быть сложной. Часто необходимо загрузить в безопасную сборку Microsoft Windows, заменить двоичный файл драйвера, а затем снова загрузить.
Альтернативный метод существует с помощью файлов сопоставления. Этот метод сопоставления можно использовать для замены любого драйвера в режиме ядра (включая драйверы отображения), любого драйвера подсистемы Windows или любого другого модуля в режиме ядра. Для простоты эти файлы называются драйверами в этом разделе, даже если этот метод можно использовать для любого модуля в режиме ядра.
Этот метод можно использовать при присоединении WinDbg или KD в качестве отладчика ядра. Этот метод также можно использовать на загрузочном драйвере, но это сложнее. Дополнительные сведения об использовании этого метода с драйверами загрузки см. в разделе "Замена драйверов загрузки".
Чтобы использовать карту замены драйверов для замены файлов драйверов, сделайте следующее:
Создайте файл карты замены драйвера. Этот файл представляет собой текстовый файл, в котором перечислены драйверы на целевом компьютере и их заменяющие драйверы на хост-компьютере. Можно заменить любое количество драйверов. Например, можно создать файл с именем Mymap.ini в каталоге d:\Map_Files хост-компьютера, содержащего следующие сведения.
map \Systemroot\system32\drivers\videoprt.sys \\myserver\myshare\new_drivers\videoprt.sys
Дополнительные сведения о синтаксисе этого файла см. в разделе "Формат файла карты замены драйвера".
Настройте подключение отладки ядра к целевому компьютеру и запустите отладчик ядра (KD или WinDbg) на хост-компьютере. (Вам не нужно на самом деле входить на целевой компьютер.)
Загрузите файл карты замены драйвера, выполнив одно из следующих действий:
Задайте переменную среды _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 для просмотра сведений о ранней загрузке, которые полезны для замены ядра, халь или загрузочных драйверов.
bcdedit -bootdebug on
Дополнительные сведения см. в справочнике по параметрам BCDEdit.
Если отладчик ядра завершает работу, замена драйвера больше не возникает. Однако все драйверы, которые уже были заменены, не возвращаются к старым двоичным файлам, так как файлы драйверов фактически перезаписываются.
Эта функция замены драйвера автоматически проходит защиту файлов Windows (МПП).
Не нужно перезагрузить целевой компьютер. Замена драйвера возникает в любой момент, когда целевой компьютер загружает драйвер независимо от того, был ли он перезапущен. Конечно, большинство драйверов загружаются во время загрузки, поэтому на практике необходимо перезапустить целевой компьютер после загрузки файла карты.
Если определена переменная _NT_KD_FILES, указанный файл карты замены драйвера считывается при запуске отладчика ядра. Если вы выдаете команду KDfiles, указанный файл немедленно считывается. На этом этапе отладчик проверяет, имеет ли файл базовый формат map/line/line. Но фактические пути и имена файлов не проверяются до тех пор, пока не произойдет подстановка.
После чтения файла карты отладчик сохраняет его содержимое. Если этот файл изменится после этого момента, изменения не влияют (если только вы не повторно не выполните команду KDfiles ).