Példa DCH-kompatibilis illesztőprogram-csomagra

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:

[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ő.

Képernyőkép egy diagramról, amely a bővítmények, az alap- és az összetevő-illesztőcsomagok közötti kapcsolatokat mutatja lazán összekapcsolt és szorosan összekapcsolt forgatókönyvekben.

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.

Lásd még