File di driver di mapping

La sostituzione dei file driver può essere difficile. Spesso, è necessario avviare la compilazione sicura di Microsoft Windows, sostituire il file binario del driver e quindi riavviare.

Esiste un metodo alternativo usando i file di mapping. È possibile usare questo metodo di mapping per sostituire qualsiasi driver in modalità kernel (inclusi i driver di visualizzazione), qualsiasi driver del sottosistema Windows o qualsiasi altro modulo in modalità kernel. Per semplicità, questi file sono chiamati driver in questo argomento, anche se è possibile usare questo metodo per qualsiasi modulo in modalità kernel.

È possibile usare questo metodo ogni volta che WinDbg o KD è collegato come debugger del kernel. È anche possibile usare questo metodo su un driver di avvio, ma è più difficile. Per altre informazioni su come usare questo metodo con i driver di avvio, vedere Sostituzione dei driver di avvio.

Per usare una mappa di sostituzione driver per sostituire i file driver, eseguire le operazioni seguenti:

  1. Creare un file di mapping sostitutivo del driver. Questo file è un file di testo che elenca i driver nel computer di destinazione e i relativi driver sostitutivi nel computer host. È possibile sostituire qualsiasi numero di driver. Ad esempio, è possibile creare un file denominato Mymap.ini nella directory d:\Map_Files del computer host che contiene le informazioni seguenti.

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

    Per altre informazioni sulla sintassi di questo file, vedere Driver Replacement Map File Format.For more information about the syntax of this file file, see Driver Replacement Map File Format.

  2. Configurare una connessione di debug del kernel al computer di destinazione e avviare il debugger del kernel (KD o WinDbg) nel computer host. Non è necessario eseguire effettivamente l'interruzione nel computer di destinazione.

  3. Caricare il file di mapping sostitutivo del driver eseguendo una delle operazioni seguenti:

    • Impostare la variabile di ambiente _NT_KD_FILES prima di avviare il debugger del kernel.

      D:\Debugging Tools for Windows> set _NT_KD_FILES=d:\Map_Files\mymap.ini
      D:\Debugging Tools for Windows> kd
      
    • Usare il comando .kdfiles (Set Driver Replacement Map) dopo aver avviato il debugger del kernel.

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

      È anche possibile usare il comando .kdfiles per visualizzare il file della mappa di sostituzione del driver corrente o per eliminare la mappa sostitutiva del driver. Se non si usa questo comando, la mappa viene mantenuta fino a quando non si esce dal debugger.

Dopo aver completato questa procedura, la mappa di sostituzione del driver diventa effettiva.

Ogni volta che il computer di destinazione sta per caricare un driver, esegue una query sul debugger del kernel per determinare se il driver è stato mappato. Se il driver è stato mappato, il file di sostituzione viene inviato tramite la connessione kernel e copiato sul file del driver precedente. Il nuovo driver viene quindi caricato.

Formato file mappa sostituzione driver

Ogni sostituzione del file driver è indicata da tre righe nel file della mappa di sostituzione driver.

  • La prima riga è costituita dalla parola "map".

  • La seconda riga specifica il percorso e il nome file del driver precedente nel computer di destinazione.

  • La terza riga specifica il percorso completo del nuovo driver. Questo driver può trovarsi nel computer host o in un altro server.

È possibile ripetere questo modello di informazioni in un numero qualsiasi di volte.

I percorsi e i nomi dei file non fanno distinzione tra maiuscole e minuscole e i nomi dei file di driver effettivi possono essere diversi. Il file specificato nella terza riga viene copiato sul file specificato nella seconda riga quando il computer di destinazione sta per caricare tale driver.

Kdfile tenterà di corrispondere al nome file archiviato nel database di Service Control Manager (SCM). Il nome nel database SCM è identico al nome passato a MmLoadSystemImage.

In Windows 10 e versioni successive degli strumenti di debug, il mapping dei driver funziona in modo da corrispondere dinamicamente al nome del driver e determinare il percorso appropriato. Non è necessario specificare il percorso completo e l'estensione del file è facoltativa. È possibile utilizzare una di queste voci per trovare la corrispondenza con il driver del file system NT.

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

È possibile usare una di queste voci per trovare la corrispondenza con il driver del kernel NT.

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

Il file di mappa può includere righe vuote e può includere righe di commento che iniziano con un segno di numero (#). Tuttavia, dopo che "map" viene visualizzato nel file, le due righe successive devono essere il vecchio driver e il nuovo driver. Le righe vuote e le linee di commento non possono suddividere i blocchi della mappa a tre linee.

Nell'esempio seguente viene illustrato un file di mapping sostitutivo del driver.

# 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

Il file di mapping sostitutivo del driver deve essere un file di testo, ma è possibile usare qualsiasi nome file e estensione di file (.ini, .txt, mappa e così via).

Note aggiuntive

Quando si verifica la sostituzione del driver, viene visualizzato un messaggio nel debugger del kernel.

Se si usa CTRL+D (in KD) o CTRL+ALT+D (in WinDbg), vengono visualizzate informazioni dettagliate sulla richiesta di sostituzione. Queste informazioni possono essere utili se non si è certi che il nome elencato corrisponda a quello nel database SCM.

È possibile abilitare l'opzione bcdedit bootdebug per visualizzare le informazioni di avvio anticipato utili per sostituire il kernel, il hal o i driver di avvio.

bcdedit -bootdebug on

Per altre informazioni, vedere Informazioni di riferimento sulle opzioni BCDEdit.

Se il debugger del kernel viene chiuso, non viene eseguita alcuna sostituzione del driver. Tuttavia, tutti i driver che sono già stati sostituiti non ripristinano i file binari precedenti, perché i file del driver vengono effettivamente sovrascritti.

Questa funzionalità di sostituzione driver ignora automaticamente Windows File Protection (WFP).

Non è necessario riavviare il computer di destinazione. La sostituzione del driver si verifica ogni volta che il computer di destinazione carica un driver, indipendentemente dal fatto che sia stato riavviato. Naturalmente, la maggior parte dei driver viene caricata durante il processo di avvio, quindi in pratica è consigliabile riavviare il computer di destinazione dopo il caricamento del file di mappa.

Se viene definita la variabile _NT_KD_FILES, il file di mapping di sostituzione driver specificato viene letto all'avvio del debugger del kernel. Se si esegue il comando .kdfiles , il file specificato viene letto immediatamente. A questo punto, il debugger verifica che il file abbia il formato di base mappa/linea/linea. Tuttavia, i percorsi e i nomi di file effettivi non vengono verificati fino a quando non si verifica la sostituzione.

Dopo la lettura del file di mapping, il debugger ne archivia il contenuto. Se si modifica questo file dopo questo punto, le modifiche non hanno alcun effetto (a meno che non venga riemesso il comando .kdfiles ).