Share via


Usar un archivo INF de componentes

Si desea incluir software en modo de usuario para su uso con un dispositivo en Windows 10, tiene las siguientes opciones para crear un controlador compatible con DCH:

Método Escenario
Aplicaciones de soporte técnico de hardware (HSA) Software de complemento de dispositivo empaquetado como una aplicación para UWP que se entrega y se proporciona desde Microsoft Store. Enfoque recomendado.
Componentes de software El software de complemento de dispositivo es un archivo binario MSI o EXE, un servicio Win32 o software instalado mediante AddReg y CopyFiles. El binario al que se hace referencia solo se ejecuta en ediciones de escritorio (Home, Pro y Enterprise). El binario al que se hace referencia no se ejecutará en Windows 10S.

Un componente de software es un paquete de controladores independiente independiente que puede instalar uno o varios módulos de software. El software instalado mejora el valor del dispositivo, pero no es necesario para la funcionalidad básica del dispositivo y no requiere un servicio de controlador de funciones asociado.

En esta página se proporcionan instrucciones para el uso de componentes de software.

Introducción

Para crear componentes, un archivo INF de extensión especifica la directiva INF AddComponent una o varias veces en la sección INF DDInstall.Components . Para cada componente de software al que se hace referencia en un archivo INF de extensión, el sistema crea un dispositivo secundario enumerado por software virtual. Más de un paquete de controladores puede hacer referencia al mismo componente de software.

Los elementos secundarios del dispositivo virtual se pueden actualizar de forma independiente al igual que cualquier otro dispositivo, siempre y cuando se inicie el dispositivo primario. Se recomienda separar la funcionalidad en tantas agrupaciones diferentes como tenga sentido desde una perspectiva de mantenimiento y, a continuación, crear un componente de software para cada agrupación.

Proporcionará un archivo INF para cada componente de software.

Si el componente de software INF especifica la directiva AddSoftware, el componente INF:

Puede especificar la directiva AddSoftware una o varias veces.

Nota

Cuando se usa el tipo 2 de la directiva AddSoftware, no es necesario usar un COMPONENTE INF. La directiva se puede usar en cualquier INF correctamente. Sin embargo, se debe usar una directiva AddSoftware de tipo 1 de un Componente INF.

Además, cualquier coincidencia inf (componente o no) en un dispositivo de componente de software:

Puede encontrar un ejemplo de un componente INF en el kit de herramientas de instalación de paquetes de controladores para controladores universales.

Nota: Para que un dispositivo de componente enumerado por software funcione, se debe iniciar su elemento primario. Si no hay ningún controlador disponible para el dispositivo primario, los desarrolladores de controladores pueden crear su propio controlador y, opcionalmente, aprovechar el controlador de paso a través "umpass.sys". Este controlador se incluye en Windows y, de hecho, no hace nada más que iniciar el dispositivo. Para usar umpass.sys, los desarrolladores deben usar las directivas INF Include/Needs en la sección DDInstall para cada sección posible [DDInstall.*] en las secciones correspondientes [UmPass.*] como se muestra a continuación, independientemente de si inf especifica alguna directiva para esa sección o no:

[DDInstall]
Include=umpass.inf
Needs=UmPass
; also include any existing DDInstall directives

[DDInstall.HW]
Include=umpass.inf
Needs=UmPass.HW
; also include any existing DDInstall.HW directives

[DDInstall.Interfaces]
Include=umpass.inf
Needs=UmPass.Interfaces
; also include any existing DDInstall.Interfaces directives

[DDInstall.Services]
Include=umpass.inf
Needs=UmPass.Services
; also include any existing any DDInstall.Services directives

Acceso a un dispositivo desde un componente de software

Para recuperar el identificador de instancia de dispositivo de un dispositivo asociado a un componente de software, use el valor SoftwareArguments de la sección directiva AddSoftware inf con la <<DeviceInstanceID>> variable de contexto en tiempo de ejecución.

Después, el ejecutable puede recuperar el identificador de instancia de dispositivo del componente de software de su lista de argumentos entrantes.

