Partilhar via


Mapeamento de arquivos de driver

Substituir arquivos de driver pode ser difícil. Frequentemente, você precisa inicializar a versão segura do Microsoft Windows, substituir o binário do driver e inicializar novamente.

Existe um método alternativo que usa arquivos de mapeamento. Você pode usar esse método de mapeamento para substituir qualquer driver de modo kernel (incluindo drivers de exibição), qualquer driver de subsistema do Windows ou qualquer outro módulo de modo kernel. Para simplificar, esses arquivos são chamados de drivers neste tópico, embora você possa usar esse método para qualquer módulo do modo kernel.

Você pode usar esse método sempre que WinDbg ou KD estiver anexado como um depurador de kernel. Você também pode usar esse método em um driver de inicialização, mas é mais difícil. Para obter mais informações sobre como usar esse método com drivers de inicialização, consulte Substituição de drivers de inicialização.

Para usar um mapa de substituição de driver para substituir arquivos de driver, faça o seguinte:

  1. Crie um arquivo de mapa de substituição de driver. Esse arquivo é um arquivo de texto que lista os drivers no computador de destino e seus drivers de substituição no computador host. Você pode substituir qualquer número de drivers. Por exemplo, você pode criar um arquivo chamado Mymap.ini no diretório d:\Map_Files do computador host que contém as informações a seguir.

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

    Para obter mais informações sobre a sintaxe desse arquivo, consulte Formato de arquivo de mapa de substituição de driver.

  2. Configure uma conexão de depuração de kernel com o computador de destino e inicie o depurador de kernel (KD ou WinDbg) no computador host. (Você não precisa realmente invadir o computador de destino.)

  3. Carregue o arquivo de mapa de substituição de driver seguindo um dos seguintes procedimentos:

    • Configure a variável de ambiente _NT_KD_FILES antes de iniciar o depurador de kernel.

      D:\Debugging Tools for Windows> set _NT_KD_FILES=d:\Map_Files\mymap.ini
      D:\Debugging Tools for Windows> kd
      
    • Use o comando .kdfiles (Definir mapa de substituição de driver) após iniciar o 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'
      

      Você também pode usar o comando .kdfiles para exibir o arquivo de mapa de substituição de driver atual ou para excluir o mapa de substituição de driver. Se esse comando não for usado, o mapa persistirá até que você saia do depurador.

Após concluir esse procedimento, o mapa de substituição de driver entrará em vigor.

Sempre que o computador de destino está prestes a carregar um driver, ele consulta o depurador de kernel para determinar se esse driver foi mapeado. Se o driver tiver sido mapeado, o arquivo de substituição será enviado pela conexão do kernel e copiado pelo arquivo de driver antigo. O novo driver é carregado.

Formato de arquivo de mapa de substituição de driver

Cada substituição de arquivo de driver é indicada por três linhas no arquivo de mapa de substituição de driver.

  • A primeira linha consiste na palavra "mapa".

  • A segunda linha especifica o caminho e o nome do arquivo do driver antigo no computador de destino.

  • A terceira linha especifica o caminho completo do novo driver. Este driver pode estar localizado no computador host ou em algum outro servidor.

Você pode repetir esse padrão de informações quantas vezes quiser.

Caminhos e nomes de arquivo não diferenciam maiúsculas de minúsculas e os nomes de arquivo de driver reais podem ser diferentes. O arquivo especificado na terceira linha é copiado sobre o arquivo especificado na segunda linha quando o computador de destino está prestes a carregar esse driver.

O Kdfiles tentará corresponder ao nome do arquivo armazenado no banco de dados do SCM (Gerenciador de Controle de Serviço). O nome no banco de dados do SCM é idêntico ao nome que foi passado para MmLoadSystemImage.

No Windows 10 e versões posteriores das ferramentas de depuração, o mapeamento de driver funciona para corresponder ao nome do driver dinamicamente e determinar o caminho adequado. Não é necessário especificar o caminho completo e a extensão do arquivo é opcional. É possível usar qualquer uma dessas entradas para corresponder ao driver do sistema de arquivos NT.

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

É possível usar qualquer uma dessas entradas para corresponder ao driver do kernel NT.

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

O arquivo de mapa pode incluir linhas em branco e linhas de comentário que começam com um sinal de número (#). No entanto, depois que "mapa" aparecer no arquivo, as próximas duas linhas devem ser o driver antigo e o novo driver. As linhas em branco e as linhas de comentário não podem quebrar os blocos de mapa de três linhas.

O exemplo a seguir mostra um arquivo de mapa de substituição de 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

O arquivo de mapa de substituição de driver deve ser um arquivo de texto, mas é possível usar qualquer nome de arquivo e extensão de nome de arquivo (.ini, .txt, .map e assim por diante).

Observações adicionais

Quando ocorre a substituição do driver, uma mensagem é exibida no depurador de kernel.

Se você usar CTRL+D (em KD) ou CTRL+ALT+D (em WinDbg), verá informações detalhadas sobre a solicitação de substituição. Essas informações podem ser úteis se você não tiver certeza se o nome listado corresponde ao do banco de dados do SCM.

Você pode habilitar a opção bcdedit bootdebug para visualizar informações de inicialização antecipada que são úteis para substituir o kernel, o hal ou os drivers de inicialização.

bcdedit -bootdebug on

Para obter mais informações, consulte Referência de opções do BCDEdit.

Se o depurador de kernel for encerrado, não haverá mais substituição de driver. No entanto, todos os drivers que já foram substituídos não serão revertidos para seus binários antigos, pois os arquivos de driver foram realmente substituídos.

Esse recurso de substituição de driver ignora automaticamente a Proteção de Arquivo do Windows (WFP).

Não é necessário reiniciar o computador de destino. A substituição do driver ocorre sempre que o computador de destino carrega um driver, independentemente de ele ter sido reiniciado. Obviamente, a maioria dos drivers é carregada durante o processo de inicialização. Portanto, na prática, você deve reiniciar o computador de destino depois de carregar o arquivo de mapa.

Se a variável _NT_KD_FILES for definida, o arquivo de mapa de substituição de driver especificado será lido quando o depurador de kernel for iniciado. Se você emitir o comando .kdfiles, o arquivo especificado será lido imediatamente. Neste ponto, o depurador verifica se o arquivo tem o formato básico de mapa/linha/linha. Mas os caminhos e nomes de arquivo reais não são verificados até que ocorra a substituição.

Após a leitura do arquivo de mapa, o depurador armazenará seu conteúdo. Se você alterar esse arquivo após esse ponto, as alterações não terão efeito (a menos que você reemita o comando .kdfiles).