Compartilhar via


Limitações de $WinPeDriver$ quando usadas em conjunto com outros métodos de injeção de driver

Este artigo fornece diretrizes sobre como incluir drivers no WinPE e no sistema operacional a ser instalado para que o driver esteja disponível na parte winpe da instalação e também acabe na instalação do sistema operacional concluída.

Aplica-se a: Windows 7 Service Pack 1, Windows Server 2012 R2, Windows Server 2008 R2 Service Pack 1
Número de KB original: 2686316

Resumo

Ao adicionar um driver à mídia de instalação, não misture versões. Use a mesma versão de cada driver em toda a mídia.

Há vários métodos diferentes para incluir drivers fora de caixa no Winpe (boot.wim) e o sistema operacional de instalação de destino (install.wim). Se as versões do driver não corresponderem, o primeiro driver carregado na memória será usado independentemente das regras de classificação PNP. Outras versões podem ser marcadas como drivers 'Ruins' que impedirão que esses drivers sejam selecionados pelo PNP posteriormente. Isso inclui qualquer driver carregado na memória durante a inicialização para WinPE (fase Winpe) da instalação. Exemplos podem incluir injetar drivers em boot.wim por meio de DISM.exe ou carregar um driver usando Drvload.exe para carregar manualmente o driver.

Objetivo

Considere o seguinte cenário: você está criando uma imagem personalizada do WinPE (Ambiente de Pré-instalação do Windows) para fins de instalar sistemas operacionais Windows que precisam de um driver de controlador de armazenamento fora de caixa antes de executar Setup.exe para manipular os discos. Além disso, você deseja fornecer drivers "atualizados" para inclusão por meio do recurso de pasta \$WinPEDriver$ da Instalação, para incluir versões posteriores do mesmo driver.

O recurso $WinPEDriver$ destina-se como um método para fornecer drivers no momento da instalação. No entanto, é um recurso de Setup.exe e, como tal, não é invocado até que Setup.exe seja iniciado. Os drivers para dispositivos atuais que são injetados manualmente no driverstore winPE boot.wim usando DISM são carregados na memória na hora da inicialização. Esses dois mecanismos são separados e há algumas ressalvas para usá-los juntos.

O WinPE não tem um mecanismo interno para descarregar drivers carregados na memória, portanto, todos os drivers para dispositivos que já foram carregados não serão recarregados quando setup.exe iniciar, pois já há drivers para o dispositivo carregado. Esse erro fará com que a configuração marque o driver na pasta $WinPEDriver$ como um driver ruim, mesmo que seja mais recente do que a versão do driver injetada no WinPE e, de outra forma, a supere. A instalação não tem nenhum conhecimento explícito dos drivers que foram carregados no boot.wim.

Esse comportamento é por design; no entanto, este artigo identificará um método de acomodação desse cenário para que esses drivers ainda possam ser incluídos no sistema operacional implantável.

Mais informações

Dado o cenário acima, colocar o WinPE em um disco rígido ou pen drive usb flash (UFD) inicializável seria mais preferível.

Neste documento, vamos destacar métodos para injetar drivers e iniciar janelas. O gráfico a seguir mostra brevemente métodos e resultados da inclusão de drivers.

WinPE (nativo in-box ou injetado) (drivers out-box em $WinPEDriver$) Resultado (Pós-sistema operacional)
Se o WinPE contiver a versão do driver X1 injetada por meio de Dism.exe contém a versão X2 do driver com o mesmo nome do driver X1 será carregado na instalação do sistema operacional pós-sistema operacional e X2 será ignorado
Se o WinPE instalar o driver X2 usando Drvload.exe de $WinPEDriver$ contém a versão X2 do driver com o mesmo nome do driver O X2 será transportado na instalação do sistema operacional pós-sistema operacional
se o WinPE contiver o driver X1 que não seja inicializado (nativo na caixa) não contém nenhum driver Usará o driver nativo X1 na caixa. Nenhum driver fora de caixa estará disponível para a instalação do sistema operacional pós-dispositivo

Limitações de driver

