Compartir a través de


Operación de coinserción

Nota:

Las características descritas en esta sección no se admiten y los paquetes de controladores que los contienen ya no recibirán una firma de Microsoft. Consulte Uso de un archivo INF universal.

SetupAPI llama a los co-instaladores, como se muestra en la ilustración siguiente.

diagrama que ilustra cómo participan los coinstaladores en la instalación de dispositivos.

Los cuadros sin sombra representan los componentes que proporciona el sistema operativo para las clases de configuración de dispositivos proporcionadas por el sistema. Los cuadros sombreados representan los componentes que puede proporcionar. Si crea una clase de instalación de dispositivo personalizada, también puede proporcionar un instalador de clase. Sin embargo, rara vez es necesario crear una nueva clase de configuración de dispositivo, ya que casi todos los dispositivos se pueden asociar a una de las clases de configuración de dispositivos proporcionadas por el sistema. Para obtener más información sobre los componentes de Windows, vea Información general sobre la instalación de dispositivos.

Los co-instaladores se pueden proporcionar para un dispositivo específico (coinsertor específico del dispositivo) o para una clase de instalación de dispositivo (co-instalador de clase). SetupAPI llama a un co-instalador específico del dispositivo solo al instalar el dispositivo para el que está registrado el co-instalador. El sistema operativo y los proveedores pueden registrar cero o más coins instaladores específicos del dispositivo para un dispositivo. SetupAPI llama a un co-instalador de clase al instalar cualquier dispositivo de la clase de instalación de dispositivo para la que se registra el coinstaladores. El sistema operativo y los proveedores pueden registrar uno o varios co-instaladores de clase para una clase de instalación de dispositivos. Además, se puede registrar un co-instalador de clase para una o varias clases de instalación.

Las aplicaciones de instalación de dispositivos windows y personalizadas instalan dispositivos mediante una llamada a SetupDiCallClassInstaller con códigos de función de instalación de dispositivos ( códigos DIF).

Durante la configuración del modo gui, el sistema operativo llama a SetupDiCallClassInstaller con códigos DIF para detectar dispositivos que no son PnP presentes en el sistema. Normalmente, un IHV proporcionaría un coinstalador para realizar esta acción para dispositivos que no son PnP que libera el IHV.

Para cada solicitud de DIF, SetupDiCallClassInstaller llama a los coinstaladores de clase registrados para la clase de instalación del dispositivo, los coinstaladores de dispositivo registrados para el dispositivo específico y, a continuación, el Instalador de clase proporcionado por el sistema para la clase de instalación del dispositivo, si hay alguno.

Las aplicaciones de instalación de dispositivos personalizadas deben llamar a SetupDiCallClassInstaller en lugar de llamar directamente a un instalador de coinstalador o de clase. Esta función garantiza que todos los co-instaladores registrados se llamen correctamente.

Los coinstaladores de clase se registran normalmente antes de la instalación del dispositivo y los coinstaladores específicos del dispositivo se registran como parte de la instalación del dispositivo. Por lo tanto, los co-instaladores de clase se agregan normalmente a la lista de coinstaladores cuando se compila por primera vez y se llama a para todas las solicitudes de DIF durante la instalación del dispositivo.

El sistema operativo agrega coinstaladores específicos del dispositivo a la lista de coinstaladores una vez completada una solicitud de DIF_REGISTER_COINSTALLERS para el dispositivo (o se ha llamado a SetupDiRegisterCoDeviceInstallers ). Los co-instaladores específicos del dispositivo no participan en las siguientes solicitudes de DIF:

DIF_ALLOW_INSTALL

DIF_INSTALLDEVICEFILES

DIF_SELECTBESTCOMPATDRV

Solo un co-instalador de clase (no un co-instalador específico del dispositivo) puede responder a las siguientes solicitudes de DIF:

DIF_DETECT

DIF_FIRSTTIMESETUP

DIF_NEWDEVICEWIZARD_PRESELECT

DIF_NEWDEVICEWIZARD_SELECT

DIF_NEWDEVICEWIZARD_PREANALYZE

DIF_NEWDEVICEWIZARD_POSTANALYZE

Un co-instalador de dispositivo no es adecuado en estos contextos, ya sea porque aún no se ha identificado un dispositivo determinado o en esta fase temprana de la instalación, o bien los coinstaladores del dispositivo aún no se han registrado.

En la ilustración siguiente se muestra el orden en el que SetupDiCallClassInstaller llama a co-installers y un instalador de clase después de que se hayan registrado los coinstaladores específicos del dispositivo.

diagrama de llamadas a co-instaladores para el procesamiento y postprocesamiento de solicitudes dif.

En el ejemplo que se muestra en la ilustración anterior, se registran dos co-instaladores de clase para la clase de instalación de este dispositivo y se registra un co-instalador específico del dispositivo para el dispositivo. Los pasos siguientes corresponden a los números en círculo de la ilustración anterior:

  1. SetupDiCallClassInstaller llama al co-instalador de primera clase, especificando un código DIF que indica la solicitud de instalación que se está procesando (DIF_INSTALLDEVICE, en este ejemplo). El co-instalador tiene la opción de participar en la solicitud de instalación. En este ejemplo, el primer co-instalador de clase registrada devuelve NO_ERROR.

  2. SetupDiCallClassInstaller, a su vez, llama a los coinstaladores de clase registrados adicionales. En este ejemplo, el segundo co-instalador de clase devuelve ERROR_DI_POSTPROCESSING_REQUIRED, que solicita que se llame al co-instalador más adelante para el posprocesamiento.

  3. SetupDiCallClassInstaller llama a los coinstaladores específicos del dispositivo registrados.

  4. Después de llamar a todos los co-instaladores registrados, SetupDiCallClassInstaller llama al Instalador de clase proporcionado por el sistema, si hay uno para la clase de instalación del dispositivo. En este ejemplo, el instalador de clase devuelve ERROR_DI_DO_DEFAULT, que es un valor devuelto típico para los instaladores de clase.

  5. SetupDiCallClassInstaller llama al controlador predeterminado para la solicitud de instalación, si hay alguno. DIF_INSTALLDEVICE tiene un controlador predeterminado, SetupDiInstallDevice, que forma parte de SetupAPI.

  6. SetupDiCallClassInstaller llama a los coinstaladores que solicitaron postprocesamiento. En este ejemplo, el segundo instalador de clase ha solicitado postprocesamiento.

El postprocesamiento del co-instalador es similar a las rutinas de IoCompletion del controlador, salvo que el co-instalador se llama una segunda vez en su punto de entrada único. Cuando SetupDiCallClassInstaller llama a un co-instalador para el posprocesamiento, establece PostProcessing en TRUE e InstallResult en el valor adecuado en el parámetro Context . En este ejemplo, Context. InstallResult se NO_ERROR porque el controlador predeterminado se ejecutó correctamente.

Para el posprocesamiento, SetupDiCallClassInstaller llama a co-installers en orden inverso. Si todos los co-instaladores de la figura anterior habían devuelto ERROR_DI_POSTPROCESSING_REQUIRED, SetupDiCallClassInstaller llamaría primero a Device_Coinstaller_1 para el posprocesamiento, seguido de Class_Coinstaller_2 y, a continuación, Class_Coinstaller_1. Los instaladores de clase no solicitan posprocesamiento; solo los coins instaladores.

Se llama a un co-instalador que solicita posprocesamiento, incluso si un co-instalador anterior produjo un error en la solicitud de instalación.