Utilisation d'un fichier INF de composant
Si vous souhaitez inclure un logiciel en mode utilisateur à utiliser avec un appareil sur Windows 10, vous avez les options suivantes pour créer un pilote compatible DCH :
Method | Scénario |
---|---|
Applications de support matériel (HSA) | Logiciel complémentaire pour l’appareil emballé sous forme d’application UWP livrée et gérée depuis le Microsoft Store. Approche recommandée. |
Composants logiciels | Le logiciel complémentaire pour l’appareil est un binaire MSI ou EXE, un service Win32, ou un logiciel installé en utilisant AddReg et CopyFiles. Le binaire référencé ne fonctionne que sur les éditions de bureau (Home, Pro et Enterprise). Le binaire référencé ne fonctionnera pas sur Windows 10S. |
Un composant logiciel est un paquet de pilote distinct et autonome qui peut installer un ou plusieurs modules logiciels. Le logiciel installé améliore la valeur de l’appareil, mais n’est pas nécessaire pour le bon fonctionnement de base de l’appareil et ne nécessite pas de service de pilote de fonction associé.
Cette page fournit des lignes directrices pour l’utilisation des composants logiciels.
Mise en route
Pour créer des composants, un fichier INF d’extension spécifie la directive INF AddComponent une ou plusieurs fois dans la section INF DDInstall.Components. Pour chaque composant logiciel référencé dans un fichier INF d’extension, le système crée un appareil enfant virtuel énuméré par logiciel. Plus d’un paquet de pilote peut référencer le même composant logiciel.
Les appareils enfants virtuels peuvent être mis à jour indépendamment comme n’importe quel autre appareil, tant que l’appareil parent est démarré. Nous recommandons de séparer les fonctionnalités en autant de groupements différents que cela a du sens d’un point de vue de la maintenance, puis de créer un composant logiciel pour chaque groupement.
Vous fournirez un fichier INF pour chaque composant logiciel.
Si votre fichier INF de composant logiciel spécifie la directive AddSoftware, le fichier INF du composant :
- Doit être un fichier INF universel.
- Doit spécifier la classe d’installation SoftwareComponent.
Vous pouvez spécifier la directive AddSoftware une ou plusieurs fois.
Remarque
Lors de l’utilisation du Type 2 de la directive AddSoftware, il n’est pas nécessaire d’utiliser un INF de composant. La directive peut être utilisée dans n’importe quel INF avec succès. Cependant, une directive AddSoftware de Type 1 doit être utilisée à partir d’un INF de composant.
De plus, tout fichier INF (composant ou non) correspondant à un appareil composant logiciel :
- Peut spécifier des services utilisateur Win32 en utilisant la directive AddService.
- Peut installer un logiciel en utilisant la directive INF AddReg et la directive INF CopyFiles.
- Ne nécessite pas de service de pilote de fonction.
- Peut être désinstallé par l’utilisateur indépendamment de l’appareil parent.
Vous pouvez trouver un exemple de fichier INF de composant dans le kit d’installation de paquets de pilotes pour pilotes universels.
Remarque : Pour qu’un appareil composant énuméré par logiciel fonctionne, son parent doit être démarré. S’il n’y a pas de pilote disponible pour l’appareil parent, les développeurs de pilotes peuvent créer le leur et éventuellement tirer parti du pilote de transfert « umpass.sys ». Ce pilote est inclus dans Windows et, en effet, ne fait rien d’autre que démarrer l’appareil. Pour utiliser umpass.sys, les développeurs doivent utiliser les directives Include/Needs INF dans la section DDInstall pour chaque section possible [DDInstall.*] vers les sections correspondantes [UmPass.*] comme indiqué ci-dessous, que le fichier INF spécifie ou non des directives pour cette section :
[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
Accéder à un appareil depuis un composant logiciel
Pour récupérer l’ID d’instance de l’appareil associé à un composant logiciel, utilisez la valeur SoftwareArguments dans la section directive INF AddSoftware avec la variable <<DeviceInstanceID>>
de contexte d’exécution.
L’exécutable peut ensuite récupérer l’ID d’instance de l’appareil du composant logiciel à partir de sa liste d’arguments entrants.
Ensuite, si le composant logiciel cible la plateforme cible Universelle, utilisez la procédure suivante :
- Appelez CM_Locate_DevNode avec l’ID d’instance de l’appareil du composant logiciel pour récupérer un handle d’appareil.
- Appelez CM_Get_Parent pour récupérer un handle de l’appareil parent. Ce parent est l’appareil qui a ajouté le composant logiciel en utilisant la directive INF AddComponent.
- Ensuite, pour récupérer l’ID d’instance de l’appareil parent, appelez CM_Get_Device_ID sur le handle de CM_Get_Parent.
Si le composant logiciel cible uniquement la plateforme cible Bureau, utilisez la procédure suivante :
- Appelez SetupDiCreateDeviceInfoList pour créer un ensemble d’informations d’appareil vide.
- Appelez SetupDiOpenDeviceInfo avec l’ID d’instance de l’appareil du composant logiciel.
- Appelez SetupDiGetDeviceProperty avec
DEVPKEY_Device_Parent
pour récupérer l’ID d’instance de l’appareil parent.
Exemple
L’exemple suivant montre comment vous pourriez utiliser un composant logiciel pour installer un panneau de configuration en utilisant un exécutable pour une carte graphique.
Fichier INF de paquet de pilote
[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"
Fichier INF de composant logiciel
[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"
Le processus de validation et de soumission du pilote est le même pour les fichiers INF de composant que pour les fichiers INF réguliers. Pour plus d’informations, veuillez consulter la section Prise en main rapide de Windows HLK.
Pour plus d’informations sur les classes d’installation, veuillez consulter la section Classes d’installation de périphériques définies par le système disponibles pour les fournisseurs.