Megosztás:


Illesztőprogram-csomag elkülönítése

Az illesztőprogram-csomagok elkülönítése olyan követelmény a Windows-illesztőprogramok számára, amely rugalmasabbá teszi az illesztőprogram-csomagokat a külső módosításokkal szemben, egyszerűbben frissíthető és egyszerűbben telepíthető.

Megjegyzés:

Bár az illesztőprogram-csomag elkülönítése szükséges a Windows-illesztőprogramok esetében, a Windows asztali illesztőprogramok továbbra is kihasználják azt a jobb rugalmasság és használhatóság révén.

Az alábbi táblázat néhány korábbi illesztőprogram-csomagra vonatkozó példát mutat be, amelyek a bal oldali oszlopban már nem engedélyezettek a Windows-illesztőprogramok számára, valamint a windowsos illesztőprogramok megfelelő viselkedését a jobb oldali oszlopban.

Nem izolált illesztőprogram Izolált illesztőprogram
Az INF fájlokat másol a %windir%\System32 vagy %windir%\System32\drivers fájlba Az illesztőprogram-fájlok az illesztőprogram-tárolóból futnak
Az eszközveremekkel/illesztőprogramokkal való interakció kódban rögzített elérési utak használatával A rendszer által biztosított függvények vagy eszközillesztők használatával kommunikál az eszközveremekkel/illesztőprogramokkal
Beágyazza a globális beállításjegyzék helyeinek elérési útját HKR-t és rendszer által biztosított függvényeket használ a beállításjegyzék és a fájlállapot relatív helyéhez
Futás közben fájl bármely helyre történő írása A fájlok írása az operációs rendszer által biztosított helyekhez képest történik

Ha segítségre van szüksége annak meghatározásához, hogy az illesztőprogram-csomag megfelel-e az illesztőprogram-csomag elkülönítési követelményeinek, olvassa el a Windows-illesztőprogramok érvényesítése című témakört. Példák az INF frissítésére az illesztőprogram-csomag elkülönítési követelményeinek való megfelelés érdekében, lásd : INF portolása az illesztőprogram-csomagok elkülönítésének követéséhez.

Futtatás az illesztőprogram-tárolóból

Az összes izolált illesztőprogram-csomag fájljai az illesztőprogram-tárolóban maradnak. Ez azt jelenti, hogy az INF-ben megadják a DIRID 13-at , hogy megadják az illesztőprogram-csomagfájlok helyét a telepítéskor. További információ arról, hogyan használható ez egy illesztőprogram-csomagban: Futtatás az illesztőprogram-tárolóból.

Olvasási és írási állapot

Megjegyzés:

Ha az összetevő eszköz- vagy eszközillesztő-tulajdonságokat használ az állapot tárolásához, használja továbbra is ezt a metódust és a megfelelő OPERÁCIÓS API-t az állapot tárolásához és eléréséhez. A beállításjegyzékre és a fájlállapotra vonatkozó alábbi útmutató olyan más állapotokra érvényes, amelyeket egy összetevőnek kell tárolnia.

A különböző beállításjegyzék- és fájlállapotokhoz való hozzáférést olyan függvények meghívásával kell elvégezni, amelyek biztosítják a hívó számára az állapot helyét, majd az állapot az adott helyhez képest olvasásra/írásra kerül. Ne használjon keménykódolt abszolút beállításjegyzék-elérési utakat és fájlelérési utakat.

Ez a szakasz a következő alszakaszokat tartalmazza:

Regisztrációs állapot

Ez a szakasz a következő alszakaszokat tartalmazza:

PnP-eszközregisztrációs adatbázis állapota

Az elkülönített illesztőprogram-csomagok és a felhasználói módú összetevők általában két hely egyikét használják az eszközállapot beállításjegyzékben való tárolására. Ezek az eszköz hardverkulcsa (eszközkulcs) és az eszköz szoftverkulcsa (illesztőprogram-kulcs). A hardverkulcs általában az egyes eszközpéldányok hardverrel való interakciójával kapcsolatos beállításokhoz használható. Például egy hardverfunkció engedélyezéséhez vagy a hardver egy adott módba helyezéséhez. A szoftverkulcs általában az egyes eszközpéldányok rendszer- és egyéb szoftverhasználatával kapcsolatos beállításokhoz használható. Például egy adatfájl helyének konfigurálásához, egy keretrendszerrel való együttműködéshez vagy egy eszköz alkalmazásbeállításainak eléréséhez. Ha hozzáférést szeretne szerezni a beállításjegyzék helyeihez, használja az alábbi lehetőségek egyikét:

