Partilhar via


Mapeando arquivos de driver

A substituição de arquivos de driver pode ser difícil. Frequentemente, você precisa inicializar para o build seguro do Microsoft Windows, substituir o binário do driver e, em seguida, inicializar novamente.

Existe um método alternativo usando 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, mesmo que você possa usar esse método para qualquer módulo de 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 Substituindo 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 para o computador de destino e inicie o depurador de kernel (KD ou WinDbg) no computador host. (Você não precisa realmente entrar no computador de destino.)

  3. Carregue o arquivo de mapa de substituição do driver seguindo um destes procedimentos:

    • Defina 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) depois de 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 do driver atual ou excluir o mapa de substituição do driver. Se você não usar esse comando, o mapa persistirá até que você saia do depurador.

Depois de concluir este procedimento, o mapa de substituição do driver entra 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 de kernel e copiado sobre o arquivo de driver antigo. Em seguida, o novo driver é carregado.

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

Cada substituição de arquivo de driver é indicada por três linhas no arquivo de mapa de substituição do 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. Esse driver pode estar localizado no computador host ou em algum outro servidor.

Você pode repetir esse padrão de informações várias vezes.

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.

Os Kdfiles tentarão corresponder ao nome de arquivo armazenado no banco de dados do SCM (Service Control Manager). O nome no banco de dados SCM é idêntico ao nome que foi passado para MmLoadSystemImage.

Em 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. O caminho completo não precisa ser especificado e a extensão de arquivo é opcional. Você pode usar qualquer uma dessas entradas para corresponder ao driver do sistema de arquivos NT.

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

Você pode usar qualquer uma dessas entradas para corresponder ao driver de kernel NT.

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

O arquivo de mapa pode incluir linhas em branco e pode incluir linhas de comentário que começam com um sinal numérico (#). No entanto, depois que "map" aparecer no arquivo, as próximas duas linhas deverão ser o driver antigo e o novo driver. As linhas em branco e as linhas de comentário não podem dividir 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 você pode 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 aparece no depurador de kernel.

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

Você pode habilitar a opção bcdedit bootdebug para exibir 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 bcdedit.

Se o depurador de kernel for encerrado, não ocorrerá mais substituição de driver. No entanto, todos os drivers que já foram substituídos não reverter aos binários antigos, pois os arquivos de driver são realmente substituídos.

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

Você não precisa 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. É claro que a maioria dos drivers é carregada durante o processo de inicialização, portanto, na prática, você deve reiniciar o computador de destino depois que o arquivo de mapa tiver sido carregado.

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 reais e os nomes de arquivo não são verificados até que a substituição ocorra.

Depois que o arquivo de mapa for lido, 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ê reempõe o comando .kdfiles ).