Eliminación de coinstaladores de paquetes de controladores
Cautela
A partir de enero de 2023, los paquetes de controladores que contienen un coinstalador ya no están firmados por el portal del Centro para desarrolladores de hardware. Para obtener más información sobre el requisito, consulte Directivas y especificaciones del programa de compatibilidad de hardware de Windows, específicamente las directivas de la versión 22H2, sección Device.DevFund.INF.Declarative.
En esta página se abordan las razones comunes por las que los co-instaladores están presentes en un paquete de controladores y ofrece mecanismos para realizar la misma tarea sin un co-instalador.
Instaladores conjuntos de WDF y WinUSB
El co-instalador de WDF y el co-instalador de WinUSB no son necesarios en ningún sistema que ejecute Windows 10 y versiones posteriores. Las referencias del coinstalador de WDF se pueden quitar sin necesidad de trabajo adicional. Se pueden quitar las referencias del coinstalador de WinUSB y se debe hacer referencia a WinUSB desde el INF del paquete de controladores mediante las directivas Include y Needs.
Instrucciones del paquete de controladores WinUSB
Instalación de software que presenta la interfaz de usuario
En lugar de iniciar una aplicación durante una instalación, proporcione una aplicación para la Plataforma universal de Windows instalada mediante una directiva AddSoftware desde una sección DDInstall.Software del paquete de controladores INF.
Para obtener más información, consulta Emparejamiento de un controlador con una aplicación para la Plataforma universal de Windows (UWP). Se admite una directiva addSoftware en Windows 10, versión 1703 y versiones posteriores de Windows.
Para obtener más información, consulte Instalación de software asociado a continuación.
Establecimiento de nombres amigables de dispositivos
Archivo INF
Un paquete de controlador INF puede configurar el nombre descriptivo del dispositivo de la siguiente manera:
[DDInstall.HW]
AddReg = FriendlyName_AddReg
[FriendlyName_AddReg]
HKR,,FriendlyName,, "Device Friendly Name"
Tiempo de ejecución
El controlador puede establecer el nombre descriptivo durante la IRP de inicio o la fase de PrepareHardware, estableciendo la propiedad DEVPKEY_Device_FriendlyName con una de las siguientes API:
Otras configuraciones/ajustes de dispositivos
Cuando sea posible, el controlador puede cambiar la configuración del dispositivo dentro del IRP de inicio del controlador o la fase de PrepareHardware. Al modificar el estado en tiempo de ejecución, el controlador debe seguir los requisitos de aislamiento del paquete del controlador . Estos requisitos contienen las instrucciones sobre la configuración del controlador y el diseño del estado, y ayudan a que el controlador esté preparado para el futuro, haciéndolo más resistente a los cambios externos, más fácil de actualizar y más sencillo de instalar.
Para los ajustes y la configuración que no se pueden establecer dentro del propio controlador, un paquete de controlador también puede incluir componentes en tiempo de ejecución en modo usuario que modifiquen dichos ajustes y configuración. Puede ser una aplicación orientada al usuario o un servicio Win32 que actualice la configuración. Para obtener información sobre cómo incluir software en modo de usuario para su uso con un dispositivo, consulta Using a Component INF File.
Si se usa un componente persistente como un servicio, asegúrese de que su funcionalidad es necesaria y no se puede realizar de forma menos intensiva en recursos, como dentro de un paquete de controladores INF o dentro del propio controlador. Para obtener información sobre cómo asegurarse de que un servicio solo se ejecuta cuando los dispositivos pertinentes están conectados, consulta Desencadenadores de servicio, servicios Win32 que interactúan con dispositivosy Registro de notificaciones de interfaz de dispositivo. El servicio también debe cumplir con los requisitos más recientes, por ejemplo, pasar el Validador de API.
Instalación de software asociado
La sección "Componentizada" de los requisitos del controlador DCH en el apartado introdujo un concepto denominado Componente de Software (SoftwareComponent), que es un mecanismo para desacoplar la instalación de un controlador de dispositivo de su software asociado. Cuando el INF crea un componente de software, automáticamente creará un dispositivo secundario que se asigna al componente de software. Este dispositivo secundario existirá con el fin de instalar el software asociado al dispositivo primario. Este software se puede instalar y actualizar independientemente del dispositivo principal y el controlador.
Dentro de un archivo INF del paquete de controladores SoftwareComponent, el mecanismo recomendado para instalar software usa una directiva AddSoftware. Esto desencadenará la descarga e instalación de software de la Tienda Windows.
- SoftwareComponent
- AddSoftware
- Paquete de controladores DCH de ejemplo
- Emparejar un controlador con una aplicación para UWP
Dependencias entre controladores y dispositivos
Dependencias de orden de inicio y enumeración de dispositivos
En la medida de lo posible, se deben evitar las dependencias entre dispositivos o los requisitos de ordenación de inicio.
En el caso de los dispositivos enumerados por ACPI, el objeto de dependencia (_DEP) se puede usar en el firmware ACPI para aplicar el orden de inicio del dispositivo. Para obtener más información, consulte Espacio de nombres de administración de dispositivos.
Los controladores pueden responder al IRP_MN_QUERY_DEVICE_RELATIONS para definir relaciones entre dispositivos, como las relaciones de eliminación. Para obtener más información, consulte IRP_MN_QUERY_DEVICE_RELATIONS.
Dependencias de instalación del paquete de controladores
La directiva CopyInf se puede usar para instalar también un paquete de controladores adicional durante la misma llamada de API de instalación que otro controlador. El paquete de controladores pasado a la API de instalación se instalará antes de los paquetes de controladores a los que se hace referencia a CopyInf, pero no se garantiza que los paquetes de controladores a los que hace referencia CopyInf se instalen en cualquier orden determinado.
Configuración de componentes de varios proveedores agrupados en un solo paquete de controladores
Los paquetes de controladores admiten un tipo de INF denominado INF de extensión. Se trata de un archivo INF diseñado específicamente para aumentar y ampliar la funcionalidad de un paquete de controladores "base". Es posible que una extensión no proporcione el controlador de funciones para el dispositivo, pero puede usar otras directivas o escribir otras configuraciones para un dispositivo. Durante la instalación de un controlador, se selecciona un único paquete base de controladores INF mediante la clasificación de controladores para proporcionar la funcionalidad del dispositivo; a continuación, se selecciona cualquier INF de extensión para el dispositivo. Para obtener más información, consulta Uso de un archivo INF de extensión.
Un paradigma común para usar los paquetes de controladores de extensión INF es que el fabricante de hardware proporcione el paquete de controladores base INF, y que un OEM, al integrar esa pieza dentro de un sistema, cree un paquete de controladores de extensión INF que lo personalice para ese sistema.
Instalación o orquestación de actualizaciones de firmware
Se recomiendan diferentes mecanismos de actualización de firmware en función de la naturaleza del dispositivo que se está actualizando. Cada uno de los siguientes se puede usar para enviar e instalar una actualización de firmware a través de Windows Update.
No extraíble
La plataforma de actualización de firmware UEFI está diseñada para actualizar componentes de un sistema que no se puede quitar, como el firmware del sistema. Para obtener más información, consulta UEFI Firmware Update Platform.
Amovible
Para dispositivos extraíbles como HID o USB, el modelo CFU permite actualizaciones de firmware seguras. Para obtener más información, consulta la actualización de firmware de componentes .
Implementación personalizada
Como alternativa, se puede escribir un controlador personalizado que actualice el firmware del dispositivo a discreción del controlador. Para obtener más información, consulte Controlador de actualización de firmware personalizado.