Limitations of $WinPeDriver$ when used in conjunction with other driver injection methods
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 termine na instalação concluída do sistema operacional.
Aplica-se a: Windows 7 Service Pack 1, Windows Server 2012 R2, Windows Server 2008 R2 Service Pack 1
Número original do KB: 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 prontos para uso no Winpe (boot.wim) e no 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', o que impedirá que esses drivers sejam selecionados pelo PNP posteriormente. Isso inclui qualquer driver carregado na memória durante a inicialização no WinPE (fase Winpe) da instalação. Os 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.
Finalidade
Considere o seguinte cenário: você está criando uma imagem WinPE (Ambiente de Pré-Instalação do Windows) personalizada para fins de instalação de sistemas operacionais Windows que precisam de um driver de controlador de armazenamento pronto para uso 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 a ser um método para fornecer drivers no momento da instalação. No entanto, é um recurso do Setup.exe e, como tal, não é invocado até depois Setup.exe lançamento. Os drivers para dispositivos atuais que são injetados manualmente no repositório de driver boot.wim do WinPE usando o DISM são carregados na memória no momento 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 que foram carregados na memória, portanto, todos os drivers para dispositivos que já foram carregados não serão recarregados depois que setup.exe for iniciado, pois já há drivers para o dispositivo carregado. Esse erro fará com que a Instalação marque o driver na pasta $WinPEDriver$ como um driver inválido, mesmo que seja mais recente do que a versão do driver injetada no WinPE e, de outra forma, o superaria. A instalação não tem conhecimento explícito dos drivers que foram carregados no boot.wim.
Esse comportamento é por design; no entanto, este artigo identificará um método de acomodar esse 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 inicializável do dispositivo flash USB (UFD) ou no polegar seria mais preferível.
Neste documento, vamos destacar métodos para injetar drivers e iniciar janelas. O gráfico a seguir mostra brevemente os métodos e resultados da inclusão de drivers.
WinPE (nativo ou injetado na caixa) | (drivers de caixa de saída em $WinPEDriver$) | Resultado (Pós-OS) |
---|---|---|
Se o WinPE contiver a versão X1 do driver injetada por meio do Dism.exe | contém a versão X2 do driver com o mesmo nome de driver | X1 será transportado na pós-instalação do 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 de driver | O X2 será transportado na pós-instalação do sistema operacional |
se o WinPE contiver o driver X1 que não é crítico para inicialização (nativo in-box) | não contém driver | Usará o driver nativo X1 na caixa. Nenhum driver pronto para uso estará disponível para esse dispositivo após a instalação do sistema operacional |
Limitações do driver
Lembre-se de que há alguns drivers que podem ser incluídos e/ou carregados que podem não funcionar durante a parte do WinPE da instalação. Isso incluiria, mas não se limita 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 (drivers necessários durante a 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.
Passo a passo de drivers de carregamento de StartNet.cmd
É apenas um método para incluir o mesmo driver no WinPE (Ambiente de Pré-Instalação do Windows), bem como disponibilizá-lo para o sistema operacional de instalação; Outros métodos são possíveis usando as informações mais adiante neste documento.
Configure a máquina do técnico:
- Instale o OPK/AIK na máquina dos técnicos suportados.
- Copie os bits do Windows a serem modificados para o HDD local c:\bin.
- Localize/baixe/extraia drivers para incluir na mídia.
Prepare o dispositivo USB por página da web, certifique-se de nomear o dispositivo como "INSTALL_WIN7". Esse nome é usado posteriormente e, se você alterá-lo, deverá alterar o nome no script de exemplo descrito na etapa #6 e no exemplo abaixo (os links da página da Web são listados no final do documento)
Crie arquivos WinPE para copiar para o dispositivo USB, abra o prompt de comando administrativo e execute:
Copype.cmd <arch> <path>
Copy <pathto> winpe.wim to \ISO\sources\boot.wim
Monte boot.wim:
Dism /get-wiminfo /wimfile:\<pathto>\boot.wim
Dism /mount-wim /wimfile:<pathto>\boot.wim /index:1 /mountdir:<pathto>\Mount
Abra um prompt de comando administrativo e edite \mount\windows\system32\startnet.cmd (usando Notepad.exe ou similar).
O script de exemplo a seguir identifica dispositivos USB e disponibiliza drivers durante o WinPE usando Drvload.exe. Recorte e cole o script no arquivo startnet.cmd que você abriu.
Observação
Você pode querer copiar o script para 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
Salve StartNet.cmd e feche-o.
Desmonte e confirme as alterações em boot.wim usando o seguinte comando:
Dism /unmount-wim /mountdir:<pathto>mount /commit
Copie todos os arquivos da pasta \ISO para um dispositivo flash USB (deve ser formatado em FAT32 e marcado como Ativo).
Crie uma pasta na raiz do dispositivo flash USB chamada $WinpeDriver$.
Copie os drivers para esta pasta (por exemplo <, USB_drv>\$WinpeDriver$\DriverX).
Abra o prompt do cmd administrativo e crie o arquivo <USB_drv>\InstallOS.bat, recortando e colando a seguinte linha no arquivo em lote:
drvload %usbdrv%\$winpedriver$\<device>\filename. INFPara incluir arquivos de origem de instalação do sistema operacional Windows do DVD:
- Crie a seguinte pasta no thumbstick USB: <USB_drv>\<OS>\Sources (por exemplo, e:\Win2008r2x64\Sources).
- Selecione e copie DVD\sources\* para <USB_drv>\<OS>\sources (você pode excluir boot.wim)
- Para iniciar manualmente setup.exe quando inicializado no WinPE, selecione <USB_drv>\<OS\>Sources\Setup.exe e adicione as opções apropriadas conforme necessário.
- Para implantação totalmente automatizada, adicione a seguinte linha ao arquivo InstallOS.bat, adicionando as opções apropriadas:
%usbdrv%\<OS>\Sources\Setup.exe
TEST inicializando em um dispositivo USB na máquina TEST
Métodos para disponibilizar drivers para o WinPE
Os métodos para incluir drivers no WinPE incluem:
Injeção de tempo de build de imagem por meio de DISM.exe – Coloca o driver no Driverstore da imagem do WinPE e é selecionado por meio de Plug and Play no momento 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 o WIM:
DISM /get-wiminfo /wimfile:<pathto>boot.wim
DISM /mount-wim /wimfile:<pathto>boot.wim /index:n /mountdir:<pathto>mount
DISM /add-driver /image:<pathto>mount / driverpath:<pathto>driverINF
[e vice-versa,/remove-driver
se necessário]DISM /unmount-wim /commit /mountdir:<pathto>mount
Carregamento do driver de tempo de execução por meio do Drvload.exe - Carrega o driver na memória e inicia o dispositivo. Não propaga o driver para o sistema operacional instalado.
Carga do driver de runtime por meio do Devcon.exe – o Devcon é fornecido por meio do código-fonte de exemplo no DDK (Kit de Driver de Dispositivo) do Windows/WDK (Kit de Driver do Windows). 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)
$WinPEDriver$ folder- 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.
O arquivo de resposta de tempo de execução (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 drivers fornecido no unattend.xml e também os agendará para injeção no sistema operacional instalado.
Inicie a instalação do Windows
Existem vários métodos para iniciar a instalação do sistema operacional do WinPE, incluindo:
- Injetando pacotes de instalação em boot.wim.
- O WinPE personalizado pode ser modificado para iniciar automaticamente o Windows Setup.exe.
- Também pode ser usado para pacotes de idiomas e suporte a scripts.
- Lançamento setup.exe de startnet.cmd ou winpeshl.ini.
- localize o pendrive / Hdd
- Inicie \path\setup.exe </switches>
- Front-end personalizado para substituir cmd.exe (consulte os links para Windows RE na seção de referência).
- Inicializando a partir da mídia de instalação normal do Windows, que primeiro inicializa no WinPE (Boot.wim) e pode receber entrada do dispositivo USB conectado ou do armazenamento de rede. Esse 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 prontos para uso, existem alguns métodos disponíveis para incluir drivers prontos para uso no Windows:
- Dism.exe
Dism /get-wiminfo /wimfile:<pathto>Install.wim
Dism /mount-wim /wimfile:<pathto>Install.wim /index:n /mountdir:<pathto>mount
Dism /add-driver [and conversely /remove-driver] /image:<pathto>mount /driverpath:<pathto>driverINF
Dism /unmounts-wim /commit /mountdir:<pathto>mount
- \$WinPEDriver$
- Executando um script durante a instalação autônoma
- unattend.xml (driverstore) no WinPE e no Modo de Auditoria (mais informações estão na seção Referências e Links).
- Setupcomplete.cmd pode ser usado para injeção de driver, mas é desaconselhado, pois é uma experiência de usuário ruim e pode causar atrasos na inicialização da área de trabalho pela primeira vez.
- Drvload.exe
- Injeta apenas drivers no sistema operacional em execução no momento, que, se houver WinPE, normalmente é um disco RAM.
- Caminho de carregamento <de drvto. INF> (pode ser programado 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 o fabricante do driver para obter drivers atualizados. (Se estiver familiarizado com o WLK (Windows Logo Kit), 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 reinicializado.
Existem 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 em questão.
Instruções detalhadas para incluir drivers prontos para uso no WinPE
Configuração/ferramentas necessárias:
- Computador dos técnicos - computador usado para construir/manipular mídia de instalação
- OPK / AIK instalado
- USB/UFD ou DVD
Usando DISM.exe:
- Instale o OPK (Kit de Pré-instalação OEM) ou o Kit de Instalação Automatizada do Windows (Windows AIK)
- Clique em Iniciar>Programas>Windows OPK (ou Windows AIK) e abra um Prompt de Comando de Ferramentas de Implantação Administrativa.
- Copie boot.wim para o disco rígido (ex. c:\Bin). Você também pode gerar um novo WinPE usando Copype.cmd; No entanto, isso não iniciará automaticamente setup.exe sem personalizações adicionais.
- Use o 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 #2; caso contrário, índice #1.
dism /get-wiminfo /wimfile:<wim_file>
Observação
Os arquivos injetados em um índice não estarão disponíveis para outros índices.
- Crie uma pasta 'Mount' (por exemplo, c:\Bin\mount)
- Use o DISM para montar o wim.
DISM /mount-wim /wimfile:c:\bin\boot.wim /index:1 /mountdir:c:\bin\mount
- Coloque o driver na pasta localizável (por exemplo, c:\bin\driver).
- Use o DISM para adicionar o driver à imagem WIM montada.
dism /image:c:\bin\mount /Add-Driver /driverpath:<path to INF>
- Confirme o sucesso verificando o log do DISM ou garantindo que o DISM retorne a conclusão no prompt de comando.
- Desmonte e confirme as alterações em Boot.wim. Feche todos os identificadores para quaisquer janelas abertas que possam estar abertas abaixo de c:\bin\mount antes de executar este comando (certifique-se também de que o prompt de comando esteja na estrutura de diretórios c:\bin ou acima).
dism /unmount-wim /mountdir:c:\bin\mount /commit
- Depois que o DISM desmontar o WIM com êxito, podemos configurar as coisas para migrar para USB/DVD. Se você receber um erro durante a desmontagem, talvez queira remontar o wim para confirmar que os pacotes foram injetados. DISM e
/cleanup-wim
/get-packages
pode ser útil 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 pastas adicional que Setup.exe procura e, se encontrada, é analisada para extrair drivers adicionais. A instalação analisará recursivamente arquivos e pastas nesta pasta \$WinpeDriver$ procurando por *. INF e tenta instalar esses drivers descobertos no driverstore.
A estrutura de pastas pode ser semelhante a esta na raiz do dispositivo USB:
\$WinpeDriver$
└\Wi-Fi
└\Sem fio1
└Wireless.INF
└Wireless.SYS
└Wireless.CAT (Necessário para o sistema operacional)
Observação
Se você olhar no \Windows\Panther\Setupact.log poderá ver referência a esta pasta: PnPIBS: Verificando caminhos de driver pré-configurados ...
PnPIBS: Verificando o diretório de driver pré-configurado C:$WinPEDriver$.
PnPIBS: Verificando o diretório de driver pré-configurado D:$WinPEDriver$.
PnPIBS: Verificando o diretório de driver pré-configurado E:$WinPEDriver$.
PnPIBS: verificando o 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 das unidades montadas se os arquivos forem nomeados autounattend.xml. O Windows também selecionará um arquivo de resposta autônomo se iniciado com Setup.exe usando opções. Esse arquivo de resposta pode fornecer informações ao sistema operacional de instalação para itens como configuração da unidade, chave do produto, nome do computador e caminho para o repositório de drivers, 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 trecho de exemplo 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
Drvload é uma ferramenta no WinPE usada para adicionar drivers depois que você é inicializado no prompt de comando interno do WinPE. Ao usar o Drvload, os drivers precisarão ser identificados e colocados em algum lugar. O startnet.cmd do WinPE pode ser usado para criar scripts do Drvload, bem como qualquer uma das seguintes ações durante a inicialização ou inicializado no WinPE:
- Executando scripts para:
- Identifique a mídia de instalação, geralmente um dispositivo USB.
- Adicionar drivers prontos para uso
- Configurar discos rígidos e partições de recuperação
- Inicie setup.exe ou aplique WIMs conforme necessário.
- Pós-implantação/aplicação da validação 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 meio de criar scripts/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 é executado automaticamente na inicialização para detectar a unidade USB. Esse script inicia outro script para instalar drivers usando Drvload.exe no estágio WinPE da instalação. O script está fora do arquivo WIM para que 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):
Primeiro, é necessário que haja 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 padrão do WinPE. 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 de startnet.cmd para procurar o rótulo do volume do 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 de 'tag' na mídia como um método alternativo de localização da unidade 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> existam no local designado no Dispositivo Flash USB.
Inclua os arquivos no boot.wim que estão sendo usados no startnet.cmd. Isso colocará os arquivos na unidade X:, onde podem ser acessados por meio do nome> do arquivo X:\<. À medida que você adiciona arquivos ao boot.wim, isso aumentará o volume de memória do WIM.
Uma vez que a letra da unidade USB é 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 a cada vez), é mais fácil executar scripts fora do startnet.cmd. Por exemplo, se criarmos um script chamado 'InstallOS.bat' na raiz da unidade flash USB, podemos modificar facilmente esse arquivo para fazer alterações no processo de inicialização/automação conforme necessário.
Abaixo está um exemplo do texto necessário no arquivo startnet.cmd que procurará por 'InstallOS.bat' e, se encontrado, iniciá-lo:
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 os fins deste documento, detalhes adicionais de script não serão discutidos.
Neste ponto, %usbdrv% é definido com a letra da unidade para o dispositivo flash USB para que os drivers presentes na pasta %usbdrv%\$WinpeDriver$ possam ser injetados por meio de scripts no InstallOS.bat.
Por exemplo, em InstallOS.bat adicionar
Drvload.exe %usbdrv%\$winpedriver$\<device>\filename.INF
.
Usando esse método, o driver disponibilizado para o sistema operacional é primeiro selecionado e usado pelo WinPE.
WinRE (Ambiente de Recuperação do Windows)
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 os padrões de fábrica, não haverá realmente nenhum método para atualizar dinamicamente os drivers para a versão mais recente. Você terá que criar uma imagem usando drivers injetados em todos os arquivos WIM relevantes, como WinRE.wim/Boot.wim, bem como a imagem a ser aplicada ao sistema operacional. Certifique-se de que esses drivers sejam todos as mesmas versões.
Conclusão
Se o seu requisito for criar um ambiente WinPE que carregue drivers prontos para uso antes de executar setup.exe, siga as diretrizes descritas neste documento para terminar com o driver desejado no sistema operacional instalado resultante. Escrever scripts que aproveitam Drvload.exe iniciados pelo 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 que você carregue um driver durante a fase do WinPE que é transferido para o sistema operacional instalado. Além disso, permite a manutenção de um repositório central de drivers que permitirá flexibilidade para atualizar esses drivers (de modo a manter os drivers mais recentes em seu repositório de drivers).
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.
Referências e Links
Adicionar drivers de dispositivo durante a instalação do Windows
O que é manutenção e gerenciamento de imagens de implantação?
Opções de linha de comando de gerenciamento e manutenção de imagens de implantação
Passo a passo: Criar um disco RAM inicializável do Windows PE em CD-ROM
Passo a passo: Criar um disco RAM inicializável do Windows PE em um disco flash USB
Kit de Instalação Automatizada do Windows (AIK) para Win7/2008r2
Observação
Você precisará de uma conta para poder baixar arquivos do site OEM.