Escribir instaladores de clase y Co-Installers
Nota:
Las características descritas en esta sección no se admiten en paquetes de controladores universales o móviles. Consulte Uso de un archivo INF universal.
Esta sección contiene las instrucciones que debe seguir al escribir un co-instalador:
Mostrar una interfaz de usuario
Guardar el estado de instalación del dispositivo
Carga de archivos ejecutables o DLL
Inicio de otros procesos o servicios
Para obtener más información sobre cómo escribir un co-instalador, consulte Escritura de un co-instalador.
Mostrar una interfaz de usuario
La instalación del dispositivo se ejecuta principalmente en un servicio del sistema (no interactivo). Por lo tanto, un usuario no puede ver ni responder a ninguna interfaz de usuario que aparezca en este contexto. Cualquier cuadro de diálogo que se proporcione en el coinstalador durante el procesamiento de un código de función de instalación de dispositivos (DIF) hace que la instalación del dispositivo deje de responder.
En la mayoría de los casos, los co-instaladores no deben interactuar con el usuario, excepto durante el procesamiento de una acción de finalización de la instalación. Las acciones de instalación finalizada se ejecutan en un contexto interactivo.
Nota Los coinstaladores no deben producir un error en un código DIF con ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION porque esto hace que se produzca un error en la instalación del dispositivo. Si la instalación del dispositivo requiere interacción del usuario, los coinstaladores deben admitir acciones de instalación de finalización.
Guardar el estado de instalación del dispositivo
No guarde el estado de instalación del dispositivo en la biblioteca de vínculos dinámicos (DLL) del co-instalador . Dado que Windows generalmente descarga el archivo DLL después de que el instalador controle un código DIF, cualquier información de estado guardada en el archivo DLL no se conservaría.
Para conservar de forma segura el estado del instalador de dispositivo, los instaladores de clase o los coins instaladores deben guardar la información de estado como propiedades dentro de la clave de controlador del dispositivo en el Registro. Para ello, realice los pasos siguientes:
Para recuperar un identificador del Registro en la clave de controlador de una instancia de dispositivo, use SetupDiOpenDevRegKey con el parámetro KeyType establecido en DIREG_DRV.
Use SetupDiGetDevicePropertyKeys (para recuperar todas las claves de propiedad de una instancia de dispositivo) o SetupDiGetDeviceProperty (para recuperar una clave de propiedad de instancia de dispositivo especificada).
Use SetupDiSetDeviceProperty para guardar la clave de propiedad de la instancia del dispositivo.
Carga de archivos ejecutables o DLL
Si el coinstalador intenta cargar un archivo ejecutable sin firmar o DLL en una plataforma de Windows de 64 bits, los sistemas operativos impiden que se carguen en este entorno seguro.
Para cargar de forma segura un archivo ejecutable o DLL mediante un instalador de clase o coinstalador, se recomienda encarecidamente que el archivo ejecutable o dll se incluya en el paquete de controladores firmado digitalmente. Para obtener más información sobre cómo firmar paquetes de controladores, vea Firma de controladores.
Nota Los instaladores de clase y los coinstaladores no deben cargar módulos DLL mediante llamadas de función explícitas, como LoadLibrary, o mediante la creación de dependencias de vínculo.
Inicio de otros procesos o servicios
Durante la instalación del dispositivo, Windows no puede realizar un seguimiento de los procesos adicionales y no puede determinar lo que están haciendo o cuando terminen. Por ejemplo, Windows podría iniciar o detener el dispositivo o iniciar un reinicio del sistema mientras el proceso realiza una acción crítica.
En la mayoría de los casos, los co-instaladores no deben iniciar otros procesos o servicios. Sin embargo, los instaladores pueden iniciar otros procesos de forma segura mediante una llamada a CreateProcess desde una función o un cuadro de diálogo que se muestra a través de una acción de finalización de la instalación. El instalador no debe permitir que el usuario continúe en el cuadro de diálogo o procedimiento hasta que se haya cerrado el proceso creado.