[ExampleDDInstall.HW]
AddReg = Example_DDInstall.AddReg

[Example_DDInstall.AddReg] 
HKR,,ExampleValue,,%13%\ExampleFile.dll

Eszközillesztő beállításjegyzék-állapota

Az eszköz felületének beállításjegyzék-állapotának olvasásához és írásához használja az alábbi lehetőségek egyikét:

Szolgáltatásregisztrációs adatbázis állapota

A szolgáltatás állapotát a 3 kategória egyikébe kell besorolni

Nem módosítható szolgáltatásregisztrációs adatbázis állapota

A nem módosítható szolgáltatás állapota a szolgáltatást telepítő illesztőprogram-csomag által biztosított állapot. Ezeket az adatbázis-értékeket, amelyeket az INF állít be az illesztőprogramokhoz és a Win32-szolgáltatásokhoz, a szolgáltatás "Paraméterek" alkulcsában kell tárolni, egy HKR-sort megadva az AddReg szakaszban, majd a szakaszra hivatkozni kell az INF szolgáltatástelepítési szakaszában. Például:

[ExampleDDInstall.Services]
Addservice = ExampleService, 0x2, Example_Service_Inst

[Example_Service_Inst]
DisplayName    = %ExampleService.SvcDesc%
ServiceType    = 1
StartType      = 3
ErrorControl   = 1
ServiceBinary  = %13%\ExampleService.sys
AddReg=Example_Service_Inst.AddReg

[Example_Service_Inst.AddReg]
HKR, Parameters, ExampleValue, 0x00010001, 1

Ha futásidőben szeretné elérni ennek az állapotnak a helyét a szolgáltatásból, használja az alábbi függvények egyikét:

A szolgáltatás "Paraméterek" alkulcsában az INF által megadott beállításjegyzék-értékek csak futásidőben olvashatók, és nem módosíthatók. Ezeket csak olvasható adattárként kell kezelni.

Ha az INF által megadott beállításjegyzék-értékek olyan alapértelmezett beállítások, amelyek futásidőben felülírhatók, a felülbírálási értékeket a szolgáltatás belső szolgáltatásregisztrációs vagymegosztottszolgáltatás-beállításjegyzék-állapotába kell írni. A beállítások beolvasásakor a beállítás elsőként kereshető meg a mutable állapotban. Ha nem létezik, akkor a beállítás nem módosítható állapotban kereshető. Az RtlQueryRegistryValueWithFallback használható olyan beállítások lekérdezésére, amelyek felülbírálási és alapértelmezett értékkel rendelkeznek.

Belső szolgáltatásregisztrációs adatbázis állapota

A belső szolgáltatás állapota olyan állapot, amely futásidőben íródott, és csak maga a szolgáltatás birtokolja és kezeli, és csak az adott szolgáltatás számára érhető el. A belső szolgáltatásállapot helyének eléréséhez használja az alábbi függvények egyikét a szolgáltatásból:

Ha a szolgáltatás más összetevőknek is engedélyezni szeretné ezeket a beállításokat, a szolgáltatásnak közzé kell tennie egy olyan felületet, amelybe egy másik összetevő be tud hívni, amely tájékoztatja a szolgáltatást a beállítások módosításáról. Egy Win32-szolgáltatás például közzétehet egy COM- vagy RPC-felületet, az illesztőprogram-szolgáltatás pedig egy IOCTL-felületet tehet közzé egy eszközillesztőn keresztül.

Megosztott szolgáltatás beállításjegyzékének állapota

A megosztott szolgáltatás állapota futásidőben íródott állapot, és más felhasználói módú összetevőkkel is megosztható, ha megfelelő jogosultsággal rendelkeznek. A megosztott szolgáltatásállapot helyének eléréséhez használja az alábbi függvények egyikét:

Fájlállapot

Ez a szakasz a következő alszakaszokat tartalmazza:

Eszközfájl állapota

