Freigeben über


Verwenden einer INF-Komponentendatei

Wenn Sie Benutzermodus-Software für die Verwendung mit einem Gerät unter Windows 10 einbinden möchten, haben Sie folgende Möglichkeiten, einen DCH-kompatiblen Treiber zu erstellen:

Methode Szenario
Hardware Support Apps (HSA) Geräte-Zusatzsoftware, die als UWP-App gepackt ist und über den Microsoft Store geliefert und gewartet wird. Empfohlene Vorgehensweise.
Softwarekomponenten Geräte-Zusatzsoftware ist eine MSI- oder EXE-Binärdatei, ein Win32-Dienst oder eine Software, die mit AddReg und CopyFiles installiert wird. Die referenzierte Binärdatei kann nur auf den Desktop Versionen (Home, Pro und Enterprise) ausgeführt werden. Die referenzierte Binärdatei kann nicht unter Windows 10S ausgeführt werden.

Eine Softwarekomponente ist ein separates, eigenständiges Treiberpaket, das ein oder mehrere Softwaremodule installieren kann. Die installierte Software erhöht den Wert des Geräts, ist aber für die Grundfunktionalität des Geräts nicht erforderlich und benötigt keinen zugehörigen Treiberdienst für die Funktion.

Auf dieser Seite finden Sie Richtlinien für die Verwendung von Softwarekomponenten.

Erste Schritte

Um Komponenten zu erstellen, gibt eine Erweiterungs-INF-Datei die Direktive INF AddComponent ein oder mehrere Male im Abschnitt INF DDInstall.Components an. Für jede Softwarekomponente, auf die in einer Erweiterungs-INF-Datei verwiesen wird, erstellt das System ein virtuelles, softwareaufgelistetes untergeordnetes Gerät. Mehr als ein Treiberpaket kann auf dieselbe Softwarekomponente verweisen.

Untergeordnete Elemente eines virtuellen Geräts können wie jedes andere Gerät unabhängig aktualisiert werden, solange das übergeordnete Gerät gestartet ist. Wir empfehlen, die Funktionalität in so viele verschiedene Gruppen aufzuteilen, wie es aus Sicht des Dienstes Sinn ergibt, und dann eine Softwarekomponente für jede Gruppe zu erstellen.

Sie erstellen eine INF-Datei für jede Softwarekomponente.

Wenn Ihre Softwarekomponenten-INF die AddSoftware-Direktive enthält, muss die Komponente INF:

Sie können die AddSoftware-Direktive ein oder mehrere Male angeben.

Hinweis

Wenn Sie Typ 2 der Direktive AddSoftware verwenden, ist es nicht erforderlich, eine Komponenten-INF zu verwenden. Die Direktive kann in jeder INF erfolgreich verwendet werden. Eine Direktive AddSoftware vom Typ 1 muss jedoch in einer Komponenten-INF verwendet werden.

Außerdem kann jede INF (Komponente oder nicht) auf einem Gerät mit einer Softwarekomponente verwendet werden:

  • Kann mit der Direktive AddService Win32-Benutzerdienste angeben.
  • Kann Software mit Hilfe der Direktive INF AddReg und der Direktive INF CopyFiles installieren.
  • Benötigt keinen Funktions-Treiberdienst.
  • Kann von Benutzer*innen unabhängig vom übergeordneten Gerät deinstalliert werden.

Ein Beispiel für eine INF-Komponente finden Sie im Treiberpaket-Installations-Toolkit für universelle Treiber.

Hinweis: Damit ein softwareaufgelistetes Komponentengerät funktioniert, muss das übergeordnete Gerät gestartet werden. Wenn für das übergeordnete Gerät kein Treiber verfügbar ist, können Entwickler*innen von Treibern einen eigenen erstellen und optional den Pass-Through-Treiber „umpass.sys“ nutzen. Dieser Treiber ist in Windows enthalten und macht im Grunde nichts anderes, als das Gerät zu starten. Um umpass.sys zu verwenden, sollten Entwickler*innen die INF-Direktiven Include/Needs im Abschnitt DDInstall für jeden möglichen [DDInstall.*]-Abschnitt zu den entsprechenden [UmPass.*]-Abschnitten verwenden, wie unten gezeigt, unabhängig davon, ob die INF Direktiven für diesen Abschnitt angibt oder nicht:

[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

Zugriff auf ein Gerät von einer Softwarekomponente aus

Um die ID der Instanz eines Geräts abzurufen, das mit einer Softwarekomponente verbunden ist, verwenden Sie den SoftwareArguments-Wert im Abschnitt INF AddSoftware-Direktive mit der Runtime-Context-Variablen <<DeviceInstanceID>>.

Die ausführbare Datei kann dann die Instanz-ID des Geräts der Softwarekomponente aus ihrer eingehenden Argumentliste abrufen.

Wenn die Softwarekomponente auf die Universal Zielplattform ausgerichtet ist, gehen Sie wie folgt vor:

  1. Rufen Sie CM_Locate_DevNode mit der ID der Instanz des Geräts der Softwarekomponente auf, um ein Handle des Geräts zu erhalten.
  2. Rufen Sie CM_Get_Parent auf, um ein Handle für das übergeordnete Gerät abzurufen. Dieses übergeordnete Gerät ist das Gerät, das die Softwarekomponente mit der Direktive INF AddComponent hinzugefügt hat.
  3. Um die ID der Instanz des übergeordneten Geräts abzurufen, rufen Sie CM_Get_Device_ID mit dem Handle von CM_Get_Parent auf.

Wenn die Softwarekomponente nur für die Desktop Zielplattform bestimmt ist, gehen Sie wie folgt vor:

  1. Rufen Sie SetupDiCreateDeviceInfoList auf, um einen leeren Satz von Geräteinformationen zu erstellen.
  2. Rufen Sie SetupDiOpenDeviceInfo mit der ID der Instanz des Geräts der Softwarekomponente auf.
  3. Rufen Sie SetupDiGetDeviceProperty mit DEVPKEY_Device_Parent auf, um die ID der Instanz des übergeordneten Geräts abzurufen.

Beispiel

Das folgende Beispiel zeigt, wie Sie eine Softwarekomponente verwenden können, um ein Control Panel mit einer ausführbaren Datei für eine Grafikkarte zu installieren.

Treiber-Paket INF-Datei

[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"

Software-Komponente INF-Datei

[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"

Der Prozess der Treibervalidierung und -übermittlung ist für Komponenten-INFs derselbe wie für reguläre INFs. Weitere Informationen finden Sie unter Windows-HLK: Erste Schritte.

Weitere Informationen über Setup-Klassen finden Sie unter Systemdefinierte Klassen für die Einrichtung von Geräten, die Herstellern zur Verfügung stehen.

Weitere Informationen

INF-AddComponent-Direktive

INF-Direktive AddSoftware

INF-DDInstall.Components-Abschnitt

INF-DDInstall.Software-Abschnitt