Compartir vía


Asignación de archivos de controladores

Reemplazar archivos de controlador puede ser difícil. Con frecuencia, tienes que arrancar en la compilación segura de Microsoft Windows, reemplazar el archivo binario del controlador y, a continuación, arrancar 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 simplificar, estos archivos se denominan controladores de 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 controladores para reemplazar los archivos de controlador, haga lo siguiente:

  1. Cree un archivo de asignación de reemplazo de controladores. Este archivo es un archivo de texto que enumera los controladores en el equipo de destino y sus controladores de reemplazo en el equipo host. Puede reemplazar cualquier número de controladores. 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, vea Driver Replacement Map File Format.

  2. Configure una conexión de depuración de kernel al equipo de destino e inicie el depurador de kernel (KD o WinDbg) en el equipo host. (No es necesario que se interrumpa realmente en el equipo de destino).

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

    • Establezca 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 (Establecer mapa de reemplazo de controladores) 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 mostrar el archivo de mapa de reemplazo del controlador actual o para eliminar el mapa de reemplazo del controlador. Si no usa este comando, el mapa persiste hasta que salga del depurador.

Después de completar este procedimiento, el mapa de reemplazo del controlador surte efecto.

Cada vez que el equipo de destino está a punto de cargar un controlador, consulta 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 sobre el archivo de controlador anterior. A continuación, se carga el nuevo controlador.

Formato de archivo de asignación de reemplazo de controladores

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

  • La primera línea consta de la palabra "map".

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

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

Puede repetir este patrón de información cualquier número de veces.

Las rutas de acceso y los nombres de archivo no distinguen mayúsculas de minúsculas y los nombres de archivo del controlador reales pueden ser diferentes. El archivo que especifique en la tercera línea se copia sobre el archivo que especifique en la segunda línea cuando el equipo de destino está a punto de cargar ese controlador.

Kdfiles intentará coincidir con el nombre de archivo almacenado en la base de datos de Service Control Manager (SCM). El nombre de la base de datos SCM es idéntico al nombre que se pasó 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 de acceso adecuada. No es necesario especificar la ruta de acceso 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 NT.

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

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

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

El archivo de mapa puede incluir líneas en blanco y puede incluir líneas de comentario que comienzan por un signo de número (#). Sin embargo, después de que aparezca "map" 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 comentario no pueden dividir los bloques de mapa de tres líneas.

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

# 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 del 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 de controladores, aparece 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 está seguro de si el nombre que ha enumerado coincide con el de la base de datos SCM.

Puede habilitar la opción bcdedit bootdebug para ver la información de arranque temprana que resulta útil para reemplazar el kernel, los controladores hal o boot.

bcdedit -bootdebug on

Para obtener más información, vea BcDEdit Options Reference( Referencia de opciones de BCDEdit).

Si se cierra el depurador de kernel, no se produce más reemplazo de controladores. Sin embargo, los controladores que ya se han reemplazado no revierten a sus archivos binarios antiguos, ya que los archivos del controlador se sobrescriben realmente.

Esta característica de reemplazo de controladores omite automáticamente la protección de archivos de Windows (PMA).

No es necesario reiniciar el equipo de destino. El reemplazo del controlador se produce cada vez que el equipo de destino carga un controlador, independientemente de si se ha reiniciado. Por supuesto, la mayoría de los controladores se cargan durante el proceso de arranque, por lo que en la práctica debe reiniciar el equipo de destino una vez cargado el archivo de mapa.

Si se define la variable _NT_KD_FILES, el archivo de asignación de reemplazo del controlador especificado se lee cuando se inicia el depurador de kernel. Si emite el comando .kdfiles , el archivo especificado se lee inmediatamente. En este punto, el depurador comprueba que el archivo tiene el formato básico de mapa, línea y línea. Sin embargo, las rutas de acceso reales y los nombres de archivo no se comprueban hasta que se produzca la sustitución.

Una vez leído el archivo de mapa, el depurador almacena su contenido. Si cambia este archivo después de este punto, los cambios no tienen ningún efecto (a menos que vuelva a emitir el comando .kdfiles ).