Compartir a través de


Creación de un nuevo controlador primitivo

Use un controlador primitivo para controlar y administrar el software que usa la instalación basada en INF, pero no están necesariamente vinculados a un dispositivo de hardware determinado.

Fondo y ventajas de los controladores primitivos

Antes de Windows 10 versión 1903, ciertos tipos de software que usaban la instalación basada en INF, pero que no estaban necesariamente vinculados a un dispositivo de hardware determinado no eran totalmente compatibles con el sistema operativo. Aunque estos fragmentos de software usaban archivos INF como manifiesto para la instalación, el sistema operativo no era consciente directamente de este escenario y no tenía compatibilidad para controlarlo de forma nativa.

Dado que estas piezas de software no estaban vinculadas a un dispositivo de hardware, se instalarían en todo el sistema independientemente del hardware. Como resultado, no había ninguna garantía de que estas partes de software se instalaran, desinstalaran o controlaran correctamente en la actualización del sistema operativo.

A partir de Windows 10 versión 1903, la plataforma Plug and Play controla y administra este tipo de paquete de software como una entidad de nivel superior, lo que da lugar a una confiabilidad mejorada y un comportamiento adecuado garantizado de dicho software, especialmente durante los escenarios de actualización y restablecimiento del sistema operativo.

Los tipos de software que aprovechan esta nueva compatibilidad con la plataforma se denominan controladores primitivos. Los controladores primitivos siguen usando la instalación basada en INF y la plataforma subyacente hace uso del almacén de controladores para realizar un seguimiento de todos los archivos pertinentes.

A continuación, la plataforma de Plug and Play subyacente instala, desinstala y mantiene el estado del controlador en la actualización del sistema operativo.

Conceptualmente, estas INF se administran de forma diferente. Anteriormente, [DefaultInstall] (y a menudo, [DefaultUninstall]) se procesaban mediante SetupAPI de forma similar a un script, donde el INF se usaba como manifiesto y SetupAPI ejecutó las instrucciones en las secciones pertinentes en nombre del autor de la llamada.

Deshacer los cambios (para realizar una desinstalación) necesarios para especificar una sección INF que realizó el conjunto opuesto de instrucciones como sección de instalación. Sin embargo, los controladores primitivos que aprovechan INF no requieren una sección de desinstalación.

Los controladores primitivos usan las mismas API de instalación y desinstalación que los controladores de dispositivo, donde la API de desinstalación realizará el conjunto inverso de operaciones como la operación de instalación y el acto de instalar o desinstalar el paquete de controladores procesará esas secciones.

Requisitos de INF para acceder a la funcionalidad del controlador primitivo

  • La sección Versión debe estar completa, al igual que los controladores PnP.

    • La directiva Provider debe rellenarse.

    • La directiva Class debe rellenarse.

    • La directiva ClassGuid debe rellenarse.

  • El controlador debe ser compatible con DCH.

  • No puede haber ninguna sección [Fabricante].

  • [DefaultInstall] las secciones deben estar decoradas en la arquitectura y no puede haber versiones no codificadas.

    • Correcto: [DefaultInstall.NTamd64]

    • Incorrecto: [DefaultInstall]

  • [DefaultUninstall] puede que no esté presente en el INF (consulte compatibilidad heredada para obtener una excepción).

Controladores primitivos destinados solo Windows 10 versión 1903 y posteriores

Los controladores primitivos destinados solo a Windows 10 versión 1903 y posteriores deben usar DiInstallDriver y DiUninstallDriver para instalar y desinstalar correctamente su software en o desde el almacén de controladores.

Los controladores también deben usar Dirid 13 para especificar correctamente el almacén de controladores como destino deseado que se va a instalar.

Compatibilidad heredada

Aunque [DefaultUninstall] está prohibido en los controladores primitivos, se produce una excepción por motivos de compatibilidad del sistema operativo de nivel descendente. Windows presenta una directiva INF que hace que una versión del sistema operativo que admita controladores primitivos omita la sección [DefaultUninstall]. Si el paquete de controladores necesita admitir versiones del sistema operativo de nivel descendente, incluya la siguiente sintaxis para asegurarse de que la plataforma controlará correctamente estos casos:

[DefaultUninstall.NTamd64]
LegacyUninstall=1

Las secciones [DefaultInstall] y [DefaultUninstall] todavía deben estar decoradas con arquitectura; sin embargo, al incluir LegacyUninstall=1, Windows omite la sección [DefaultUninstall] (en Windows 10 versión 1903 y posteriores). Al hacerlo, puede incluir esa sección en el INF, donde se puede usar de nivel descendente con una aplicación de instalación o desinstalación heredada para desinstalar el paquete de controladores primitivo.

A partir de Windows 10 versión 1903, si pasa una sección [DefaultInstall] o [DefaultUninstall] decorada con arquitectura en la API InstallHInfSection en setupapi.dll, se comprobará el paquete de controladores para determinar si admite la funcionalidad del controlador primitivo. Si admite la funcionalidad del controlador primitivo, en lugar de procesar la sección especificada de la manera heredada, el INF se pasa a DiInstallDriver o DiUninstallDriver, según corresponda. De este modo, un único instalador puede usar controladores primitivos en versiones compatibles del sistema operativo y mantener la compatibilidad con versiones anteriores del sistema operativo.

Conversión desde un controlador de dispositivo INF

La conversión de un INF que usa [Fabricante] en uno que usa [DefaultInstall] requiere cambios menores en inf. A diferencia de una sección [Fabricante], una sección [DefaultInstall] es un punto de entrada y una sección de instalación. Esto combina conceptualmente la sección [Fabricante], [Modelos] y [DDInstall] en una.

El siguiente INF recibirá un error 1297 en InfVerif porque no se instala en ningún hardware:

[Manufacturer]
%Company% = Driver, NTx86, NTamd64

[Driver.NTx86]
%DeviceDesc% = InstallSection_32,

[Driver.NTamd64]
%DeviceDesc% = InstallSection_64,

[InstallSection_64]
CopyFiles = MyCopyFiles_64
AddReg = MyAddReg

[InstallSection_64.Services]
AddService = MyService,, MyService_Install

[InstallSection_32]
CopyFiles = MyCopyFiles_x86
AddReg = MyAddReg

[InstallSection_32.Services]
AddService = MyService,, MyService_Install

El INF anterior se puede convertir en un INF basado en [DefaultInstall], como se muestra a continuación.

[DefaultInstall.NTamd64]
CopyFiles = MyCopyFiles_64
AddReg = MyAddReg

[DefaultInstall.NTamd64.Services]
AddService = MyService,, MyService_Install

[DefaultInstall.NTx86]
CopyFiles = MyCopyFiles_x86
AddReg = MyAddReg

[DefaultInstall.NTx86.Services]
AddService = MyService,, MyService_Install