Ha az eszközhöz kapcsolódó fájlokat futásidőben kell írni, ezeket a fájlokat az operációs rendszer API-ján keresztül megadott leíróhoz vagy elérési úthoz viszonyítva kell tárolni. Az adott eszközre vonatkozó konfigurációs fájlok az egyik példa arra, hogy milyen típusú fájlokat kell itt tárolni. Az állapot helyének eléréséhez használja az alábbi függvények egyikét a szolgáltatásból:

Szolgáltatásfájl állapota

A szolgáltatásfájl állapota a 3 kategória egyikébe sorolható

Nem módosítható szolgáltatásfájl állapota

A nem módosítható szolgáltatásfájlok azok a fájlok, amelyek az illesztőprogram-csomag részét képezik. A fájlok elérésével kapcsolatos további információkért lásd: Futtatás az Illesztőprogram-tárolóból.

Belső szolgáltatásfájl állapota

A belső szolgáltatásfájl állapota olyan állapot, amely futásidőben van megírva, és csak maga a szolgáltatás birtokolja és kezeli, és csak az adott szolgáltatás számára érhető el. A belső szolgáltatásállapot helyének eléréséhez használja az alábbi függvények egyikét a szolgáltatásból:

Ha a szolgáltatás más összetevőknek is engedélyezni szeretné ezeket a beállításokat, a szolgáltatásnak közzé kell tennie egy olyan felületet, amelybe egy másik összetevő be tud hívni, amely tájékoztatja a szolgáltatást a beállítások módosításáról. Egy Win32-szolgáltatás például közzétehet egy COM- vagy RPC-felületet, az illesztőprogram-szolgáltatás pedig egy IOCTL-felületet tehet közzé egy eszközillesztőn keresztül.

Megosztott szolgáltatás fájlállapota

A megosztott szolgáltatásfájl állapota futásidőben íródott állapot, és más felhasználói módú összetevőkkel is megosztható, ha megfelelő jogosultsággal rendelkeznek. A megosztott szolgáltatásállapot helyének eléréséhez használja az alábbi függvények egyikét:

  • IoGetDriverDirectory (WDM, KMDF) a DirectoryType paraméterrel beállítva a DriverDirectorySharedData értékre

  • GetSharedServiceDirectory (Win32 Services) a DirectoryType paraméter ServiceSharedDirectoryPersistentState értékre állítva

DriverData és ProgramData

A más összetevőkkel megosztható, de a megosztott szolgáltatásfájl-állapot kategóriájába nem illeszkedő fájlok vagy DriverDataProgramData helyekre írhatók.

Az ezekben a helyszínekben az összetevők ideiglenes állapot tárolására vagy más összetevők által felhasználásra szánt állapot rögzítésére szolgálnak, amelyeket egyik rendszerből összegyűjthetnek és egy másik rendszer által feldolgozásra másolhatnak. Az egyéni naplófájlok vagy összeomlási memóriaképek például megfelelnek ennek a leírásnak.

Kerülje a fájlok írását a DriverData vagy a ProgramData könyvtárak gyökerébe. Ehelyett hozzon létre egy alkönyvtárat a cég nevével, majd írjon fájlokat és további alkönyvtárakat az adott könyvtárban.

A Contoso cégnév esetében például a kernel módú illesztőprogramok egyéni naplókat írhatnak \DriverData\Contoso\Logs , és egy felhasználói módú alkalmazás összegyűjtheti vagy elemezheti a naplófájlokat %DriverData%\Contoso\Logs.

IllesztőprogramAdatok

A DriverData címtár a Windows 10 1803-es és újabb verzióiban érhető el, és a rendszergazdák és az UMDF-illesztőprogramok számára is elérhető.

A kernel módú illesztőprogramok egy DriverData rendszer által biztosított szimbolikus hivatkozással, a \DriverData könyvtárhoz férnek hozzá.

A felhasználói módú programok a DriverData környezeti változó %DriverData%használatával érik el a könyvtárat.

ProgramData

A %ProgramData% felhasználói módú környezeti változó az adatok tárolásakor használható felhasználói módú összetevők számára érhető el.

Ideiglenes fájlok