Tenha em mente que há alguns drivers que podem ser incluídos e/ou carregados que podem não estar funcionais durante a instalação do WinPE. Isso incluiria, mas não é limitado também; drivers de vídeo, drivers de adaptador sem fio e drivers de áudio. O comportamento descrito neste documento não é específico para drivers BootCritical (os drivers precisam durante o inicialização, como drivers de controlador para acesso ao disco rígido) e está em vigor para todos os drivers carregados durante a instalação/implantação.

Percorrer o carregamento de drivers de StartNet.cmd

É apenas um método para incluir o mesmo driver no WinPE (Ambiente de Pré-instalação do Windows) além de disponibilizá-lo para o sistema operacional instalador; outros métodos são possíveis usando as informações ainda mais neste documento.

  1. Configurar o computador do técnico:

    1. Instale o OPK/AIK para o computador de técnicos com suporte.
    2. Copie bits do Windows a serem modificados para o HDD local c:\bin.
    3. Localizar/baixar/extrair drivers a serem incluídos na mídia.
  2. Prepare o dispositivo USB por página da Web para nomear o dispositivo como "INSTALL_WIN7". Esse nome é usado posteriormente e, se você alterar isso, você deverá alterar o nome no script de exemplo descrito na etapa nº 6 e o exemplo abaixo (links de página da Web são listados no final do documento)

  3. Crie arquivos WinPE para copiar no dispositivo USB, abra o prompt de comando administrativo e execute:

    1. Copype.cmd <arch> <path>
    2. Copy <pathto> winpe.wim to \ISO\sources\boot.wim
  4. Montar boot.wim:

    1. Dism /get-wiminfo /wimfile:\<pathto>\boot.wim
    2. Dism /mount-wim /wimfile:<pathto>\boot.wim /index:1 /mountdir:<pathto>\Mount
  5. Abra um Prompt de Comando Administrativo e edite \mount\windows\system32\startnet.cmd (usando Notepad.exe ou semelhante).

  6. O script de exemplo a seguir identifica dispositivos USB e disponibiliza drivers durante o WinPE usando Drvload.exe. Corte e cole o script no arquivo startnet.cmd que você abriu.

    Observação

    Talvez você queira copiar o script em notepad.exe ou algum outro editor de texto primeiro para remover a formatação.

    wpeinit
    :ChkVar
    :: Locating USB Device
    IF NOT DEFINED usbdrv (  
    ECHO list vol | diskpart | find "INSTALL_WIN7" > pt.txt  
    FOR /F "tokens=3" %%a IN (pt.txt) DO (  
    SET usbdrv=%%a^:  
    )  
    del pt.txt /f /q  
    IF EXIST %usbdrv%\InstallOS.bat call InstallOS.bat  
    
  7. Salve StartNet.cmd e feche-o.

  8. Desmonte e confirme alterações em boot.wim usando o seguinte comando:

    Dism /unmount-wim /mountdir:<pathto>mount /commit
    
  9. Copie todos os arquivos na pasta \ISO para um Dispositivo Flash USB (deve ser formatado como FAT32 e marcado como Ativo).

  10. Crie uma pasta na raiz do Dispositivo Flash USB chamado $WinpeDriver$.

  11. Copie drivers nesta pasta (por exemplo <, USB_drv>\$WinpeDriver$\DriverX).

  12. Abra o prompt de cmd administrativo e crie USB_drv> de arquivo <\InstallOS.bat, cortando e colando a seguinte linha no arquivo de lote:
    drvload %usbdrv%\$winpedriver$\<device>\filename. INF

  13. Para incluir arquivos de origem de instalação do Sistema Operacional Windows do DVD:

    1. Crie a seguinte pasta no polegar USB: <USB_drv>\<OS>\Sources (por exemplo, e:\Win2008r2x64\Sources).
    2. Selecione e copie DVD\sources\* para <USB_drv>\<OS>\sources (você pode excluir boot.wim)
    3. Para iniciar manualmente setup.exe quando inicializado no WinPE, selecione <USB_drv>\<os\Sources\Setup.exe e adicione todos os> comutadores apropriados conforme necessário.
    4. Para implantação totalmente automatizada, adicione a seguinte linha ao arquivo InstallOS.bat, adicionando todas as opções apropriadas:
      %usbdrv%\<OS>\Sources\Setup.exe
  14. TESTE inicializando para um dispositivo USB no computador TEST

Métodos para disponibilizar drivers para WinPE

Os métodos para incluir drivers no WinPE incluem:

  1. Injeção de tempo de compilação de imagem por meio de DISM.exe – Places driver no Driverstore da imagem WinPE e ele é selecionado por meio de Plug and Play na hora da inicialização do WinPE. Ele não se propaga para o sistema operacional instalado. Para esse método, você deve montar os arquivos WIM para acesso, injetar o driver e, em seguida, salvar e confirmar as alterações no WIM.

    Etapas para coletar informações, montar, injetar e desmontar WIM:

    1. DISM /get-wiminfo /wimfile:<pathto>boot.wim
    2. DISM /mount-wim /wimfile:<pathto>boot.wim /index:n /mountdir:<pathto>mount
    3. DISM /add-driver /image:<pathto>mount / driverpath:<pathto>driverINF [e por outro lado, /remove-driver se necessário]
    4. DISM /unmount-wim /commit /mountdir:<pathto>mount
  2. Carregamento do driver de runtime por meio de Drvload.exe – Carrega o driver na memória e inicia o dispositivo. Não propaga o driver para o sistema operacional instalado.

  3. Carregamento do driver de runtime via Devcon.exe – o Devcon é fornecido por meio do código-fonte de exemplo no DDK (Kit de Driver de Dispositivo do Windows)/Kit do Windows Driver (WDK). Você deve criar e compilar sua própria cópia. O Devcon é usado para manipular drivers, como carregar drivers na memória e iniciar dispositivos. Não propaga o driver para o sistema operacional instalado. (Link na seção Referências)

  4. $WinPEDriver$ pasta- Setup.exe tentará carregar todos os drivers no diretório $WinPEDriver$ na memória e também os agendará para injeção no sistema operacional de instalação.

  5. O arquivo de resposta de runtime (unattend.xml) com DriverPath - Path (e credenciais, se necessário) deve ser fornecido em unattend.xml. Ele é usado para acessar arquivos no repositório central que podem estar em um compartilhamento de rede ou local. A instalação tentará carregar todos os drivers no repositório de driver fornecidos no unattend.xml e também os agendará para injeção no sistema operacional instalado.

Iniciar a instalação do Windows

Há vários métodos para iniciar a instalação do sistema operacional do WinPE, incluindo:

  1. Injetando pacotes de instalação em boot.wim.
    1. O WinPE personalizado pode ser modificado para iniciar automaticamente o Windows Setup.exe.
    2. Também pode ser usado para pacotes de idiomas e suporte a scripts.
  2. Iniciando setup.exe de startnet.cmd ou winpeshl.ini.
    1. localizar pendrive/Hdd
    2. Iniciar \path\setup.exe </switches>
  3. Front-end personalizado para substituir cmd.exe (consulte links para Windows RE na seção de referência).
  4. Inicialização da mídia de instalação regular do Windows, que primeiro inicializa até WinPE (Boot.wim) e pode obter entrada do dispositivo USB anexado ou armazenamento de rede. Este método não é discutido neste artigo.

Métodos para adicionar drivers ao Windows

Em seguida, após a progressão da instalação para a inclusão de drivers fora de caixa, há alguns métodos disponíveis para incluir drivers fora de caixa no Windows:

  1. Dism.exe
    1. Dism /get-wiminfo /wimfile:<pathto>Install.wim
    2. Dism /mount-wim /wimfile:<pathto>Install.wim /index:n /mountdir:<pathto>mount
    3. Dism /add-driver [and conversely /remove-driver] /image:<pathto>mount /driverpath:<pathto>driverINF
    4. Dism /unmounts-wim /commit /mountdir:<pathto>mount
  2. \$WinPEDriver$
  3. Executar um script durante a instalação autônoma
    1. unattend.xml (driverstore) no Modo WinPE e Auditoria (mais informações estão na seção Referências e Links).
    2. Setupcomplete.cmd pode ser usado para injeção de driver, mas é aconselhado, pois é uma experiência ruim do usuário e pode causar atrasos na inicialização para a área de trabalho pela primeira vez.
  4. Drvload.exe
    1. Só injeta drivers no sistema operacional atualmente em execução, que se houver WinPE normalmente é disco de RAM.
    2. Drvload <pathto. INF> (pode ser roteado em startnet.cmd (veja exemplos))

Observação

Se o driver a ser usado tiver o mesmo nome de um driver in-box (incluído nativamente na imagem) esses drivers recém-injetados não serão usados pelo sistema operacional de inicialização e você deverá entrar em contato com a fabricação do driver para drivers atualizados. (Se estiver familiarizado com o Kit de Logotipo do Windows (WLK), consulte Devfund0005)

Se um driver for carregado durante a passagem do WinPE (inicialização inicial), não haverá nenhum mecanismo nativo para remover esse driver até que o sistema operacional seja reiniciado.

Há vários métodos para cada etapa do processo de adição de drivers ao Windows. Os métodos fornecem um cenário de implantação extensível e maleável. Você vai querer determinar qual método abaixo funciona melhor para a situação determinada.

Instruções detalhadas para incluir drivers fora de caixa no WinPE

Instalação/ferramentas necessárias:

  • Computador técnico – computador usado para criar/manipular mídia de instalação
  • OPK/AIK instalado
  • USB/UFD ou DVD

Usando DISM.exe:

  1. Instale o OPK (Kit de Pré-instalação do OEM) ou o Windows Automated Installation Kit (Windows AIK)
  2. Clique em Iniciar>Programas>OPK do Windows (ou Windows AIK) e abra um Prompt de Comando de Ferramentas de Implantação Administrativa.
  3. Copie boot.wim para o disco rígido (ex. c:\Bin). Você também pode gerar novo WinPE usando Copype.cmd; no entanto, isso não será iniciado automaticamente setup.exe sem personalizações adicionais.
  4. Use DISM para identificar o número de índices no boot.wim. Se você estiver copiando o boot.wim da mídia de instalação, ele terá dois índices. Normalmente, modificaremos o índice nº 2; caso contrário, índice nº 1.
    dism /get-wiminfo /wimfile:<wim_file>

    Observação

    Os arquivos injetados em um índice não estarão disponíveis para outros índices.

  5. Criar uma pasta 'Mount' (ex. c:\Bin\mount)
  6. Use DISM para montar o wim.
    DISM /mount-wim /wimfile:c:\bin\boot.wim /index:1 /mountdir:c:\bin\mount
  7. Coloque o driver na pasta localizável (ex. c:\bin\driver).
  8. Use DISM para adicionar o driver à imagem wim montada.
    dism /image:c:\bin\mount /Add-Driver /driverpath:<path to INF>
  9. Confirme o sucesso verificando o log dism ou garantindo que o DISM retorne a conclusão no prompt de comando.
  10. Desmonte e comprometa alterações em Boot.wim. Feche todos os identificadores de todas as janelas abertas que possam estar abertas abaixo de c:\bin\mount antes de executar esse comando (verifique se o prompt de comando está em ou acima da estrutura do diretório c:\bin).
    dism /unmount-wim /mountdir:c:\bin\mount /commit
  11. Depois que o DISM desmonta com êxito o WIM, podemos configurar as coisas para mover para USB/DVD. Se você receber um erro durante a desmontagem, talvez queira desmontar o wim para confirmar se os pacotes foram injetados. Parâmetros /cleanup-wim DISM e /get-packages podem ser úteis aqui. Consulte a seção Referências e Links no final deste documento para obter instruções sobre como criar mídia WinPE inicializável em uma unidade flash óptica ou USB.

Usando \$WinpeDriver$

$WinpeDrivers$ é uma estrutura de pasta adicional que Setup.exe procura e, se encontrada, é analisada para puxar drivers adicionais. A instalação analisará recursivamente arquivos e pastas nesta pasta \$WinpeDriver$ à procura de *. Arquivos INF e tentativas de instalar esses drivers descobertos no driverstore.

A estrutura de pastas pode ser semelhante a esta na raiz do dispositivo USB:

\$WinpeDriver$
└\WiFi
└\Wireless1
└Wireless.INF
└Wireless.SYS
└Wireless.CAT (necessário pelo sistema operacional)

Observação

Se você procurar no \Windows\Panther\Setupact.log poderá ver referência a esta pasta: PnPIBS: Verificação de caminhos de driver pré-configurados ...
PnPIBS: verificação do diretório de driver pré-configurado C:$WinPEDriver$.
PnPIBS: verificação do diretório de driver pré-configurado D:$WinPEDriver$.
PnPIBS: verificação do diretório de driver pré-configurado E:$WinPEDriver$.
PnPIBS: verificação do diretório de driver pré-configurado X:$WinPEDriver$.

Usando o arquivo de resposta autônoma (unattend.xml/autounattend.xml)

O Windows pode procurar automaticamente um arquivo de resposta autônomo na raiz de unidades montadas se os arquivos forem nomeados autounattend.xml. O Windows também pegará um arquivo de resposta autônomo se for iniciado com Setup.exe usando comutadores. Esse arquivo de resposta pode fornecer informações ao sistema operacional de instalação para coisas como configuração de unidade, chave do produto, nome do computador e caminho para o repositório de driver, informações da empresa OEM e muitas outras coisas. A documentação sobre como adicionar um driver ao unattend.xml pode ser encontrada no final deste documento na seção Referências e Links.

Abaixo está um exemplo de snippet de um AutoUnattend.xml com Drvstore de um AIK Unattend.chm. A saída XML especifica o caminho UNC para locais adicionais para drivers de dispositivo e as credenciais usadas para acessar os caminhos de rede.

<DriverPaths>
<!-- First PathAndCredentials list item -->
   <PathAndCredentials wcm:action="add" wcm:keyValue="1">
        <Path>\\myFirstDriverPath\DriversFolder</Path>
        <Credentials>
                <Domain>MyDomain</Domain>
                <Username>MyUsername</Username>
                <Password>MyPassword</Password>
        </Credentials>
   </PathAndCredentials>
<!-- Second PathAndCredentials list item -->
   <PathAndCredentials wcm:action="add" wcm:keyValue="2">
      <Path>C:\Drivers</Path>
      <Credentials>
         <Domain>MyComputerName</Domain>
         <Username>MyUsername</Username>
         <Password>MyPassword</Password>
      </Credentials>
   </PathAndCredentials>
</DriverPaths>

Usando Drvload.exe

O Drvload é uma ferramenta no WinPE usada para adicionar drivers depois que você é inicializado para o Prompt de Comando WinPE interno. Ao usar o Drvload, os drivers precisarão ser identificados e colocados em algum lugar. O startnet.cmd do WinPE pode ser usado para script drvload, bem como qualquer uma das seguintes ações durante a inicialização ou inicialização no WinPE:

  1. Executando scripts para:
    1. Identifique a mídia de instalação, geralmente um dispositivo USB.
    2. Adicionar drivers fora da caixa
    3. Configurar discos rígidos e partições de recuperação
    4. Inicie setup.exe ou aplique WIMs conforme necessário.
  2. Pós implantação/aplicativo de validação de WIMPara desenvolvedores que desejam criar sua própria ferramenta para usar para injetar ou manipular drivers, DevCon.exe pode ser um utilitário útil. Para obter mais informações sobre DevCon.exe, consulte a seção Referências e Links.

Exemplo startnet.cmd

Como um meio de rotear/automatizar a instalação, o dispositivo USB precisa ser identificado, pois esse é o local dos drivers adicionais. Este exemplo usa um script no WinPE que é autorun na inicialização para detectar a unidade USB. Este script inicia outro script para instalar drivers usando Drvload.exe no estágio WinPE de instalação. O script está fora do arquivo WIM para que ele possa ser facilmente modificado.

Métodos para identificar a mídia de instalação usando o WinPE Startnet.cmd (primeiro arquivo iniciado no WinPE padrão):

  1. Primeiro, precisa haver uma maneira de automatizar a identificação da mídia de instalação no Startnet.cmd WinPE, que é o primeiro arquivo iniciado em uma configuração winpe padrão. Há uma das duas maneiras de fazer isso:

    • Crie uma unidade flash USB WinPE inicializável com um rótulo de volume de disco de "INSTALL_WIN7". Em seguida, coloque as seguintes linhas no início do startnet.cmd para procurar o rótulo de volume de disco "INSTALL_WIN7":

      "INSTALL_WIN7" disk volume label:
      :ChkVar
      :: Locating USB Device
      IF NOT DEFINED usbdrv (
      ECHO list vol | diskpart | find "INSTALL_WIN7" > pt.txt
      FOR /F "tokens=3" %%a IN (pt.txt) DO ( 
      SET usbdrv=%%a^:
      )
      del pt.txt /f /q
      
    • Crie arquivos 'tag' na mídia como um método de localização de unidade alternativa para comparação:

      :SetOSvar
      @echo off
      IF NOT DEFINED usbdrv (
      ECHO locating OS drive
      FOR %%b IN ( C D E F G H I J K L M N O ) DO (
      IF EXIST %%b:\<specialfilename1> IF EXIST %%b:\ <specialfilename2>  (
      SET usbdrv=%%b^:
      )
      )
      )
      

      Observação

      Você precisará garantir que <specialfilename1 & specialfilename2> exista no local designado no Dispositivo Flash USB.

  2. Inclua os arquivos no boot.wim que estão sendo usados no startnet.cmd. Em seguida, isso colocará os arquivos na unidade X: onde eles podem ser acessados por meio do nome> do arquivo X:\<. À medida que você adiciona arquivos ao boot.wim, isso aumentará a pegada de memória WIM.

  3. Depois que a letra da unidade USB for conhecida, scripts adicionais para injeção de drivers podem ser iniciados. Como é difícil modificar boot.wim com frequência (você deve montar/desmontar e confirmar alterações sempre), é mais fácil executar scripts fora de startnet.cmd. Por exemplo, se criarmos um script chamado 'InstallOS.bat' na raiz da unidade flash USB, poderemos modificar facilmente esse arquivo para fazer alterações no processo de inicialização/automação conforme necessário.

    Veja abaixo um exemplo do texto necessário no arquivo startnet.cmd que procurará "InstallOS.bat" e, se encontrado, inicie-o:

    IF EXIST %usbdrv%\InstallOS.bat call InstallOS.bat  
    Echo %time% %date%
    

    Observação

    Conforme indicado pelo nome, InstallOS.bat pode fazer muito mais do que apenas adicionar drivers ao WinPE. No entanto, para fins deste documento, detalhes adicionais de script não serão discutidos.

  4. Neste ponto , %usbdrv% é definido com a letra de unidade do dispositivo flash USB para que os drivers presentes na pasta %usbdrv%\$WinpeDriver$ possam ser injetados por meio do script no InstallOS.bat.

    Por exemplo, em InstallOS.bat adicionar Drvload.exe %usbdrv%\$winpedriver$\<device>\filename.INF.

Usando esse método, o driver que é disponibilizado para o sistema operacional é primeiro recolhido e usado pelo WinPE.

Ambiente de Recuperação do Windows (WinRE)

O WinRE normalmente será estático no disco rígido, instalado automaticamente durante a instalação ou criado/personalizado por OEMs para cenários de recuperação. Se o WinRE for usado para recuperar o computador para padrões de fábrica, realmente não haverá nenhum método para atualizar dinamicamente drivers para a versão mais recente. Você terá que criar uma imagem usando drivers injetados em todos os arquivos WIM relevantes, como o WinRE.wim/Boot.wim, bem como a imagem a ser aplicada ao sistema operacional. Verifique se esses drivers são todas as mesmas versões.

Conclusão

Se o seu requisito for criar um ambiente WinPE que carregue drivers fora da caixa antes de executar setup.exe, siga as diretrizes descritas neste documento para acabar com o driver desejado no sistema operacional instalado resultante. Escrever scripts que aproveitam Drvload.exe iniciados por startnet.cmd para carregar drivers específicos localizados na pasta $WinPeDriver$ em uma unidade flash USB é o método mais flexível disponível. Esse método permite carregar um driver durante a fase WinPE que é carregada no sistema operacional instalado. Além disso, ele permite a manutenção de um repositório central para drivers que permitirão flexibilidade para atualizar esses drivers (de modo a manter os drivers mais recentes em seu repositório de driver).

Coleta de dados

Se você precisar de ajuda do suporte da Microsoft, recomendamos coletar as informações seguindo as etapas mencionadas em Coletar informações usando o TSS para problemas relacionados à implantação.

Observação

Você precisará de uma conta para poder baixar arquivos do site do OEM.