Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk azt ismerteti, hogy a DCHU-illesztő minta hogyan alkalmazza a DCH tervezési alapelveit. Modellként használhatja a DCH tervezési alapelveit a saját illesztőprogram-csomagra.
Ha a mintaadattár helyi másolatát szeretné, klónozza a Windows-illesztőprogram-mintákból.
A minta egyes részei olyan irányelveket és API-kat használhatnak, amelyek csak a Windows 10 és újabb verziókban érhetők el. Az eszköz- és illesztőprogram-telepítéssel megtekintheti, hogy az adott irányelv melyik operációsrendszer-verziót támogatja.
Előfeltételek
A szakasz elolvasása előtt ismernie kell a DCH tervezési alapelveit.
Áttekintés
A minta olyan példaforgatókönyveket tartalmaz, amelyekben két hardverpartner, a Contoso (egy rendszerépítő vagy OEM) és a Fabrikam (egy eszközgyártó vagy IHV) együttműködve létrehoz egy olyan illesztőprogramot, amely megfelel a Contoso közelgő rendszerében az eszköz DCH-jének. A szóban forgó eszköz egy OSR USB FX2 oktatókészlet. Korábban a Fabrikam egy régi illesztőprogram-csomagot írt, amely egy adott Contoso terméksorra lett testre szabva, majd átadja az OEM-nek a karbantartás kezeléséhez. Ez a folyamat jelentős karbantartási többletterhelést eredményezett, ezért a Fabrikam úgy döntött, hogy újra átfésüli a kódot, és helyette létrehoz egy DCH-kompatibilis illesztőprogram-csomagot.
Deklaratív szakaszok/irányelvek használata és az INF megfelelő elkülönítése
Először a Fabrikam áttekinti a DCH-kompatibilis illesztőprogram-csomagokban érvénytelen INF-szakaszok és irányelvek listáját . Ebben a gyakorlatban a Fabrikam megfigyeli, hogy számos szakaszt és utasítást használnak az illesztőprogram-csomagban.
Az illesztőprogram INF regisztrál egy együtt-telepítőt, amely platformfüggő beállításokat és fájlokat alkalmaz. Az illesztőprogram-csomag nagyobb, mint kellene, és nehezebb kiszolgálni az illesztőprogramot, ha egy hiba csak az illesztőprogramot szállító OEM-rendszerek egy részét érinti. Az OEM-specifikus módosítások többsége a védjegyezéshez kapcsolódik. A Fabrikamnak ezért frissítenie kell az illesztőprogram-csomagot minden alkalommal, amikor oem-et adnak hozzá, vagy ha egy kisebb probléma az OEM-rendszerek egy részét érinti.
A Fabrikam eltávolítja a nem deklaratív szakaszokat és irányelveket, és az InfVerif eszközzel ellenőrzi, hogy az új illesztőprogram-csomag INF-fájlja megfelel-e a deklaratív INF-követelménynek.
Illesztőprogram-csomag összetevőinek használata bővítmény INF-ekkel
Ezután a Fabrikam az OEM-partnerekre (például a Contosora) jellemző testreszabásokat választja el az alapillesztőcsomagtól egy bővítmény INF-jében.
A(z) [osrfx2_DCHU_extension.inx] fájlból frissített következő kódrészlet megadja az Extension osztályt, és a Contoso-t azonosítja szolgáltatóként, mivel a bővítményillesztő csomag tulajdonosa:
[Version]
...
Class = Extension
ClassGuid = {e2f84ce7-8efa-411c-aa69-97454ca4cb57}
Provider = Contoso
ExtensionId = {zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz} ; replace with your own GUID
...
A [osrfx2_DCHU_base.inx]-ban a Fabrikam a következő bejegyzéseket adja meg:
[OsrFx2_AddReg]
HKR, OSR, "OperatingMode",, "Default" ; FLG_ADDREG_TYPE_SZ
HKR, OSR, "OperatingParams",, "None" ; FLG_ADDREG_TYPE_SZ
A [osrfx2_DCHU_extension.inx]-ban a Contoso felülbírálja az alap által beállított OperatingParams beállításjegyzék-értéket, és hozzáadja az OperatingExceptions értéket:
[OsrFx2Extension_AddReg]
HKR, OSR, "OperatingParams",, "-Extended"
HKR, OSR, "OperatingExceptions",, "x86"
A rendszer mindig feldolgozza a bővítményeket az alap INF után, de nem meghatározott sorrendben. Ha egy alap INF-et egy újabb verzióra frissít, akkor a rendszer az új inf alap telepítése után is alkalmazza újra a bővítményeket.
Szolgáltatás telepítése INF-fájlból
A Fabrikam egy Win32 szolgáltatással vezérli az OSR-táblán lévő LED-eket. Ezt az összetevőt az eszköz alapvető funkcióinak részeként tekintik meg, ezért az alap INF ([osrfx2_DCHU_base.inx]) részeként tartalmazzák. Ez a felhasználói módú szolgáltatás (usersvc) deklaratív módon vehető fel és indítható el az AddService direktíva megadásával az INF-fájlban:
[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
Az ilyen szolgáltatást a forgatókönyvtől függően egy összetevőben vagy bővítményben is telepítheti az INF-ben.
Régi szoftver telepítése illesztőprogram-csomagból összetevő használatával
A Fabrikam rendelkezik egy végrehajtható fájllal osrfx2_DCHU_componentsoftware.exe, amelyet korábban egy társinstaller segítségével telepítettek. Ez az örökölt szoftver megjeleníti a tábla által beállított és az OEM által igényelt beállításkulcsokat. Ez a végrehajtható alkalmazás egy GUI-alapú alkalmazás, amely csak asztali windowsos kiadásokhoz fut. A telepítéshez a Fabrikam létrehoz egy külön összetevő-illesztőprogram-csomagot, és hozzáadja azt a bővítmény INF-fájljában.
A(z) [osrfx2_DCHU_extension.inx] következő kódrészlete az AddComponent direktívát használja egy virtuális gyermekeszköz létrehozásához:
[OsrFx2Extension_Install.NT.Components]
AddComponent = osrfx2_DCHU_component,,OsrFx2Extension_ComponentInstall
[OsrFx2Extension_ComponentInstall]
ComponentIds=VID_045e&PID_94ab
Ezután az INF [osrfx2_DCHU_component.inx] összetevőben a Fabrikam megadja az AddSoftware-direktívát az opcionális végrehajtható példány telepítéséhez:
[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
A Win32-alkalmazás forráskódja szerepel a mintában.
Az összetevő-illesztőprogram-csomag csak asztali termékváltozatokon van elosztva, mert a célzás a Windows hardveres fejlesztői központ irányítópultján van megadva. További információ: Illesztőprogram közzététele a Windows Update-ben.
Kommunikáció engedélyezése hardvertámogatási alkalmazással
A Fabrikam egy GUI-alapú társalkalmazást szeretne biztosítani a Windows Driver csomag részeként. Mivel a Win32-alapú társalkalmazások nem részei a Windows-illesztőprogram-csomagoknak, a Fabrikam a Win32-alkalmazást az univerzális Windows platformra (UWP) portozza, és párosítja az alkalmazást az eszközzel.
Az alábbi kódrészlet osrfx2_DCHU_base/device.c azt mutatja be, hogy az alapillesztőcsomag hogyan ad hozzá egyéni képességet az eszközillesztő-példányhoz:
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);
Az új alkalmazás (amely nem szerepel a mintában) biztonságos, és egyszerűen frissítheti a Microsoft Store-ban. Ha az UWP-alkalmazás készen áll, a Contoso a DISM – Deployment Image Servicing and Management használatával előre betölti az alkalmazást Windows Desktop kiadású rendszerképekre.
Több INF-fájl szoros összekapcsolás
Ideális esetben erős verziószámozási szerződéseknek kell lenniük az alap, a bővítmények és az összetevők között. A három csomag egymástól függetlenül történő szervizelésének (a "lazán összekapcsolt" forgatókönyvnek) vannak karbantartási előnyei, de vannak olyan forgatókönyvek, amelyekben a nem megfelelő verziószámozási szerződések miatt egyetlen illesztőprogram-csomagban (szorosan összekapcsolva) kell csomagolni őket. A minta példákat tartalmaz mindkét forgatókönyvre:
DCHU_Sample\osrfx2_DCHU_extension_tight
Ha a bővítmény és az összetevő ugyanabban az illesztőprogram-csomagban van ("szorosan összekapcsolva"), a bővítmény INF határozza meg a CopyINF direktívát , hogy a rendszer az INF összetevőt a célrendszerbe másolja. A DCHU_Sample\osrfx2_DCHU_extension_tight\osrfx2_DCHU_extension\osrfx2_DCHU_extension.inx a következő technikát mutatja be:
[OsrFx2Extension_Install.NT]
CopyInf=osrfx2_DCHU_component.inf
Ez az irányelv az INF-fájlok többfunkciós eszközökön való telepítésének koordinálására is használható. További információ: INF-fájlok másolása.
Megjegyzés:
Bár az alapillesztő hasznosíthat egy bővítményt (és megcélozza az alapillesztőt a szállítási címkén), nem tehet közzé egy másik illesztőprogrammal csomagban lévő bővítményt a bővítmény hardverazonosítójában.
Futtatás az illesztőprogram-tárolóból
Az illesztőprogram egyszerűbb frissítése érdekében a Fabrikam az illesztőprogram-tárolót adja meg célként az illesztőprogramfájlok másolásához a 13. dirid használatával, ahol lehetséges. A célkönyvtár 13-es értékének használata jobb stabilitást eredményezhet az illesztőprogram-frissítési folyamat során. Íme egy példa a következőből: [osrfx2_DCHU_base.inx]:
[DestinationDirs]
OsrFx2_CopyFiles = 13 ; copy to driver store
Az illesztőprogram-tárolóból származó fájlok dinamikus keresésével és betöltésével kapcsolatos további információkért tekintse meg a Futtatás az illesztőprogram-tárolóból című cikket.
Összefoglalás
Az alábbi ábrán a Fabrikam és a Contoso által a DCH-kompatibilis illesztőprogramhoz létrehozott illesztőprogram-csomagok láthatók. A lazán összekapcsolt példában három külön beküldést tesznek a Windows Hardver fejlesztői központ irányítópultján: egyet az alaphoz, egyet a bővítményhez, egyet pedig az összetevőhöz. A szorosan összekapcsolt példában két beküldést tesznek: alap és bővítmény/összetevő.
Az összetevő INF-azonosítója megegyezik az összetevő hardverazonosítóján, míg az alap és a bővítmények megegyeznek a tábla hardverazonosítóján.