DIF_INSTALLDEVICE
Uma solicitação de DIF_INSTALLDEVICE permite que um instalador execute tarefas antes e/ou depois que o dispositivo é instalado.
Quando enviado
Depois de selecionar o driver, registre todos os co-instaladores de dispositivo e registre as interfaces do dispositivo.
Quem manipula
Co-instalador de classe |
Pode manipular |
Co-instalador de dispositivo |
Pode manipular |
Instalador de Classe |
Pode manipular |
Entrada do instalador
DeviceInfoSet
Fornece um identificador para o conjunto de informações do dispositivo que contém o dispositivo a ser instalado.
DeviceInfoData
Fornece um ponteiro para uma estrutura SP_DEVINFO_DATA para o dispositivo no conjunto de informações do dispositivo.
Parâmetros de instalação do dispositivo
Há parâmetros de instalação do dispositivo (SP_DEVINSTALL_PARAMS) associados ao DeviceInfoData.
Parâmetros de instalação de classe
Nenhum
Saída do instalador
Parâmetros de instalação do dispositivo
Um instalador pode modificar os parâmetros de instalação do dispositivo para o DeviceInfoData. Por exemplo, um instalador pode definir o sinalizador DI_NEEDREBOOT ou pode definir o sinalizador DI_DONOTCALLCONFIGMG para impedir que o Windows coloque o dispositivo online dinamicamente com o driver e as configurações recém-instalados.
Valor retornado do instalador
Um co-instalador normalmente retorna NO_ERROR ou ERROR_DI_POSTPROCESSING_REQUIRED. Um co-instalador também pode retornar um código de erro Win32.
Se um instalador de classe manipular com êxito essa solicitação e SetupDiCallClassInstaller precisar chamar posteriormente o manipulador padrão, o instalador de classe retornará ERROR_DI_DO_DEFAULT.
Se o instalador de classe manipular com êxito essa solicitação, incluindo chamar diretamente o manipulador padrão, o instalador de classe deverá retornar NO_ERROR e SetupDiCallClassInstaller não chamará o manipulador padrão novamente.
Nota O instalador de classe pode chamar diretamente o manipulador padrão, mas o instalador de classe nunca deve tentar substituir as operações do manipulador padrão. Para obter mais informações sobre como chamar um manipulador de código DIF padrão, consulte Chamando manipuladores de código DIF padrão.
Se o instalador de classe encontrar um erro, o instalador deverá retornar um código de erro Win32 apropriado e SetupDiCallClassInstaller não chamará posteriormente o manipulador padrão.
Manipulador de código DIF padrão
Operação do instalador
Em resposta a uma solicitação de DIF_INSTALLDEVICE um instalador normalmente executa todas as operações de instalação finais antes que o manipulador padrão instale o dispositivo. Por exemplo, um instalador pode marcar e, possivelmente, modificar os drivers de filtro superior e drivers de filtro inferior para o dispositivo listado no registro.
A menos que o sinalizador DI_NOFILECOPY esteja definido nos parâmetros de instalação do dispositivo, um instalador que manipula essa solicitação DIF deve copiar arquivos necessários para o dispositivo, como arquivos de driver e arquivos do painel de controle.
Se o sinalizador DI_NOFILECOPY estiver claro, mas o sinalizador DI_NOVCP estiver definido, o instalador deverá enfileirar todas as operações de arquivo para a fila de arquivos fornecida, mas não deve confirmar a fila.
Um co-instalador pode lidar com essa solicitação DIF em sua passagem de pré-processamento e/ou em sua passagem de pós-processamento. Em sua passagem de pré-processamento, um co-instalador executa todas as operações que devem ocorrer antes que o Windows carregue os drivers e inicie o dispositivo.
Em sua passagem de pós-processamento, o dispositivo está em execução, a menos que o sinalizador DI_NEEDREBOOT tenha sido definido. Se esse sinalizador estiver definido, o Windows não poderá colocar o dispositivo online dinamicamente.
Se o instalador retornar um código de erro Win32, o Windows abandonará a instalação.
Se o Windows não conseguir localizar um arquivo INF para um novo dispositivo, ele enviará DIF_INSTALLDEVICE na tentativa de instalar um driver nulo. O manipulador padrão (SetupDiInstallDevice) verifica se o dispositivo dá suporte ao modo bruto ou se é um dispositivo não PnP (relatado por IoReportDetectedDevice), no último caso, o Windows instala um driver nulo para o dispositivo.
Se essa tentativa falhar, o Windows enviará DIF_INSTALLDEVICE novamente, desta vez com o sinalizador DI_FLAGSEX_SETFAILEDINSTALL definido na estrutura SP_DEVINSTALL_PARAMS . Nesse caso, o manipulador padrão apenas define o sinalizador FAILEDINSTALL no valor do registro ConfigFlags do dispositivo. Se o sinalizador DI_FLAGSEX_SETFAILEDINSTALL estiver definido, os instaladores de classe deverão retornar NO_ERROR ou ERROR_DI_DO_DEFAULT e os co-instaladores deverão retornar NO_ERROR.
Para obter mais informações sobre códigos DIF, consulte Manipulando códigos DIF.
Chamando o manipulador padrão SetupDiInstallDevice
Para obter informações gerais sobre quando e como chamar um SetupDiInstallDevice, consulte Chamando manipuladores de código DIF padrão.
Na rara situação em que o instalador de classe deve executar operações depois que todas as operações SetupDiInstallDevice , exceto para iniciar um dispositivo, tiverem sido concluídas, o instalador de classe deve:
Execute operações que devem ser feitas antes de chamar SetupDiInstallDevice.
Defina o sinalizador DI_DONOTCALLCONFIGMGR no SP_DEVINSTALL_PARAMS. Membro flags para o dispositivo. Se esse sinalizador estiver definido, SetupDiInstallDevice executará todas as operações de instalação padrão, exceto para iniciar o dispositivo.
Chame SetupDiInstallDevice para executar todas as operações de instalação padrão, exceto para iniciar o dispositivo.
Execute as operações que devem ser feitas depois que todas as operações de instalação padrão, exceto para iniciar o dispositivo, tiverem sido concluídas.
Chame SetupDiRestartDevices para iniciar o dispositivo.
Retornar NO_ERROR se o instalador de classe tiver concluído com êxito a operação de instalação ou retornar um erro win32 se a operação de instalação falhar.
Requisitos
Versão |
Com suporte no Microsoft Windows 2000 e versões posteriores do Windows. |
Cabeçalho |
Setupapi.h (inclua Setupapi.h) |