Interface do co-instalador

Observação

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

A interface de um co-instalador consiste em uma função de ponto de entrada exportada e uma estrutura de dados associada.

Ponto de entrada do co-instalador

Um co-instalador deve exportar uma função de ponto de entrada que tenha o seguinte protótipo:

typedef DWORD 
  (CALLBACK* COINSTALLER_PROC) (
    IN DI_FUNCTION  InstallFunction,
    IN HDEVINFO  DeviceInfoSet,
    IN PSP_DEVINFO_DATA  DeviceInfoData  OPTIONAL,
    IN OUT PCOINSTALLER_CONTEXT_DATA  Context
    );

InstallFunction
Especifica a solicitação de instalação do dispositivo que está sendo processada, na qual o co-instalador tem a opção de participar. Essas solicitações são especificadas usando códigos DIF, como DIF_INSTALLDEVICE. Para obter mais informações, consulte Códigos de função de instalação do dispositivo.

DeviceInfoSet
Fornece um identificador para um conjunto de informações do dispositivo.

DeviceInfoData
Opcionalmente, identifica um dispositivo que é o destino da solicitação de instalação do dispositivo. Se esse parâmetro não for NULL, ele identificará um elemento de informações do dispositivo no conjunto de informações do dispositivo. DeviceInfoData não é NULL quando SetupDiCallClassInstaller chama um co-instalador específico do dispositivo. Um co-instalador específico da classe pode ser chamado com uma solicitação DIF que tem um DeviceInfoDataNULL, como DIF_DETECT ou DIF_FIRSTTIMESETUP.

Contexto
Aponta para uma estrutura COINSTALLER_CONTEXT_DATA .

Um co-instalador de dispositivo retorna um dos seguintes valores:

NO_ERROR
O co-instalador executou as ações apropriadas para o InstallFunction especificado ou o co-instalador determinou que não precisava executar nenhuma ação para a solicitação.

O coinstalador também deverá retornar NO_ERROR se receber um código DIF não reconhecido. (Observe que os instaladores de classe retornam ERROR_DI_DO_DEFAULT para códigos DIF não reconhecidos.)

ERROR_DI_POSTPROCESSING_REQUIRED
O co-instalador executou todas as ações apropriadas para o InstallFunction especificado e está solicitando que seja chamado novamente depois que o Instalador de Classe tiver processado a solicitação.

Um erro win32
O co-instalador encontrou um erro.

Um co-instalador não define um status de retorno de ERROR_DI_DO_DEFAULT. Esse status só pode ser usado por um Instalador de Classe. Se um co-instalador retornar esse status, SetupDiCallClassInstaller não processará a solicitação DIF_Xxx corretamente. Um co-instalador pode propagar um status de retorno de ERROR_DI_DO_DEFAULT em sua passagem de pós-processamento, mas nunca define esse valor.

COINSTALLER_CONTEXT_DATA

COINSTALLER_CONTEXT_DATA é uma estrutura de contexto específica do coinstalador que descreve uma solicitação de instalação. O formato da estrutura é:

typedef struct 
  _COINSTALLER_CONTEXT_DATA {
      BOOLEAN  PostProcessing;
      DWORD    InstallResult;
      PVOID    PrivateData;
  } COINSTALLER_CONTEXT_DATA, *PCOINSTALLER_CONTEXT_DATA;

A lista a seguir descreve os membros dessa estrutura:

  • O PostProcessing é TRUE quando um co-instalador é chamado após o instalador de classe apropriado, se houver, ter processado o código DIF especificado por InstallFunction. O PostProcessing é somente leitura para o co-instalador.

  • Se PostProcessing for FALSE, InstallResult não será relevante. Se PostProcessing for TRUE, InstallResult será o status atual da solicitação de instalação. Esse valor é NO_ERROR ou um status de erro retornado pelo componente anterior chamado para essa solicitação de instalação. Um co-instalador pode propagar o status retornando esse valor para seu retorno de função ou pode retornar outro status. InstallResult é somente leitura para o co-instalador.

  • PrivateData aponta para um buffer alocado pelo co-instalador. Se um co-instalador definir esse ponteiro e solicitar o pós-processamento, SetupDiCallClassInstaller passará o ponteiro para o co-instalador ao chamar o co-instalador para pós-processamento.