Compartir a través de


Archivos de asignación de controlador

Reemplazar archivos de controlador puede ser difícil. Con frecuencia, es necesario iniciar el arranque en la compilación segura de Microsoft Windows, reemplazar el archivo binario del controlador y luego iniciar de nuevo.

Existe un método alternativo mediante archivos de asignación. Puede usar este método de asignación para reemplazar cualquier controlador en modo kernel (incluidos los controladores de pantalla), cualquier controlador del subsistema de Windows o cualquier otro módulo en modo kernel. Para hacerlo más simple, estos archivos se denominan controladores en este tema, aunque puede usar este método para cualquier módulo en modo kernel.

Puede usar este método siempre que WinDbg o KD esté asociado como depurador de kernel. También puede usar este método en un controlador de arranque, pero es más difícil. Para obtener más información sobre cómo usar este método con controladores de arranque, consulte Reemplazo de controladores de arranque.

Para usar una asignación de reemplazo de controlador para sustituir archivos de controladores, haga lo siguiente:

  1. Cree un archivo de asignación de reemplazo de controladores. Este archivo es un archivo de texto donde figuran los controladores en el equipo de destino y sus controladores de reemplazo en el equipo host. Puede reemplazar el número de controladores que desee. Por ejemplo, puede crear un archivo denominado Mymap.ini en el directorio d:\Map_Files del equipo host que contiene la siguiente información.

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

    Para obtener más información sobre la sintaxis de este archivo, consulte Formato de archivo de asignación de reemplazo de controladores.

  2. Configure una conexión de depuración de kernel en el equipo de destino e inicie el depurador de kernel (KD o WinDbg) en el equipo host. (No tiene que entrar en el equipo de destino).

  3. Cargue el archivo de asignación de reemplazo de controladores realizando una de las siguientes acciones:

    • Cree la variable de entorno _NT_KD_FILES antes de iniciar el depurador de kernel.

      D:\Debugging Tools for Windows> set _NT_KD_FILES=d:\Map_Files\mymap.ini
      D:\Debugging Tools for Windows> kd
      
    • Use el comando .kdfiles (crear asignación de controlador) después de iniciar el depurador de kernel.

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

      También puede usar el comando .kdfiles para ver el archivo de asignación de reemplazo de controlador actual o para eliminar la asignación de reemplazo de controlador. Si no usa este comando, la asignación seguirán aplicándose hasta que salga del depurador.

Tras completar el proceso, la asignación de reemplazo de controlador surtirá efecto.

Cada vez que el equipo de destino está a punto de cargar un controlador, consultará al depurador de kernel para determinar si se ha asignado este controlador. Si el controlador se ha asignado, el archivo de reemplazo se envía a través de la conexión del kernel y se copia a través del archivo de controlador antiguo. Tras esto, se carga el nuevo controlador.

Formato de archivo de asignación de reemplazo de controlador

Cada reemplazo de archivos de controlador se indica mediante tres líneas en el archivo de asignación de reemplazo de controlador.

  • La primera línea incluye la palabra "map".

  • La segunda línea indica la ruta y el nombre de archivo del antiguo controlador en el equipo de destino.

  • La tercera línea indica la ruta completa del nuevo controlador. Este controlador se puede ubicar en el equipo host o en algún otro servidor.

Puede repetir este patrón de información las veces que desee.

Las rutas y los nombres de archivo no distinguen entre mayúsculas y minúsculas y los nombres de archivo de controladores reales pueden ser diferentes. El archivo que indique en la tercera línea se copiará en el archivo que señale en la segunda línea cuando el equipo de destino esté a punto de cargar ese controlador.

Los .kdfiles intentarán buscar el mismo nombre de archivo almacenado en la base de datos del administrador de control de servicios (Service Control Manager, SCM). El nombre de la base de datos de SCM es idéntico al nombre que se haya pasado a MmLoadSystemImage.

En Windows 10 y versiones posteriores de las herramientas de depuración, la asignación de controladores funciona para que coincida dinámicamente con el nombre del controlador y determinar la ruta adecuada. No es necesario indicar la ruta completa y la extensión de archivo es opcional. Puede usar cualquiera de estas entradas para que coincidan con el controlador del sistema de archivos de NT.

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

Puede usar cualquiera de estas entradas para que coincidan con el controlador kernel de NT.

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

El archivo de asignación puede incluir líneas en blanco y líneas de comentarios que comienzan con un signo numérico (#). Sin embargo, después de que "map" aparezca en el archivo, las dos líneas siguientes deben ser el controlador antiguo y el nuevo controlador. Las líneas en blanco y las líneas de comentarios no pueden dividir los bloques de asignación de tres líneas.

En el ejemplo siguiente se muestra un archivo de asignación de reemplazo de controlador.

# 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

El archivo de asignación de reemplazo de controlador debe ser un archivo de texto, pero puede usar cualquier nombre de archivo y extensión de nombre de archivo (.ini, .txt, .map, etc.).

Notas adicionales

Cuando se produce la sustitución del controlador, saldrá un mensaje en el depurador de kernel.

Si usa CTRL+D (en KD) o CTRL+ALT+D (en WinDbg), verá información detallada sobre la solicitud de reemplazo. Esta información puede ser útil si no sabe con seguridad si el nombre que ha visto coincide con el de la base de datos de SCM.

Puede habilitar la opción bcdedit bootdebug para ver la información de arranque previa que le será útil para reemplazar los controladores kernel, hal o de arranque.

bcdedit -bootdebug on

Para obtener más información, consulte Referencia sobre las opciones BCDEdit.

Si se cierra el depurador de kernel, no se aplicará ningún otro reemplazo de controladores. Sin embargo, los controladores que ya se hayan reemplazado no recuperarán sus archivos binarios antiguos, ya que los archivos del controlador se sobrescriben.

Esta función de reemplazo de controladores se salta automáticamente la protección de archivos de Windows (WFP).

No es necesario reiniciar el equipo de destino. El reemplazo del controlador se produce cada vez que el equipo de destino carga un controlador, tanto si se ha reiniciado como si no. Por supuesto, la mayoría de controladores se cargan durante el proceso de arranque, por lo que, en la práctica, debe reiniciar el equipo de destino después de cargar el archivo de asignación.

Si se define la variable _NT_KD_FILES, el archivo de asignación de reemplazo de controlador correspondiente se leerá al iniciar el depurador de kernel. Si genera el comando .kdfiles, el archivo especificado se leerá inmediatamente. En este punto, el depurador comprueba que el archivo tiene el formato básico map/line/line (asignación/línea/línea). Pero las rutas y los nombres de archivo reales no se comprueban hasta que se produzca la sustitución.

Una vez leído el archivo de asignación, el depurador almacena su contenido. Si cambia este archivo tras esto, los cambios no tendrán ningún efecto (a menos que vuelva a generar el comando .kdfiles).