Compartilhar via


Operação de co-instalador

Observação

Os recursos descritos nesta seção não têm suporte e os pacotes de driver que os contêm não receberão mais uma assinatura da Microsoft. Consulte Usando um arquivo INF universal.

Os co-instaladores são chamados pela SetupAPI, conforme mostrado na figura a seguir.

diagrama ilustrando como os co-instaladores participam da instalação do dispositivo.

As caixas sem sombra representam os componentes que o sistema operacional fornece para as classes de instalação de dispositivo fornecidas pelo sistema. As caixas sombreadas representam os componentes que você pode fornecer. Se você criar uma classe de configuração de dispositivo personalizada, também poderá fornecer um instalador de classe. No entanto, você raramente precisa criar uma nova classe de configuração de dispositivo, pois quase todos os dispositivos podem ser associados a uma das classes de configuração de dispositivo fornecidas pelo sistema. Para obter mais informações sobre componentes do Windows, consulte Visão geral da instalação do dispositivo.

Os co-instaladores podem ser fornecidos para um dispositivo específico (co-instalador específico do dispositivo) ou para uma classe de instalação de dispositivo (co-instalador de classe). SetupAPI chama um co-instalador específico do dispositivo somente ao instalar o dispositivo para o qual o co-instalador está registrado. O sistema operacional e os fornecedores podem registrar zero ou mais co-instaladores específicos do dispositivo para um dispositivo. SetupAPI chama um co-instalador de classe ao instalar qualquer dispositivo da classe de instalação do dispositivo para o qual o co-instalador está registrado. O sistema operacional e os fornecedores podem registrar um ou mais co-instaladores de classe para uma classe de configuração de dispositivo. Além disso, um co-instalador de classe pode ser registrado para uma ou mais classes de instalação.

Os aplicativos de instalação de dispositivos personalizados e windows instalam dispositivos chamando SetupDiCallClassInstaller com códigos de função de instalação do dispositivo (códigos DIF).

Durante a instalação do modo GUI, o sistema operacional chama SetupDiCallClassInstaller com códigos DIF para detectar dispositivos não PnP presentes no sistema. Um IHV normalmente forneceria um co-instalador para executar essa ação para dispositivos não PnP que o IHV libera.

Para cada solicitação DIF, SetupDiCallClassInstaller chama todos os co-instaladores de classe registrados para a classe de instalação do dispositivo, todos os co-instaladores de dispositivo registrados para o dispositivo específico e, em seguida, o Instalador de Classe fornecido pelo sistema para a classe de instalação do dispositivo, se houver um.

Os aplicativos de instalação de dispositivo personalizados devem chamar SetupDiCallClassInstaller em vez de chamar um co-instalador ou instalador de classe diretamente. Essa função garante que todos os co-instaladores registrados sejam chamados adequadamente.

Os co-instaladores de classe normalmente são registrados antes da instalação do dispositivo e os co-instaladores específicos do dispositivo são registrados como parte da instalação do dispositivo. Os co-instaladores de classe normalmente são adicionados à lista de co-instaladores quando ele é criado pela primeira vez e são chamados para todas as solicitações DIF durante a instalação do dispositivo.

O sistema operacional adiciona co-instaladores específicos do dispositivo à lista de co-instaladores depois que uma solicitação de DIF_REGISTER_COINSTALLERS foi concluída para o dispositivo (ou SetupDiRegisterCoDeviceInstallers foi chamado). Os co-instaladores específicos do dispositivo não participam das seguintes solicitações DIF:

DIF_ALLOW_INSTALL

DIF_INSTALLDEVICEFILES

DIF_SELECTBESTCOMPATDRV

Somente um co-instalador de classe (não um co-instalador específico do dispositivo) pode responder às seguintes solicitações DIF:

DIF_DETECT

DIF_FIRSTTIMESETUP

DIF_NEWDEVICEWIZARD_PRESELECT

DIF_NEWDEVICEWIZARD_SELECT

DIF_NEWDEVICEWIZARD_PREANALYZE

DIF_NEWDEVICEWIZARD_POSTANALYZE

Um co-instalador de dispositivo não é apropriado nesses contextos, seja porque um dispositivo específico ainda não foi identificado ou neste estágio inicial de instalação, ou os co-instaladores do dispositivo ainda não foram registrados.

A figura a seguir mostra a ordem na qual SetupDiCallClassInstaller chama os co-instaladores e um instalador de classe depois que qualquer co-instalador específico do dispositivo tiver sido registrado.

diagrama de como chamar co-instaladores para processamento de solicitação dif e pós-processamento.

No exemplo ilustrado pela figura anterior, dois co-instaladores de classe são registrados para a classe de instalação desse dispositivo e um co-instalador específico do dispositivo é registrado para o dispositivo. As seguintes etapas correspondem aos números circulados na figura anterior:

  1. SetupDiCallClassInstaller chama o co-instalador de primeira classe, especificando um código DIF que indica a solicitação de instalação sendo processada (DIF_INSTALLDEVICE, neste exemplo). O co-instalador tem a opção de participar da solicitação de instalação. Neste exemplo, o primeiro co-instalador de classe registrado retorna NO_ERROR.

  2. SetupDiCallClassInstaller, por sua vez, chama quaisquer co-instaladores de classe registrados adicionais. Neste exemplo, o co-instalador de segunda classe retorna ERROR_DI_POSTPROCESSING_REQUIRED, que solicita que o co-instalador seja chamado posteriormente para pós-processamento.

  3. SetupDiCallClassInstaller chama todos os co-instaladores específicos do dispositivo registrados.

  4. Depois que todos os co-instaladores registrados tiverem sido chamados, SetupDiCallClassInstaller chamará o Instalador de Classe fornecido pelo sistema, se houver um para a classe de instalação do dispositivo. Neste exemplo, o instalador de classe retorna ERROR_DI_DO_DEFAULT, que é um valor retornado típico para instaladores de classe.

  5. SetupDiCallClassInstaller chama o manipulador padrão para a solicitação de instalação, se houver um. DIF_INSTALLDEVICE tem um manipulador padrão, SetupDiInstallDevice, que faz parte da SetupAPI.

  6. SetupDiCallClassInstaller chama todos os co-instaladores que solicitaram pós-processamento. Neste exemplo, o co-instalador de segunda classe solicitou o pós-processamento.

O pós-processamento do co-instalador é semelhante às rotinas de IoCompletion do driver, exceto que o co-instalador é chamado uma segunda vez em seu ponto de entrada único. Quando SetupDiCallClassInstaller chama um co-instalador para pós-processamento, ele define PostProcessing como TRUE e InstallResult como o valor apropriado no parâmetro Context . Neste exemplo, Contexto. InstallResult é NO_ERROR porque o manipulador padrão foi executado com êxito.

Para pós-processamento, SetupDiCallClassInstaller chama os co-instaladores em ordem inversa. Se todos os co-instaladores na figura anterior tivessem retornado ERROR_DI_POSTPROCESSING_REQUIRED, SetupDiCallClassInstaller chamaria Device_Coinstaller_1 primeiro para pós-processamento, seguido por Class_Coinstaller_2 e, em seguida, Class_Coinstaller_1. Os Instaladores de Classe não solicitam pós-processamento; apenas os co-instaladores fazem.

Um co-instalador que solicita o pós-processamento é chamado mesmo se um co-instalador anterior falhou na solicitação de instalação.