Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek popisuje, jak ukázka ovladače DCHU používá principy návrhu DCH. Můžete ho použít jako model k použití principů návrhu DCH na vlastní balíček ovladačů.
Pokud chcete místní kopii ukázkového úložiště, naklonujte ho z ukázek ovladačů systému Windows.
Některé části ukázky můžou používat direktivy a rozhraní API, které jsou dostupné pouze v určitých verzích Windows 10 a vyšších verzích. Informace o verzi operačního systému, na které se daná direktiva podporuje, najdete v tématu Instalace zařízení a ovladače .
Požadavky
Než si přečtete tuto část, měli byste se seznámit s principy návrhu DCH.
Přehled
Ukázka poskytuje ukázkové scénáře, kdy dva hardwarové partnery, Contoso (tvůrce systémů nebo výrobce OEM) a Fabrikam (výrobce zařízení nebo IHV) společně vytvářejí ovladač, který je kompatibilní s DCH pro zařízení v nadcházejícím systému Společnosti Contoso. Příslušné zařízení je výuková sada OSR USB FX2. V minulosti společnost Fabrikam napsala starší balíček ovladačů, který byl přizpůsobený konkrétní produktové řadě Contoso, a pak ho předal OEM, aby zvládl údržbu. Výsledkem tohoto procesu byly významné režijní náklady na údržbu, takže se společnost Fabrikam rozhodla refaktorovat kód a vytvořit místo toho balíček ovladačů kompatibilní s DCH.
Používejte deklarativní oddíly/direktivy a správně izolujte INF.
Nejprve společnost Fabrikam zkontroluje seznam oddílů a direktiv INF , které jsou neplatné v balíčcích ovladačů kompatibilních s DCH. Během tohoto cvičení si společnost Fabrikam všimne, že ve svém balíčku ovladačů používá mnoho z těchto oddílů a direktiv.
Jejich ovladač INF zaregistruje spoluinstalátor, který použije nastavení a soubory závislé na platformě. Balíček ovladačů je větší, než by měl být, a je těžší ovladač obsluhovat, když chyba ovlivní pouze podmnožinu systémů OEM, které ovladač dodávají. Většina úprav specifických pro výrobce OEM souvisí s brandingem. Společnost Fabrikam tedy musí aktualizovat balíček ovladačů pokaždé, když přidají OEM nebo když menší problém ovlivní podmnožinu systémů OEM.
Společnost Fabrikam odebere nedelarativní oddíly a direktivy a používá nástroj InfVerif k ověření, že soubor INF nového balíčku ovladače se řídí deklarativním požadavkem INF.
Použití rozšíření INFS ke komponentizaci balíčku ovladače
Společnost Fabrikam dále odděluje vlastní nastavení specifická pro partnery OEM (například Contoso) od základního balíčku ovladačů do rozšíření INF.
Následující fragment kódu aktualizovaný z [osrfx2_DCHU_extension.inx], určuje Extension třídu a identifikuje společnost Contoso jako poskytovatele, protože vlastní balíček ovladače rozšíření:
[Version]
...
Class = Extension
ClassGuid = {e2f84ce7-8efa-411c-aa69-97454ca4cb57}
Provider = Contoso
ExtensionId = {zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz} ; replace with your own GUID
...
V [osrfx2_DCHU_base.inx], Fabrikam určuje následující položky:
[OsrFx2_AddReg]
HKR, OSR, "OperatingMode",, "Default" ; FLG_ADDREG_TYPE_SZ
HKR, OSR, "OperatingParams",, "None" ; FLG_ADDREG_TYPE_SZ
V [osrfx2_DCHU_extension.inx] Contoso přepíše hodnotu registru OperatingParams nastavenou základem a přidá OperatingExceptions:
[OsrFx2Extension_AddReg]
HKR, OSR, "OperatingParams",, "-Extended"
HKR, OSR, "OperatingExceptions",, "x86"
Systém vždy zpracovává rozšíření po základní INF, ale v žádném konkrétním pořadí. Pokud aktualizujete základní inf na novější verzi, systém po instalaci nové základní inf znovu nainstaluje rozšíření.
Instalace služby ze souboru INF
Společnost Fabrikam používá službu Win32 k řízení LED na desce OSR. Tuto komponentu považují za součást základní funkčnosti zařízení, takže ji zahrnou jako součást jejich základní INF ([osrfx2_DCHU_base.inx]). Tuto službu v uživatelském režimu (usersvc) lze přidat a spustit deklarativní zadáním direktivy AddService v souboru 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
Takovou službu můžete nainstalovat také v komponentě nebo rozšíření INF v závislosti na scénáři.
Použití komponenty k instalaci starší verze softwaru z balíčku ovladače
Fabrikam má spustitelný soubor osrfx2_DCHU_componentsoftware.exe , který předtím nainstaloval pomocí spoluinstalátoru. Tento starší software zobrazuje klíče registru nastavené deskou a vyžadované výrobcem OEM. Tento spustitelný soubor je aplikace založená na grafickém uživatelském rozhraní, která běží jenom ve Windows pro desktopové edice. Pokud ho chcete nainstalovat, vytvoří Fabrikam samostatný balíček ovladače komponenty a přidá ho do rozšíření INF.
Následující fragment kódu z [osrfx2_DCHU_extension.inx] používá direktivu AddComponent k vytvoření virtuálního podřízeného zařízení:
[OsrFx2Extension_Install.NT.Components]
AddComponent = osrfx2_DCHU_component,,OsrFx2Extension_ComponentInstall
[OsrFx2Extension_ComponentInstall]
ComponentIds=VID_045e&PID_94ab
Pak v komponentě INF [osrfx2_DCHU_component.inx], Fabrikam určuje direktivu AddSoftware pro instalaci volitelného spustitelného souboru:
[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
Zdrojový kód aplikace Win32 je součástí ukázky.
Balíček ovladače komponenty se distribuuje pouze ve variantách pro desktop díky nastavení na řídicím panelu Windows Hardware Dev Center. Další informace najdete v tématu Publikování ovladače ve službě Windows Update.
Povolení komunikace s aplikací podpory hardwaru
Společnost Fabrikam by chtěla poskytnout doprovodnou aplikaci založenou na grafickém uživatelském rozhraní jako součást balíčku ovladače systému Windows. Vzhledem k tomu, že doprovodné aplikace založené na Win32 nemůžou být součástí balíčku ovladače systému Windows, společnost Fabrikam portuje svou aplikaci Win32 na univerzální platformu Windows (UPW) a spáruje aplikaci se zařízením.
Následující fragment kódu z osrfx2_DCHU_base/device.c ukazuje, jak balíček základního ovladače přidá do instance rozhraní zařízení vlastní funkci.
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);
Nová aplikace (není součástí ukázky) je zabezpečená a můžete ji snadno aktualizovat v Microsoft Storu. Společnost Contoso používá DISM – Deployment Image Servicing and Management k předběžnému načtení aplikace na bitové kopie Windows Desktop edice, nyní když je její aplikace pro UWP připravena.
Těsné párování více souborů INF
V ideálním případě by měly existovat kontrakty silné správy verzí mezi základnou, rozšířeními a komponentami. Existují výhody údržby v tom, že se tyto tři balíčky obsluhují nezávisle (scénář "volně propojených"), ale existují scénáře, kdy je potřeba je sbalit do jednoho balíčku ovladačů ("úzce svázané") kvůli špatným kontraktům správy verzí. Ukázka obsahuje příklady obou scénářů:
DCHU_Sample\osrfx2_DCHU_extension_tight
Pokud jsou rozšíření a komponenta ve stejném balíčku ovladačů ("úzce svázané"), INF rozšíření určuje direktiva CopyINF tak, aby systém zkopíroval komponentu INF do cílového systému. DCHU_Sample\osrfx2_DCHU_extension_tight\osrfx2_DCHU_extension\osrfx2_DCHU_extension.inx ukazuje tuto techniku:
[OsrFx2Extension_Install.NT]
CopyInf=osrfx2_DCHU_component.inf
Tuto direktivu můžete také použít ke koordinaci instalace souborů INF v multifunkčních zařízeních. Další informace naleznete v tématu Kopírování souborů INF.
Poznámka:
I když základní ovladač může přenášet rozšíření (a cílit na základní ovladač prostřednictvím expedičního štítku), nemůžete publikovat rozšíření zabalené s jiným ovladačem do ID hardwaru rozšíření.
Spustit z úložiště ovladačů
Aby společnost Fabrikam usnadnila aktualizaci ovladače, určuje úložiště ovladačů jako cíl pro kopírování souborů ovladačů pomocí dirid 13 pokud je to možné. Použití hodnoty cílového adresáře 13 může vést ke zlepšení stability během procesu aktualizace ovladače. Tady je příklad z [osrfx2_DCHU_base.inx]:
[DestinationDirs]
OsrFx2_CopyFiles = 13 ; copy to driver store
Další informace o tom, jak dynamicky vyhledávat a načítat soubory z úložiště ovladačů, najdete v článku Spustit z úložiště ovladačů .
Shrnutí
Následující diagram znázorňuje balíčky ovladačů, které společnost Fabrikam a Contoso vytvořily pro ovladač kompatibilní s DCH. V příkladu volného propojení provedou tři samostatná podání na řídicím panelu Windows Hardware Dev Center: jedno pro základ, jedno pro rozšíření a jedno pro komponentu. V úzce propojeném příkladu dělají dvě odeslání: základ a rozšíření nebo komponentu.
Komponenta INF se shoduje s ID hardwaru komponenty, zatímco základ a rozšíření se shodují s ID hardwaru desky.