Az ideiglenes fájlokat általában köztes műveletekben használják. Ezek egy alútvonalra írhatók a %TEMP%%TMP% környezeti változók alatt. Mivel ezek a helyek környezeti változókon keresztül érhetők el, ez a képesség csak felhasználói módú összetevőkre korlátozódik. Az ideiglenes fájlok élettartamára vagy megőrzésére nincs garancia, miután a hozzájuk tartozó kezelők lezárásra kerültek. Az operációs rendszer vagy a felhasználó bármikor eltávolíthatja őket, és előfordulhat, hogy nem maradnak fenn az újraindítás során.

Kerülje el, hogy fájlokat írjon a %TEMP% vagy a %TMP% könyvtárak gyökérkönyvtárába. Ehelyett hozzon létre egy alkönyvtárat a cég nevével, majd írjon fájlokat és további alkönyvtárakat az adott könyvtárban.

Tulajdonság állapota

Az eszközök és az eszközillesztők egyaránt támogatják az állapot PnP tulajdonságmodellen keresztüli tárolását. A tulajdonságmodell lehetővé teszi a strukturált tulajdonságadatok eszköz- vagy eszközillesztőn való tárolását. Ez a tulajdonságmodell által támogatott tulajdonságtípusokhoz ésszerűen illeszkedő kisebb adatokhoz készült.

Az eszköztulajdonságok eléréséhez az alábbi API-k használhatók:

Az eszközillesztő tulajdonságainak eléréséhez az alábbi API-k használhatók:

Eszközillesztők használata

Ha egy illesztő engedélyezni szeretné más összetevők számára az illesztőprogram belső állapotának olvasását vagy módosítását, az illesztőnek olyan felületet kell elérhetővé tennie, amelybe egy másik összetevő meghívhat, amely tájékoztatja az illesztőprogramot arról, hogy milyen beállításokat adjon vissza, vagy hogyan módosítsa az adott beállításokat. Az illesztőprogram-szolgáltatás például egy IOCTL-felületet tehet közzé egy eszközillesztőn keresztül.

Az állapotot birtokló illesztőprogram általában egy eszközfelületet hoz létre egy egyéni eszközfelület-osztályban. Ha az illesztő készen áll arra, hogy más összetevők hozzáférjenek az állapothoz, engedélyezi a felületet. Ha értesítést szeretne kapni az eszközfelület engedélyezéséről, a felhasználói mód összetevői regisztrálhatnak az eszközfelület érkezési értesítéseire , a kernel mód összetevői pedig használhatják az IoRegisterPlugPlayNotification parancsot. Ahhoz, hogy ezek az összetevők hozzáférjenek az állapothoz, a felületet engedélyező illesztőprogramnak szerződést kell meghatároznia az egyedi eszköz-interfész osztályához. Ez a szerződés általában két típus egyike:

  • I/O-szerződés társítható az eszköz interfészosztályához, amely mechanizmust biztosít az állapot elérésére. Más összetevők az engedélyezett eszközfelület használatával küldenek olyan I/O-kéréseket, amelyek megfelelnek a szerződésnek.

  • Egy közvetlen hívófelület, amely egy lekérdezési felületen keresztül lesz visszaadva. Más illesztőprogramok IRP_MN_QUERY_INTERFACE küldhetnek, hogy függvénymutatókat kérjenek le az illesztőprogramtól a híváshoz.

Másik lehetőségként, ha az állapotot birtokban lévő illesztőprogram közvetlen hozzáférést biztosít az állapothoz, más illesztőprogramok a rendszer által biztosított függvényekkel férhetnek hozzá az állapothoz az eszköz interfészállapotához való programozott hozzáféréshez. További információt az Eszközillesztő beállításjegyzék-állapota című témakörben talál.

Ezeket az interfészeket vagy állapotokat (a használt megosztási módszertől függően) megfelelően kell verziószámolni, hogy az állapotot tulajdonoló illesztőprogram az adott állapothoz hozzáférő többi összetevőtől függetlenül is kiszolgálható legyen. Az illesztőprogram-szállítók nem támaszkodhatnak arra, hogy az illesztőprogramtal egy időben más összetevőket is kiszolgálnak, és ugyanabban a verzióban maradnak.

