Uso de un archivo INF de componentes
Si desea incluir software en modo de usuario para usarlo con un dispositivo en Windows 10, tiene las siguientes opciones para crear un controlador compatible con DCH:
Método | Escenario |
---|---|
Aplicaciones para compatibilidad con 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 separado e 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 AddComponent de INF una o varias veces en la sección DDInstall.Components de INF. 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. Recomendamos separar las funciones en tantos grupos diferentes como tenga sentido desde el punto de vista del servicio y crear un componente de software para cada grupo.
Proporcionará un archivo INF para cada componente de software.
Si el INF de componente de software especifica la directiva AddSoftware, el INF de componente:
- Debe ser un archivo INF universal.
- Debe especificar la clase de instalación SoftwareComponent.
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 INF de componente. La directiva se puede usar correctamente en cualquier INF. Sin embargo, se debe usar una directiva AddSoftware de tipo 1 desde un INF de componente.
Además, cualquier coincidencia de INF (de componente o no) en un dispositivo de componente de software:
- Puede especificar servicios de usuario de Win32 mediante la directiva AddService.
- Puede instalar software mediante la directiva AddReg de INF y la directiva CopyFiles de INF.
- No requiere un servicio de controlador de función.
- Lo puede desinstalar el usuario independientemente del dispositivo primario.
Puede encontrar un ejemplo de INF de componentes 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 sus propios controladores y, opcionalmente, aprovechar el controlador de tránsito "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 de la sección DDInstall para cada sección [DDInstall.*] posible en las secciones [UmPass.*] correspondientes, como se muestra a continuación, independientemente de si el INF especifica o no directivas para esa sección:
[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 un dispositivo asociado a un componente de software, use el valor SoftwareArguments de la sección directiva AddSoftware de INF con la variable de contexto en tiempo de ejecución <<DeviceInstanceID>>
.
Después, el ejecutable puede recuperar el identificador de instancia del 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:
- Llame a CM_Locate_DevNode con el identificador de instancia de dispositivo del componente de software para recuperar un identificador de dispositivo.
- Llame a CM_Get_Parent para recuperar un identificador al elemento primario de ese dispositivo. Este elemento primario es el dispositivo que agregó el componente de software mediante la directiva AddComponent de INF.
- 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:
- Llame a SetupDiCreateDeviceInfoList para crear un conjunto de información de dispositivo vacío.
- Llame a SetupDiOpenDeviceInfo con el identificador de instancia de dispositivo del componente de software.
- 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 los INF de componente que para los INF normales. Para obtener más información, consulte Introducción a Windows HLK.
Para obtener más información sobre las clases de configuración, consulte Clases de configuración de dispositivos definidas por el sistema disponibles para proveedores.