Korzystanie z pliku INF komponentu

Jeśli chcesz dołączyć oprogramowanie w trybie użytkownika do użytku z urządzeniem na Windows 10, dostępne są następujące opcje tworzenia sterownika zgodnego ze standardem DCH:

Method Scenario
Aplikacje do obsługi sprzętu (HSA) Oprogramowanie dodatku do urządzenia spakowane jako aplikacja UWP, która jest dostarczana i serwisowana z Microsoft Store. Zalecane podejście.
Składniki oprogramowania Oprogramowanie dodatkowe urządzenia jest plikiem binarnym MSI lub EXE, usługą Win32 lub oprogramowaniem zainstalowanym przy użyciu polecenia AddReg i CopyFiles. Wskazany plik binarny działa tylko w edycjach komputerowych (Home, Pro i Enterprise). Wskazany plik binarny nie zostanie uruchomiony w systemie Windows 10S.

Składnik oprogramowania to oddzielny, samodzielny pakiet sterowników, który może instalować jeden lub więcej modułów oprogramowania. Zainstalowane oprogramowanie zwiększa wartość urządzenia, ale nie jest niezbędne do podstawowej funkcjonalności urządzenia i nie wymaga skojarzonej usługi sterownika funkcjonalnego.

Ta strona zawiera wskazówki dotyczące używania komponentów oprogramowania.

Rozpoczęcie pracy

Aby utworzyć składniki, plik INF rozszerzenia określa dyrektywę INF AddComponent co najmniej raz w sekcji INF DDInstall.Components. Dla każdego składnika oprogramowania, do którego odwołuje się plik INF rozszerzenia, system tworzy wirtualne urządzenie podrzędne enumerowane przez oprogramowanie. Więcej niż jeden pakiet sterowników może odwoływać się do tego samego składnika oprogramowania.

Urządzenia podrzędne urządzenia wirtualnego można aktualizować niezależnie, tak jak każde inne urządzenie, o ile urządzenie nadrzędne zostało uruchomione. Zalecamy rozdzielenie funkcji na tyle różnych grup, ile ma sens z perspektywy obsługi, a następnie utworzenie jednego składnika oprogramowania dla każdej grupy.

Udostępnisz plik INF dla każdego składnika oprogramowania.

Jeśli składnik oprogramowania INF zawiera dyrektywę AddSoftware, składnik INF:

Możesz określić dyrektywę AddSoftware raz lub więcej razy.

Note

W przypadku korzystania z dyrektywy AddSoftware typu 2 nie jest wymagane użycie pliku INF składnika. Dyrektywę można pomyślnie użyć w dowolnym INF. Jednak należy użyć dyrektywy AddSoftware typu 1 w pliku INF składnika.

Ponadto wszystkie elementy INF (składnik lub nie) pasujące do urządzenia składnika programowego:

  • Można określać usługi użytkownika Win32 za pomocą dyrektywy AddService.
  • Można instalować oprogramowanie przy użyciu dyrektywy INF AddReg i dyrektywy INF CopyFiles.
  • Nie wymaga usługi sterownika funkcji.
  • Użytkownik może samodzielnie odinstalować z urządzenia głównego.

Przykład składnika INF można znaleźć w zestawie narzędzi instalacyjnych pakietów sterowników dla sterowników uniwersalnych.

Uwaga: Aby urządzenie będące składnikiem enumerowanym programowo mogło działać, jego element nadrzędny musi zostać uruchomiony. Jeśli dla urządzenia macierzystego nie jest dostępny żaden sterownik, deweloperzy sterowników mogą utworzyć własne sterowniki i opcjonalnie skorzystać ze sterownika pośredniczącego „umpass.sys”. Ten sterownik jest uwzględniony w Windows i w praktyce nie robi nic innego niż uruchamianie urządzenia. Aby użyć umpass.sys, deweloperzy powinni używać dyrektyw INF Include/Needs w sekcji [DDInstall.*] w każdej możliwej sekcji [DDInstall.*], do odpowiednich sekcji [UmPass.*], jak pokazano poniżej, niezależnie od tego, czy INF określa jakiekolwiek dyrektywy dla tej sekcji, czy nie:

[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

Uzyskiwanie dostępu do urządzenia ze składnika oprogramowania

Aby pobrać identyfikator instancji urządzenia powiązanego ze składnikiem oprogramowania, użyj wartości SoftwareArguments w sekcji dyrektywy INF AddSoftware wraz ze zmienną kontekstu środowiska uruchomieniowego <<DeviceInstanceID>>.

Plik wykonywalny może następnie pobrać identyfikator instancji urządzenia składnika oprogramowania z listy przekazanych argumentów.

Następnie, jeśli składnik oprogramowania jest przeznaczony dla docelowej platformy uniwersalnej, użyj następującej procedury:

  1. Wywołaj CM_Locate_DevNode przy użyciu identyfikatora wystąpienia urządzenia składnika oprogramowania, aby pobrać uchwyt urządzenia.
  2. Wywołaj CM_Get_Parent, aby pobrać uchwyt do urządzenia nadrzędnego tego urządzenia. Ten element nadrzędny jest urządzeniem, które dodało składnik oprogramowania przy użyciu dyrektywy INF AddComponent.
  3. Następnie, aby pobrać identyfikator wystąpienia urządzenia elementu nadrzędnego, wywołaj CM_Get_Device_ID na uchwycie z CM_Get_Parent.

Jeśli składnik oprogramowania jest przeznaczony tylko dla docelowej platformy Desktop, użyj następującej procedury:

  1. Wywołaj SetupDiCreateDeviceInfoList, aby utworzyć pusty zestaw informacji o urządzeniach.
  2. Wywołaj metodę SetupDiOpenDeviceInfo przy użyciu identyfikatora wystąpienia urządzenia składnika oprogramowania.
  3. Wywołaj metodę SetupDiGetDeviceProperty z użyciem DEVPKEY_Device_Parent, aby pobrać identyfikator wystąpienia urządzenia elementu nadrzędnego.

Example

W poniższym przykładzie pokazano, jak można użyć składnika oprogramowania do zainstalowania panelu sterowania przy użyciu pliku wykonywalnego dla karty graficznej.

Plik INF pakietu sterowników

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

Plik INF składnika oprogramowania

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

Proces sprawdzania poprawności i przesyłania sterownika jest taki sam w przypadku plików INF składników, jak w przypadku zwykłych plików INF. Aby uzyskać więcej informacji, zobacz Windows HLK Getting Started.

Aby uzyskać więcej informacji na temat klas konfiguracji, zobacz System-Defined Klasy konfiguracji urządzeń dostępne dla dostawców.

Zobacz także

Dyrektywa INF AddComponent

Dyrektywa INF AddSoftware

Sekcja INF DDInstall.Components

sekcji INF DDInstall.Software