Partager via


Using a Component INF File (Utilisation d’un fichier de composant INF)

Si vous souhaitez inclure un logiciel en mode utilisateur à utiliser avec un appareil sur Windows 10, vous disposez des options suivantes pour créer un pilote compatible DCH :

Méthode Scénario
Applications de support matériel (HSA) Logiciel de complément d’appareil empaqueté en tant qu’application UWP fournie et prise en charge à partir du Microsoft Store. Approche recommandée.
Composants logiciels Le logiciel complémentaire d’appareil est un fichier binaire MSI ou EXE, un service Win32 ou un logiciel installé à l’aide de AddReg et de CopyFiles. Le fichier binaire référencé s’exécute uniquement sur les éditions de bureau (Home, Pro et Enterprise). Le fichier binaire référencé ne s’exécute pas sur Windows 10S.

Un composant logiciel est un package de pilotes autonome distinct 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 les fonctionnalités de base de l’appareil et ne nécessite pas de service de pilote de fonction associé.

Cette page fournit des instructions pour l’utilisation des composants logiciels.

Prise en main

Pour créer des composants, un fichier INF d’extension spécifie la directive ADDComponent INF 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 énuméré par un logiciel virtuel. Plusieurs packages de pilotes peuvent référencer le même composant logiciel.

Les enfants d’appareils virtuels peuvent être mis à jour indépendamment comme tout autre appareil, tant que l’appareil parent est démarré. Nous vous recommandons de séparer les fonctionnalités en autant de regroupements différents que cela est logique du point de vue de la maintenance, puis de créer un composant logiciel pour chaque regroupement.

Vous allez fournir un fichier INF pour chaque composant logiciel.

Si l’INF de votre composant logiciel spécifie la directive AddSoftware, le composant INF :

Vous pouvez spécifier la directive AddSoftware une ou plusieurs fois.

Notes

Lorsque vous utilisez le 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. Toutefois, une directive AddSoftware de type 1 doit être utilisée à partir d’un inf de composant.

En outre, toute correspondance INF (composant ou non) sur un appareil de composant logiciel :

  • Peut spécifier des services utilisateur Win32 à l’aide de la directive AddService.
  • Peut installer des logiciels à l’aide de la directive AddReg INF et de 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 trouverez un exemple d’inf de composant dans le kit de ressources d’installation du package de pilotes pour les pilotes universels.

Remarque : Pour qu’un appareil de composant énuméré par un logiciel fonctionne, son parent doit être démarré. S’il n’existe aucun pilote disponible pour l’appareil parent, les développeurs de pilotes peuvent créer leur propre pilote et éventuellement tirer parti du pilote direct « umpass.sys ». Ce pilote est inclus dans Windows et, en fait, ne fait rien d’autre que démarrer l’appareil. Pour utiliser umpass.sys, les développeurs doivent utiliser les directives Include/Needs INF de la section DDInstall pour chaque section [DDInstall.*] possible dans les sections [UmPass.*] correspondantes, comme indiqué ci-dessous, que l’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ès à un appareil à partir d’un composant logiciel

Pour récupérer l’ID de instance d’un appareil associé à un composant logiciel, utilisez la valeur SoftwareArguments de la section directive INF AddSoftware avec la variable de contexte d’exécution<<DeviceInstanceID>>.

L’exécutable peut ensuite récupérer l’ID de 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 :

  1. Appelez CM_Locate_DevNode avec l’ID de instance de l’appareil du composant logiciel pour récupérer un handle d’appareil.
  2. Appelez CM_Get_Parent pour récupérer un handle sur le parent de cet appareil. Ce parent est l’appareil qui a ajouté le composant logiciel à l’aide de la directive AddComponent INF.
  3. Ensuite, pour récupérer l’ID de instance de l’appareil du parent, appelez CM_Get_Device_ID sur le handle à partir de CM_Get_Parent.

Si le composant logiciel cible uniquement la plateforme cible desktop, procédez comme suit :

  1. Appelez SetupDiCreateDeviceInfoList pour créer un jeu d’informations d’appareil vide.
  2. Appelez SetupDiOpenDeviceInfo avec l’ID de instance d’appareil du composant logiciel.
  3. Appelez SetupDiGetDeviceProperty avec DEVPKEY_Device_Parent pour récupérer l’id de instance de l’appareil du parent.

Exemple

L’exemple suivant montre comment utiliser un composant logiciel pour installer un panneau de configuration à l’aide d’un exécutable pour un carte graphique.

Fichier INF du package 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 du 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 des pilotes est le même pour les INF de composant que pour les INF standard. Pour plus d’informations, consultez Windows HLK Prise en main.

Pour plus d’informations sur les classes d’installation, consultez Classes d’installation d’appareils définies par le système disponibles pour les fournisseurs.

Voir aussi

INF AddComponent Directive

INF AddGestion de logiciels

INF DDInstall.Components Section

INF DDInstall.Software Section