Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
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:
IoOpenDeviceRegistryKey (WDM)
CM_Open_DevNode_Key (felhasználói módú kód)
INF AddReg-direktíva HKR reg-root bejegyzésekkel egy hozzáadási regisztrációs szakaszban, amelyet egy INF DDInstall szakaszból vagy DDInstall.HW szakaszból hivatkoznak, az alábbiak szerint:
[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:
CM_Open_Device_Interface_Key (felhasználói módú kód)
INF AddReg-direktíva, amely a HKR reg-root bejegyzéseket használja egy add-registry-section szakaszban, amelyre egy add-interface-section szakasz hivatkozik
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:
IoOpenDriverRegistryKey (WDM) egy DRIVER_REGKEY_TYPE DriverRegKeyParameters típussal.
GetServiceRegistryStateKey (Win32 Szolgáltatások) egy ServiceRegistryStateParameters típusú SERVICE_REGISTRY_STATE_TYPE
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:
IoOpenDriverRegistryKey (WDM) DRIVER_REGKEY_TYPE DriverRegKeyPersistentState típussal
GetServiceRegistryStateKey (Win32 szolgáltatások) a SERVICE_REGISTRY_STATE_TYPE ServiceRegistryStatePersistent típusával
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:
IoOpenDriverRegistryKey (WDM) esetében a DRIVER_REGKEY_TYPE DriverRegKeySharedPersistentState
GetSharedServiceRegistryStateKey (Win32 Services) a ServiceSharedRegistryPersistentState típussal rendelkező SERVICE_SHARED_REGISTRY_STATE_TYPE
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:
IoGetDeviceDirectory (WDM) a DirectoryType paraméterrel, amely DeviceDirectoryData értékre van állítva
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:
IoGetDriverDirectory (WDM, KMDF) a könyvtártípus paraméterrel, amely DriverDirectoryData-ra van állítva
GetServiceDirectory (Win32 Services) az eDirectoryType paraméterrel, amely ServiceDirectoryPersistentState értékre van állítva
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:
WDM-illesztőprogramok
WDF-illesztőprogramok
Felhasználói mód kódja
Az eszközillesztő tulajdonságainak eléréséhez az alábbi API-k használhatók:
WDM-illesztőprogramok
WDF-illesztőprogramok
Felhasználói mód kódja
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
UMDF-illesztőprogramok
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 |