Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule opisano sposób, w jaki przykładowy sterownik DCHU stosuje zasady projektowania DCH. Można go użyć jako modelu, aby zastosować zasady projektowania DCH do własnego pakietu sterowników.
Jeśli chcesz utworzyć lokalną kopię przykładowego repozytorium, sklonuj z Windows-driver-samples.
Niektóre części przykładu mogą używać dyrektyw i interfejsów API, które są dostępne tylko w niektórych wersjach systemu Windows 10 i nowszych. Zapoznaj się z tematem Device and Driver Installation (Instalacja urządzeń i sterowników ), aby zobaczyć, w jakiej wersji systemu operacyjnego jest obsługiwana dana dyrektywa.
Wymagania wstępne
Przed przeczytaniem tej sekcji należy zapoznać się z zasadami projektowania DCH.
Przegląd
Przykładowe scenariusze ukazują, jak dwaj partnerzy sprzętowi, Contoso (konstruktor systemu lub OEM) i Fabrikam (producent urządzenia lub IHV), współpracują, aby stworzyć sterownik kompatybilny z DCH dla systemu, który firma Contoso wkrótce wprowadzi. Urządzenie, o których mowa, to zestaw szkoleniowy OSR USB FX2. W przeszłości firma Fabrikam napisała starszy pakiet sterowników dostosowany do określonej linii produktowej Contoso, a następnie przekazała go producentowi OEM w celu obsługi. Ten proces spowodował znaczne obciążenie związane z konserwacją, dlatego Fabrikam zdecydowała się refaktoryzować kod i utworzyć zamiast tego pakiet sterowników zgodny ze standardem DCH.
Użycie deklaratywnych sekcji/dyrektyw i prawidłowego izolowania INF
Najpierw firma Fabrikam przegląda listę sekcji i dyrektyw INF , które są nieprawidłowe w pakietach sterowników zgodnych ze standardem DCH. W tym ćwiczeniu firma Fabrikam zauważa, że używa wielu z tych sekcji i dyrektyw w pakiecie sterowników.
Sterownik INF rejestruje coinstaller, który stosuje ustawienia i pliki zależne od platformy. Pakiet sterowników jest większy niż powinien być i trudniej jest obsłużyć sterownik, gdy usterka ma wpływ tylko na podzbiór systemów OEM, które wysyłają sterownik. Większość modyfikacji specyficznych dla producenta OEM jest związana z znakowaniem. Dlatego firma Fabrikam musi aktualizować pakiet sterowników za każdym razem, gdy dodaje producenta OEM lub gdy drobny problem ma wpływ na podzbiór systemów OEM.
Firma Fabrikam usuwa sekcje i dyrektywy niedeklaratywne oraz używa narzędzia InfVerif, aby sprawdzić, czy plik INF nowego pakietu sterowników spełnia wymóg deklaratywnego INF.
Używanie rozszerzeń INFs do skomponentowania pakietu sterowników
Następnie firma Fabrikam oddziela dostosowania, które są specyficzne dla partnerów OEM (takich jak Contoso), od podstawowego pakietu sterowników i umieszcza je w rozszerzeniu INF.
Poniższy fragment kodu, zaktualizowany z [osrfx2_DCHU_extension.inx], określa klasę Extension i identyfikuje firmę Contoso jako dostawcę, ponieważ jest właścicielem pakietu sterownika rozszerzenia:
[Version]
...
Class = Extension
ClassGuid = {e2f84ce7-8efa-411c-aa69-97454ca4cb57}
Provider = Contoso
ExtensionId = {zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz} ; replace with your own GUID
...
W pliku [osrfx2_DCHU_base.inx], Fabrikam określa następujące wpisy:
[OsrFx2_AddReg]
HKR, OSR, "OperatingMode",, "Default" ; FLG_ADDREG_TYPE_SZ
HKR, OSR, "OperatingParams",, "None" ; FLG_ADDREG_TYPE_SZ
W lokalizacji [osrfx2_DCHU_extension.inx], firma Contoso zastępuje wartość rejestru OperatingParams ustawioną przez bazę i dodaje wyjątek OperatingExceptions:
[OsrFx2Extension_AddReg]
HKR, OSR, "OperatingParams",, "-Extended"
HKR, OSR, "OperatingExceptions",, "x86"
System zawsze przetwarza rozszerzenia po podstawowym INF, ale w nieokreślonej kolejności. Jeśli zaktualizujesz podstawową wersję INF do nowszej wersji, system będzie nadal ponownie korzystać z rozszerzeń po zainstalowaniu nowej podstawowej funkcji INF.
Instalowanie usługi z pliku INF
Firma Fabrikam używa usługi Win32 do kontrolowania diod LED na tablicy OSR. Traktują ten składnik jako część głównej funkcjonalności urządzenia, więc dołączają go jako część swojego podstawowego INF ([osrfx2_DCHU_base.inx]). Tę usługę trybu użytkownika (usersvc) można dodać i uruchomić deklaratywnie, określając dyrektywę AddService w pliku INF:
[OsrFx2_Install.NT]
CopyFiles = OsrFx2_CopyFiles
[OsrFx2_Install.NT.Services]
AddService = WUDFRd, 0x000001fa, WUDFRD_ServiceInstall ; Flag 0x2 sets this as the service for the device
AddService = osrfx2_DCHU_usersvc,, UserSvc_ServiceInstall
[UserSvc_ServiceInstall]
DisplayName = %UserSvcDisplayName%
ServiceType = 0x10 ; SERVICE_WIN32_OWN_PROCESS
StartType = 0x3 ; SERVICE_DEMAND_START
ErrorControl = 0x1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %13%\osrfx2_DCHU_usersvc.exe
AddTrigger = UserSvc_AddTrigger ; AddTrigger syntax is only available in Windows 10 Version 2004 and above
[UserSvc_AddTrigger]
TriggerType = 1 ; SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL
Action = 1 ; SERVICE_TRIGGER_ACTION_SERVICE_START
SubType = %GUID_DEVINTERFACE_OSRFX2% ; Interface GUID
DataItem = 2, "USB\VID_0547&PID_1002" ; SERVICE_TRIGGER_DATA_TYPE_STRING
[OsrFx2_CopyFiles]
osrfx2_DCHU_base.dll
osrfx2_DCHU_filter.dll
osrfx2_DCHU_usersvc.exe
Taką usługę można również zainstalować w składniku lub rozszerzeniu INF, w zależności od scenariusza.
Użyj komponentu do instalacji starszego oprogramowania z pakietu sterowników
Firma Fabrikam ma plik wykonywalny osrfx2_DCHU_componentsoftware.exe, który został wcześniej zainstalowany przy pomocy współinstalatora. To starsze oprogramowanie wyświetla klucze rejestru ustawione przez płytę i wymagane przez producenta OEM. Ten plik wykonywalny jest aplikacją opartą na graficznym interfejsie użytkownika, która działa tylko w systemie Windows na edycjach komputerów stacjonarnych. Aby go zainstalować, Fabrikam tworzy oddzielny pakiet sterownika komponentu i dodaje go do ich rozszerzenia INF.
Poniższy fragment kodu z [osrfx2_DCHU_extension.inx] używa dyrektywy AddComponent w celu utworzenia wirtualnego urządzenia podrzędnego:
[OsrFx2Extension_Install.NT.Components]
AddComponent = osrfx2_DCHU_component,,OsrFx2Extension_ComponentInstall
[OsrFx2Extension_ComponentInstall]
ComponentIds=VID_045e&PID_94ab
Następnie w składniku INF [osrfx2_DCHU_component.inx], Fabrikam określa dyrektywę AddSoftware , aby zainstalować opcjonalny plik wykonywalny:
[OsrFx2Component_Install.NT.Software]
AddSoftware = osrfx2_DCHU_componentsoftware,, OsrFx2Component_SoftwareInstall
[OsrFx2Component_SoftwareInstall]
SoftwareType = 1
SoftwareBinary = osrfx2_DCHU_componentsoftware.exe
SoftwareArguments = <<DeviceInstanceId>>
SoftwareVersion = 1.0.0.0
[OsrFx2Component_CopyFiles]
osrfx2_DCHU_componentsoftware.exe
Kod źródłowy aplikacji Win32 znajduje się w przykładzie.
Pakiet sterowników składników jest dystrybuowany tylko w wersjach desktopowych SKU z powodu ustawień docelowych skonfigurowanych w pulpicie nawigacyjnym Centrum deweloperów sprzętu Windows. Aby uzyskać więcej informacji, zobacz Publikowanie sterownika w usłudze Windows Update.
Zezwalaj na komunikację z aplikacją do obsługi sprzętu
Fabrikam chce udostępnić aplikację towarzyszącą opartą na graficznym interfejsie użytkownika w ramach pakietu sterowników systemu Windows. Ponieważ aplikacje towarzyszące oparte na systemie Win32 nie mogą być częścią pakietu sterowników systemu Windows, firma Fabrikam portuje aplikację Win32 do platformy uniwersalnej systemu Windows (UWP) i paruje aplikację z urządzeniem.
Poniższy fragment kodu osrfx2_DCHU_base/device.c, pokazuje, w jaki sposób pakiet sterownika podstawowego dodaje niestandardową możliwość do wystąpienia interfejsu urządzenia.
WDF_DEVICE_INTERFACE_PROPERTY_DATA PropertyData = { 0 };
static const wchar_t customCapabilities[] = L"CompanyName.yourCustomCapabilityName_YourStorePubId\0";
WDF_DEVICE_INTERFACE_PROPERTY_DATA_INIT(&PropertyData,
&GUID_DEVINTERFACE_OSRUSBFX2,
&DEVPKEY_DeviceInterface_UnrestrictedAppCapabilities);
Status = WdfDeviceAssignInterfaceProperty(Device,
&PropertyData,
DEVPROP_TYPE_STRING_LIST,
sizeof(customCapabilities),
(PVOID)customCapabilities);
Nowa aplikacja (nieuwzględniana w przykładzie) jest bezpieczna i można ją łatwo zaktualizować w sklepie Microsoft Store. Gdy aplikacja UWP jest gotowa, firma Contoso używa narzędzia DISM — obsługa obrazów wdrażania i zarządzanie nimi, aby wstępnie załadować aplikację na obrazach wydania Desktop systemu Windows.
Ściśle sprzężenie wielu plików INF
Najlepiej, aby między podstawowymi, rozszerzeniami i składnikami istniały silne kontrakty przechowywania wersji. Istnieją korzyści związane z obsługą tych trzech pakietów obsługiwanych niezależnie (scenariusz "luźno powiązany"), ale istnieją scenariusze, w których muszą być one powiązane w jednym pakiecie sterowników ("ściśle powiązane") ze względu na słabe kontrakty obsługi wersji. Przykład zawiera przykłady obu scenariuszy:
DCHU_Sample\osrfx2_DCHU_extension_tight
Gdy rozszerzenie i składnik znajdują się w tym samym pakiecie sterowników ("ściśle powiązane"), rozszerzenie INF określa dyrektywę CopyINF , tak aby system kopiuje składnik INF do systemu docelowego. DCHU_Sample\osrfx2_DCHU_extension_tight\osrfx2_DCHU_extension\osrfx2_DCHU_extension.inx pokazuje tę technikę:
[OsrFx2Extension_Install.NT]
CopyInf=osrfx2_DCHU_component.inf
Tę dyrektywę można również użyć do koordynowania instalacji plików INF na urządzeniach wielofunkcyjnych. Aby uzyskać więcej informacji, zobacz Kopiowanie plików INF.
Uwaga / Notatka
Sterownik podstawowy może ładować rozszerzenie (i kierować go do sterownika podstawowego na etykiecie wysyłkowej), ale nie można opublikować rozszerzenia powiązanego z innym sterownikiem do identyfikatora sprzętu rozszerzenia.
Uruchamianie z magazynu sterowników
Aby ułatwić aktualizowanie sterownika, firma Fabrikam określa magazyn sterowników jako miejsce docelowe, aby skopiować pliki sterowników przy użyciu dirid 13 tam, gdzie to możliwe. Użycie wartości katalogu docelowego 13 może spowodować lepszą stabilność podczas procesu aktualizacji sterownika. Oto przykład z witryny [osrfx2_DCHU_base.inx]:
[DestinationDirs]
OsrFx2_CopyFiles = 13 ; copy to driver store
Aby uzyskać więcej informacji na temat dynamicznego znajdowania i ładowania plików z magazynu sterowników, zobacz artykuł Run from Driver Store (Uruchamianie z magazynu sterowników ).
Podsumowanie
Na poniższym diagramie przedstawiono pakiety sterowników utworzone przez firmę Fabrikam i firmę Contoso dla sterownika zgodnego ze standardem DCH. W luźno powiązanym przykładzie dokonują trzech oddzielnych zgłoszeń na pulpicie nawigacyjnym centrum deweloperów sprzętu systemu Windows: jedno dla bazy, jedno dla rozszerzenia i jedno dla składnika. W ściśle powiązanym przykładzie robią dwa zgłoszenia: bazowe i rozszerzenie/składnik.
Składnik INF jest zgodny z identyfikatorem sprzętu składnika, natomiast podstawa i rozszerzenia są zgodne z identyfikatorem sprzętu płyty.