A continuación, si el componente de software tiene como destino la plataforma de destino universal, use el procedimiento siguiente:

  1. Llame a CM_Locate_DevNode con el identificador de instancia de dispositivo del componente de software para recuperar un identificador de dispositivo.
  2. Llame a CM_Get_Parent para recuperar un identificador para el elemento primario de ese dispositivo. Este elemento primario es el dispositivo que agregó el componente de software mediante la directiva ADDComponent inf.
  3. A continuación, para recuperar el identificador de instancia de dispositivo del elemento primario, llame a CM_Get_Device_ID en el identificador desde CM_Get_Parent.

Si el componente de software solo tiene como destino la plataforma de destino de escritorio, use el procedimiento siguiente:

  1. Llame a SetupDiCreateDeviceInfoList para crear un conjunto de información de dispositivo vacío.
  2. Llame a SetupDiOpenDeviceInfo con el identificador de instancia del dispositivo del componente de software.
  3. Llame a SetupDiGetDeviceProperty con DEVPKEY_Device_Parent para recuperar el identificador de instancia del dispositivo del elemento primario.

Ejemplo

En el ejemplo siguiente se muestra cómo puede usar un componente de software para instalar un panel de control mediante un ejecutable para una tarjeta gráfica.

Archivo INF del paquete de controladores

[Version]
Signature   = "$WINDOWS NT$"
Class       = Extension
ClassGuid   = {e2f84ce7-8efa-411c-aa69-97454ca4cb57}
ExtensionId = {zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz} ; replace with your own GUID
Provider    = %CONTOSO%
DriverVer   = 06/21/2006,1.0.0.0
CatalogFile = ContosoGrfx.cat
PnpLockdown = 1

[Manufacturer]
%CONTOSO%=Contoso,NTx86

[Contoso.NTx86]
%ContosoGrfx.DeviceDesc%=ContosoGrfx, PCI\VEN0001&DEV0001

[ContosoGrfx.NT]
;empty

[ContosoGrfx.NT.Components]
AddComponent = ContosoControlPanel,, Component_Inst

[Component_Inst]
ComponentIDs = VID0001&PID0001&SID0001

[Strings]
CONTOSO = "Contoso Inc."
ContosoGrfx.DeviceDesc = "Contoso Graphics Card Extension"

Archivo INF del componente de software

[Version]
Signature   = "$WINDOWS NT$"
Class       = SoftwareComponent
ClassGuid   = {5c4c3332-344d-483c-8739-259e934c9cc8}
Provider    = %CONTOSO%
DriverVer   = 06/21/2006,1.0.0.0
CatalogFile = ContosoCtrlPnl.cat
PnpLockdown = 1

[SourceDisksNames]
1 = %Disk%,,,""

[SourceDisksFiles]
ContosoCtrlPnl.exe = 1

[DestinationDirs]
DefaultDestDir = 13

[Manufacturer]
%CONTOSO%=Contoso,NTx86

[Contoso.NTx86]
%ContosoCtrlPnl.DeviceDesc%=ContosoCtrlPnl, SWC\VID0001&PID0001&SID0001

[ContosoCtrlPnl.NT]
CopyFiles=ContosoCtrlPnl.NT.Copy

[ContosoCtrlPnl.NT.Copy]
ContosoCtrlPnl.exe

[ContosoCtrlPNl.NT.Services]
AddService = , %SPSVCINST_ASSOCSERVICE%

[ContosoCtrlPnl.NT.Software]
AddSoftware = ContosoGrfx1CtrlPnl,, Software_Inst

[Software_Inst]
SoftwareType = 1
SoftwareBinary = %13%\ContosoCtrlPnl.exe
SoftwareArguments = <<DeviceInstanceID>>
SoftwareVersion = 1.0.0.0

[Strings]
SPSVCINST_ASSOCSERVICE = 0x00000002
CONTOSO = "Contoso"
ContosoCtrlPnl.DeviceDesc = "Contoso Control Panel"

El proceso de validación y envío de controladores es el mismo para las INF del componente que para las INF normales. Para obtener más información, consulta Windows HLK Introducción.

Para obtener más información sobre las clases de instalación, consulta Clases de instalación de dispositivos definidas por el sistema disponibles para proveedores.

Consulte también

Directiva AddComponent inf

Directiva AddSoftware inf

Sección INF DDInstall.Components

Sección INF DDInstall.Software