Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 de compatibilidad 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 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.
Primeros pasos
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 principal. Recomendamos separar las funciones en tantos grupos diferentes como tenga sentido desde la perspectiva del mantenimiento 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 en un INF de componente.
Además, cualquier INF (de componente o no) que coincida con 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 funciones.
- Lo puede desinstalar el usuario independientemente del dispositivo principal.
Puede encontrar un ejemplo de un INF de un componente 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 dispositivo principal. Si no hay ningún controlador disponible para el dispositivo principal, los desarrolladores de controladores pueden crear sus propios controladores y, opcionalmente, aprovechar el controlador de paso "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 .
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 objetivo la plataforma objetivo 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 del dispositivo principal de ese dispositivo. Este elemento principal 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 para recuperar el identificador de instancia del dispositivo del dispositivo padre.
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.
Véase también
Directiva AddComponent de INF
Sección DDInstall.Components de INF
Sección DDInstall.Software de INF