Interfaz de coinserción
Nota:
Las características descritas en esta sección no son compatibles y los paquetes de controladores que los contienen ya no recibirán una firma de Microsoft. Consulte Uso de un archivo INF universal.
La interfaz de un co-instalador consta de una función de punto de entrada exportada y una estructura de datos asociada.
Punto de entrada del co-instalador
Un co-installer debe exportar una función de punto de entrada que tenga el siguiente prototipo:
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 la solicitud de instalación del dispositivo que se está procesando, en la que el coinstalado tiene la opción de participar. Estas solicitudes se especifican mediante códigos DIF, como DIF_INSTALLDEVICE. Para obtener más información, consulte Códigos de función de instalación de dispositivos.
DeviceInfoSet
Proporciona un identificador a un conjunto de información del dispositivo.
DeviceInfoData
Opcionalmente, identifica un dispositivo que es el destino de la solicitud de instalación del dispositivo. Si este parámetro no es NULL, identifica un elemento de información del dispositivo en el conjunto de información del dispositivo.
DeviceInfoData no es NULL cuando SetupDiCallClassInstaller llama a un coinstalador específico del dispositivo. Se puede llamar a un co-instalador específico de clase con una solicitud DIF que tenga un DeviceInfoDataNULL, como DIF_DETECT o DIF_FIRSTTIMESETUP.
Contexto
Apunta a una estructura de COINSTALLER_CONTEXT_DATA .
Un coins installer de dispositivo devuelve uno de los siguientes valores:
NO_ERROR
El co-instalador realizó las acciones adecuadas para installFunction especificado, o el co-instalador determinó que no tenía que realizar ninguna acción para la solicitud.
El co-instalador también debe devolver NO_ERROR si recibe un código DIF no reconocido. (Tenga en cuenta que los instaladores de clase devuelven ERROR_DI_DO_DEFAULT para códigos DIF no reconocidos).
ERROR_DI_POSTPROCESSING_REQUIRED
El co-instalador realizó las acciones adecuadas para installFunction especificadas y solicita que se vuelva a llamar después de que el instalador de clase haya procesado la solicitud.
Error de Win32
El co-instalador encontró un error.
Un co-instalador no establece un estado devuelto de ERROR_DI_DO_DEFAULT. Este estado solo lo puede usar un Instalador de clase. Si un coinstalador devuelve este estado, SetupDiCallClassInstaller no procesará correctamente la solicitud DIF_Xxx . Un coinserador podría propagar un estado devuelto de ERROR_DI_DO_DEFAULT en su paso de postprocesamiento, pero nunca establece este valor.
COINSTALLER_CONTEXT_DATA
COINSTALLER_CONTEXT_DATA es una estructura de contexto específica del co-instalador que describe una solicitud de instalación. El formato de la estructura es:
typedef struct
_COINSTALLER_CONTEXT_DATA {
BOOLEAN PostProcessing;
DWORD InstallResult;
PVOID PrivateData;
} COINSTALLER_CONTEXT_DATA, *PCOINSTALLER_CONTEXT_DATA;
En la lista siguiente se describen los miembros de esta estructura:
PostProcessing es TRUE cuando se llama a un co-instalador después del instalador de clase adecuado, si existe, ha procesado el código DIF especificado por InstallFunction. PostProcessing es de solo lectura para el co-instalador.
Si PostProcessing es FALSE, InstallResult no es relevante. Si PostProcessing es TRUE, InstallResult es el estado actual de la solicitud de instalación. Este valor es NO_ERROR o un estado de error devuelto por el componente anterior llamado para esta solicitud de instalación. Un co-instalador puede propagar el estado devolviendo este valor para su devolución de función, o puede devolver otro estado. InstallResult es de solo lectura para el co-instalador.
PrivateData apunta a un búfer asignado conjuntamente al instalador. Si un co-installer establece este puntero y solicita postprocesamiento, SetupDiCallClassInstaller pasa el puntero al co-installer cuando llama al co-installer para el postprocesamiento.