Verwenden einer Component INF-Datei

Wenn Sie Software im Benutzermodus für die Verwendung mit einem Gerät auf Windows 10 einschließen möchten, haben Sie die folgenden Optionen, um einen DCH-kompatiblen Treiber zu erstellen:

Methode Szenario
Hardwareunterstützungs-Apps (HSA) Geräte-Add-On-Software, gepackt als UWP-App, die aus dem Microsoft Store bereitgestellt und gewartet wird. Empfohlener Ansatz.
Softwarekomponenten Geräte-Add-On-Software ist eine MSI- oder EXE-Binärdatei, ein Win32-Dienst oder software, die mit AddReg und CopyFiles installiert wird. Binärdateien, auf die verwiesen wird, werden nur auf Desktopeditionen (Home, Pro und Enterprise) ausgeführt. Die Binärdatei, auf die verwiesen wird, wird unter Windows 10S nicht ausgeführt.

Eine Softwarekomponente ist ein separates, eigenständiges Treiberpaket, das ein oder mehrere Softwaremodule installieren kann. Die installierte Software verbessert den Wert des Geräts, ist jedoch für grundlegende Gerätefunktionen nicht erforderlich und erfordert keinen zugeordneten Funktionstreiberdienst.

Diese Seite enthält Richtlinien für die Verwendung von Softwarekomponenten.

Erste Schritte

Um Komponenten zu erstellen, gibt eine INF-Erweiterungsdatei die INF AddComponent-Direktive ein oder mehrmals im Abschnitt INF DDInstall.Components an. Für jede Softwarekomponente, auf die in einer Erweiterungs-INF-Datei verwiesen wird, erstellt das System ein virtuelles, softwareenumeriertes untergeordnetes Gerät. Mehrere Treiberpakete können auf dieselbe Softwarekomponente verweisen.

Untergeordnete virtuelle Geräte können unabhängig wie jedes andere Gerät aktualisiert werden, solange das übergeordnete Gerät gestartet wird. Es wird empfohlen, die Funktionalität in so viele verschiedene Gruppierungen zu trennen, wie aus Wartungssicht sinnvoll ist, und dann eine Softwarekomponente für jede Gruppierung zu erstellen.

Sie stellen eine INF-Datei für jede Softwarekomponente bereit.

Wenn Ihre Softwarekomponente INF die AddSoftware-Direktive angibt, ist die Komponente INF:

Sie können die AddSoftware-Direktive mehrmals angeben.

Hinweis

Bei Verwendung von Typ 2 der AddSoftware-Direktive ist es nicht erforderlich, eine Component INF zu verwenden. Die -Direktive kann erfolgreich in jedem INF verwendet werden. Eine AddSoftware-Direktive vom Typ 1 muss jedoch aus einem Komponenten-INF verwendet werden.

Darüber hinaus können alle INF-Übereinstimmungen (Komponenten oder nicht) auf einem Softwarekomponentengerät:

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

Hinweis: Damit ein softwareumeriertes Komponentengerät funktioniert, muss das übergeordnete Gerät gestartet werden. Wenn kein Treiber für das übergeordnete Gerät verfügbar ist, können Treiberentwickler einen eigenen erstellen und optional den Passthroughtreiber "umpass.sys" nutzen. Dieser Treiber ist in Windows enthalten und führt im Grunde nichts anderes aus, als das Gerät zu starten. Um umpass.sys zu verwenden, sollten Entwickler die Include/Needs INF-Anweisungen 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-Anweisung Für diesen Abschnitt Anweisungen 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

Zugreifen auf ein Gerät über eine Softwarekomponente

Um das Gerät instance ID eines Geräts abzurufen, das einer Softwarekomponente zugeordnet ist, verwenden Sie den Wert SoftwareArguments im Abschnitt INF AddSoftware-Direktive mit der <<DeviceInstanceID>> Laufzeitkontextvariablen.

Die ausführbare Datei kann dann das Gerät instance ID der Softwarekomponente aus der eingehenden Argumentliste abrufen.

Wenn die Softwarekomponente als Nächstes auf die universelle Zielplattform ausgerichtet ist, führen Sie das folgende Verfahren aus:

  1. Rufen Sie CM_Locate_DevNode mit der Geräte-instance-ID der Softwarekomponente auf, um ein Gerätehandle abzurufen.
  2. Rufen Sie CM_Get_Parent auf, um ein Handle für das übergeordnete Gerät abzurufen. Dieses übergeordnete Element ist das Gerät, das die Softwarekomponente mithilfe der INF AddComponent-Direktive hinzugefügt hat.
  3. Rufen Sie dann CM_Get_Device_ID für das Handle vonCM_Get_Parent auf, um die Geräte-instance-ID des übergeordneten Elements abzurufen.

Wenn die Softwarekomponente nur auf die Desktopzielplattform ausgerichtet ist, führen Sie das folgende Verfahren aus:

  1. Rufen Sie SetupDiCreateDeviceInfoList auf, um einen leeren Geräteinformationssatz zu erstellen.
  2. Rufen Sie SetupDiOpenDeviceInfo mit dem Gerät des Softwarekomponentengeräts instance-ID auf.
  3. Rufen Sie SetupDiGetDeviceProperty mit DEVPKEY_Device_Parent auf, um das Gerät instance ID des übergeordneten Elements abzurufen.

Beispiel

Das folgende Beispiel zeigt, wie Sie eine Softwarekomponente verwenden können, um eine Systemsteuerung mithilfe einer ausführbaren Datei für eine Grafik Karte zu installieren.

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

Softwarekomponenten-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 Treibervalidierungs- und Übermittlungsprozess ist für Komponenten-INFs identisch mit regulären INFs. Weitere Informationen finden Sie unter Windows HLK Erste Schritte.

Weitere Informationen zu Setupklassen finden Sie unter Systemdefinierte Gerätesetupklassen, die für Anbieter verfügbar sind.

Weitere Informationen

INF AddComponent-Direktive

INF AddSoftware-Direktive

ABSCHNITT "INF DDInstall.Components"

ABSCHNITT "INF DDInstall.Software"