Mivel az illesztőket vezérlő eszközök és illesztőprogramok jönnek és mennek, az illesztőprogramoknak és az alkalmazásoknak kerülnie kell az IoGetDeviceInterfaces meghívását az összetevők indításakor az engedélyezett felületek listájának lekéréséhez. Ehelyett ajánlott regisztrálni az eszköz felületének érkezéséről vagy eltávolításáról szóló értesítésekre, majd meghívni a megfelelő függvényt, hogy lekérje a meglévő engedélyezett interfészek listáját a gépen.

További információ az eszközillesztőkről:

Az operációs rendszer állapotkezelési API-khoz való támogatásának rövid leírása

A legtöbb illesztőprogram-csomagnak számos operációsrendszer-verziót kell támogatnia. Az illesztőprogram-csomagban ennek eléréséről további információt a több operációsrendszer-verzió támogatása című témakörben talál. Az alábbi táblázatok rövid áttekintést nyújtanak a különböző állapotkezelési API-k operációsrendszer-támogatásának hozzáadásáról.

WDM-illesztőprogramok

Operációs rendszer A támogatás be lett vezetve
Windows 2000 IoOpenDeviceRegistryKey
IoOpenDeviceInterfaceRegistryKey
Windows Vista IoGetDevicePropertyData
IoSetDevicePropertyData
Windows 8 IoGetDeviceInterfacePropertyData
IoSetDeviceInterfacePropertyData
Windows 8.1 IoQueryFullDriverPath
Windows 10 1803 IoOpenDriverRegistryKey a RegKeyTypeDriverRegKeyParameters és DriverRegKeyPersistentState eleméhez
IoGetDeviceDirectory
IoGetDriverDirectory a DirectoryType a DriverDirectoryImage és DriverDirectoryData részére
Windows 10 1809 RtlQueryRegistryValueWithFallback
Windows 11 21H2 IoOpenDriverRegistryKey for RegKeyType of DriverRegKeySharedPersistentState
IoGetDriverDirectory for DirectoryType of DriverDirectorySharedData

KMDF-illesztőprogramok

KMDF-verzió A támogatás hozzáadva lett
1.0 WdfDeviceOpenRegistryKey
WdfFdoInitOpenRegistryKey
WdfDriverOpenParametersRegistryKey
WdfDeviceQueryProperty
WdfDeviceAllocAndQueryProperty
WdfFdoInitQueryProperty
WdfFdoInitAllocAndQueryProperty
1.13 WdfDeviceQueryPropertyEx
WdfDeviceAllocAndQueryPropertyEx
WdfDeviceAssignProperty
WdfFdoInitQueryPropertyEx
WdfFdoInitAllocAndQueryPropertyEx
1,25 WdfDriverOpenPersistentStateRegistryKey (Windows 10 1803)

UMDF-illesztőprogramok

UMDF-verzió Támogatás hozzáadva lett
2.0 WdfDeviceOpenRegistryKey
WdfFdoInitOpenRegistryKey
WdfDriverOpenParametersRegistryKey
WdfDeviceQueryProperty
WdfDeviceAllocAndQueryProperty
WdfDeviceQueryPropertyEx
WdfDeviceAllocAndQueryPropertyEx
WdfDeviceAssignProperty
WdfFdoInitQueryProperty
WdfFdoInitAllocAndQueryProperty
WdfFdoInitQueryPropertyEx
WdfFdoInitAllocAndQueryPropertyEx
WdfDeviceQueryInterfaceProperty (Windows 8.1)
WdfDeviceAllocAndQueryInterfaceProperty (Windows 8.1)
WdfDeviceAssignInterfaceProperty (Windows 8.1)
2,25 WdfDeviceRetrieveDeviceDirectoryString
WdfDriverOpenPersistentStateRegistryKey (Windows 10 1803)
2.27 WdfDriverRetrieveDriverDataDirectoryString

Felhasználói mód kódja

Operációs rendszer Támogatás hozzáadva
Windows 2000 CM_Open_DevNode_Key
Windows Vista CM_Open_Device_Interface_Key
CM_Get_DevNode_Property
CM_Set_DevNode_Property
CM_Get_Device_Interface_Property
CM_Set_Device_Interface_Property
Windows 10 2004 GetServiceRegistryStateKey
GetServiceDirectory
Windows 11 21H2 GetSharedServiceRegistryStateKey
GetSharedServiceDirectory