Partager via


Mappage des fichiers de pilote

Le remplacement des fichiers de pilote peut être difficile. Souvent, vous devez démarrer vers la version sécurisée Microsoft Windows, remplacer le binaire du pilote, puis recommencer.

Une autre méthode consiste à utiliser des fichiers de mappage. Vous pouvez utiliser cette méthode de mappage pour remplacer n’importe quel pilote en mode noyau (y compris les pilotes d’affichage), n’importe quel pilote de sous-système Windows ou tout autre module en mode noyau. Par souci de simplicité, ces fichiers sont appelés pilotes dans cette rubrique, même si vous pouvez utiliser cette méthode pour n’importe quel module en mode noyau.

Vous pouvez utiliser cette méthode chaque fois que WinDbg ou KD est attaché en tant que débogueur de noyau. Vous pouvez également utiliser cette méthode sur un pilote de démarrage, mais la procédure est plus difficile. Pour plus d’informations sur l’utilisation de cette méthode avec les pilotes de démarrage, consultez Remplacement des pilotes de démarrage.

Pour utiliser un mappage de remplacement de pilote afin de remplacer les fichiers de pilote, procédez comme suit :

  1. Créez un fichier de mappage de remplacement de pilote. Ce fichier texte répertorie les pilotes sur l’ordinateur cible et leurs pilotes de remplacement sur l’ordinateur hôte. Vous pouvez remplacer n’importe quel nombre de pilotes. Par exemple, vous pouvez créer un fichier nommé Mymap.ini dans le répertoire d:\Map_Files de l'ordinateur hôte qui contient les informations suivantes.

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

    Pour plus d’informations sur la syntaxe de ce fichier, consultez la page Format de fichier de mappage de remplacement de pilote.

  2. Configurez une connexion de débogage de noyau sur l’ordinateur cible, puis démarrez le débogueur de noyau (KD ou WinDbg) sur l'ordinateur hôte. (Vous n’êtes pas obligé de vous connecter à l’ordinateur cible.)

  3. Chargez le fichier de mappage de remplacement de pilote en effectuant l’une des opérations suivantes :

    • Définissez la variable d’environnement _NT_KD_FILES avant de démarrer le débogueur de noyau.

      D:\Debugging Tools for Windows> set _NT_KD_FILES=d:\Map_Files\mymap.ini
      D:\Debugging Tools for Windows> kd
      
    • Après avoir démarré le débogueur du noyau, utilisez la commande .kdfiles (fichier de mappage de remplacement de pilote défini).

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

      Vous pouvez également utiliser la commande .kdfiles pour afficher le fichier de mappage de remplacement de pilote actuel ou pour supprimer le mappage de remplacement de pilote. Si vous n’utilisez pas cette commande, le mappage est utilisé de manière persistante jusqu’à ce que vous quittiez le débogueur.

Une fois cette procédure terminée, le mappage de remplacement de pilote prend effet.

Chaque fois que l’ordinateur cible est sur le point de charger un pilote, il interroge le débogueur de noyau pour déterminer si ce pilote a été mappé. Si le pilote a été mappé, le fichier de remplacement est envoyé via la connexion du noyau et copié sur l’ancien fichier de pilote. Le nouveau pilote est ensuite chargé.

Format de fichier de mappage de remplacement de pilote

Chaque remplacement de fichier de pilote est indiqué par trois lignes dans le fichier de mappage de remplacement de pilote.

  • La première ligne se compose du mot « map ».

  • La deuxième ligne spécifie le chemin d’accès et le nom de fichier de l’ancien pilote sur l’ordinateur cible.

  • La troisième ligne spécifie le chemin complet du nouveau pilote. Ce pilote peut se trouver sur l’ordinateur hôte ou sur un autre serveur.

Vous pouvez répéter ce modèle d’informations n’importe quel nombre de fois.

Les chemins d’accès et les noms de fichiers ne sont pas sensibles à la casse, et les noms de fichiers réels du pilote peuvent être différents. Le fichier que vous spécifiez sur la troisième ligne est copié sur le fichier que vous spécifiez sur la deuxième ligne lorsque l’ordinateur cible est sur le point de charger ce pilote.

Kdfiles tente de faire correspondre le nom de fichier stocké dans la base de données SCM (Service Control Manager). Le nom de la base de données SCM est identique au nom fourni à MmLoadSystemImage.

Dans Windows 10 et les versions ultérieures des outils de débogage, le mappage de pilote met en correspondance le nom du pilote de manière dynamique et détermine le chemin approprié. Le chemin d’accès complet n’a pas besoin d’être spécifié et l’extension de fichier est facultative. Vous pouvez utiliser l’une de ces entrées pour mettre en correspondance le pilote dans le système de fichiers NT.

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

Vous pouvez utiliser l’une de ces entrées pour mettre en correspondance le pilote dans le noyau NT.

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

Le fichier de mappage peut inclure des lignes vides et des lignes de commentaire commençant par un signe numérique (#). Toutefois, une fois que « map » apparaît dans le fichier, les deux lignes suivantes doivent être celles de l’ancien pilote et du nouveau pilote. Les trois lignes des blocs de mappage ne doivent pas contenir de lignes vides ni de lignes de commentaire.

L’exemple suivant montre un fichier de mappage de remplacement de pilote.

# 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

Le fichier de mappage de remplacement de pilote doit être un fichier texte, mais vous pouvez utiliser n’importe quel nom de fichier et n'importe quelle extension de nom de fichier (.ini, .txt, .map, etc.).

Remarques supplémentaires

Lorsque la substitution du pilote se produit, un message s’affiche dans le débogueur de noyau.

Si vous utilisez Ctrl+D (dans KD) ou Ctrl+Alt+D (dans WinDbg), vous pouvez voir des informations détaillées sur la requête de remplacement. Ces informations peuvent être utiles si vous ne savez pas si le nom que vous avez répertorié correspond à celui de la base de données SCM.

Vous pouvez activer l’option bcdedit bootdebug pour afficher les informations de démarrage anticipées utiles pour remplacer le noyau, le HAL ou les pilotes de démarrage.

bcdedit -bootdebug on

Pour plus d’informations, consultez Référence des options BCDEdit.

Si le débogueur de noyau est quitté, aucun remplacement de pilote ne se produit. Toutefois, pour les pilotes qui ont déjà été remplacés, les anciens fichiers binaires ne sont pas rétablis, car les fichiers du pilote ont déjà été remplacés.

Cette fonctionnalité de remplacement de pilote contourne automatiquement la protection des fichiers Windows (WFP).

Vous n’avez pas besoin de redémarrer l’ordinateur cible. Le remplacement de pilote se produit chaque fois que l’ordinateur cible charge un pilote, qu’il ait été redémarré ou non. Bien sûr, la plupart des pilotes sont chargés pendant le processus de démarrage. Par conséquent, dans la pratique, vous devez redémarrer l’ordinateur cible une fois le fichier de mappage chargé.

Si la variable _NT_KD_FILES est définie, le fichier de mappage de remplacement de pilote spécifié est lu lorsque le débogueur de noyau est démarré. Si vous émettez la commande .kdfiles, le fichier spécifié est lu immédiatement. À ce stade, le débogueur vérifie que le fichier a le format de base map/ligne/ligne. Toutefois, les chemins d’accès réels et les noms de fichiers ne sont pas vérifiés tant que la substitution n’a pas lieu.

Une fois le fichier de mappage lu, le débogueur stocke son contenu. Si vous modifiez ce fichier après ce point, les modifications n’ont aucun effet (sauf si vous relancez la commande .kdfiles).