對應驅動程式檔案
取代驅動程式檔案可能很困難。 您經常必須開機至Microsoft Windows 安全組建、取代驅動程式二進位檔,然後再開機。
使用對應檔案存在替代方法。 您可以使用這個對應方法來取代任何內核模式驅動程式(包括顯示驅動程式)、任何 Windows 子系統驅動程式或任何其他內核模式模組。 為了簡單起見,本主題中的這些檔案稱為 驅動程式 ,即使您可以將此方法用於任何內核模式模組也一樣。
每當 WinDbg 或 KD 附加為核心調試程式時,您就可以使用這個方法。 您也可以在開機驅動程式上使用此方法,但比較困難。 如需如何搭配開機驅動程式使用此方法的詳細資訊,請參閱取代開機驅動程式。
若要使用驅動程式取代對應來取代驅動程式檔案,請執行下列動作:
建立 驅動程式取代對應檔案。 此檔案是文字檔,列出目標計算機上的驅動程式及其主計算機上的取代驅動程式。 您可以取代任意數目的驅動程式。 例如,您可能會在主計算機的 d:\Map_Files 目錄中,建立名為 Mymap.ini 的檔案,其中包含下列資訊。
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 命令來顯示目前的驅動程式取代對應檔,或刪除驅動程式取代對應。 如果您未使用此命令,對應會持續存在,直到您結束調試程序為止。
完成此程式之後,驅動程式取代對應就會生效。
每當目標電腦即將載入驅動程式時,它會查詢核心調試程式,以判斷此驅動程式是否已對應。 如果驅動程式已對應,則會透過核心連線傳送取代檔案,並透過舊驅動程式檔案複製。 然後載入新的驅動程式。
驅動程式取代對應檔格式
每個驅動程式檔案取代都會以驅動程式取代對應檔中的三行表示。
第一行是由 「map」 一詞所組成。
第二行會指定目標計算機上舊驅動程式的路徑和檔名。
第三行會指定新驅動程式的完整路徑。 此驅動程式可以位於主電腦或其他伺服器上。
您可以任意次數重複此資訊模式。
路徑和檔名不區分大小寫,而且實際的驅動程序檔名可能不同。 您在第三行上指定的檔案,會在目標計算機即將載入該驅動程式時,複製到您在第二行指定的檔案上。
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
地圖檔案可以包含空白行,而且可以包含以數位符號開頭的批注行(#)。 不過,在檔案中出現「對應」之後,接下來兩行必須是舊的驅動程式和新驅動程式。 空白行和批註行無法分解三行地圖區塊。
下列範例顯示驅動程式取代對應檔。
# 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 檔案保護 (WFP)。
您不需要重新啟動目標電腦。 不論驅動程式是否已重新啟動,目標計算機都會載入驅動程式時發生。 當然,大部分驅動程式都會在開機過程中載入,因此實際上您應該在載入對應檔案之後重新啟動目標計算機。
如果已定義_NT_KD_FILES變數,則會在啟動核心調試程式時讀取指定的驅動程式取代對應檔。 如果您發出 .kdfiles 命令,則會立即讀取指定的檔案。 此時,調試程式會確認檔案具有基本的 map/line/line 格式。 但在替代發生之前,不會驗證實際的路徑和檔名。
讀取對應檔案之後,調試程式會儲存其內容。 如果您在此點之後變更此檔案,則變更不會有任何作用(除非您重新發出 .kdfiles 命令)。