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őprogramok és a felhasználói módú összetevők a legtöbb rendszer által definiált objektumhoz fogópontokon keresztül férnek hozzá. A leírókat az átlátszatlan HANDLE adattípus jelöli meg. (Vegye figyelembe, hogy a leírók nem eszközobjektumokhoz vagy illesztőprogram-objektumokhoz való hozzáféréshez használhatók.)
A legtöbb objektumtípus esetében az objektumot létrehozó vagy megnyitó kernelmódú rutin egy fogantyút biztosít a hívó számára. Azután a hívó ezt a kezelőt használja az objektumon végzett későbbi műveletekhez.
Az alábbiakban felsoroljuk az illesztőprogramok által általában használt objektumtípusokat, valamint azokat a rutinokat, amelyek kezelik az ilyen típusú objektumokat.
| Objektumtípus | Megfelelő létrehozási/megnyitási rutin |
|---|---|
Fájl |
|
Regisztrációs kulcsok |
IoOpenDeviceInterfaceRegistryKey, IoOpenDeviceRegistryKey, ZwCreateKey, ZwOpenKey |
Szálak |
|
Események |
|
Szimbolikus hivatkozások |
|
Címtárobjektumok |
|
Szakaszobjektumok |
Ha az illesztőprogramnak már nincs szüksége az objektumhoz való hozzáférésre, meghívja a ZwClose rutint a fogópont bezárásához. Ez a fenti táblázatban felsorolt összes objektumtípus esetében működik.
A leírókat biztosító rutinok többsége paraméterként OBJECT_ATTRIBUTES struktúrát használ. Ez a struktúra a fogó attribútumainak megadására használható.
A járművezetők a következő leíróattribútumokat határozhatják meg:
OBJ_KERNEL_HANDLE
A handle csak kernel módból érhető el.
OBJ_Öröklés
Az aktuális folyamat gyermekei létrehozásukkor megkapják a fogantyú másolatát.
OBJ_FORCE_ACCESS_CHECK
Ez az attribútum azt határozza meg, hogy a rendszer minden egyes hozzáférés-ellenőrzést végrehajt a fogantyún. Alapértelmezés szerint a rendszer kikerüli az összes hozzáférés-ellenőrzést a kernel módban létrehozott leírókon.
Az InitializeObjectAttributes rutin használatával állítsa be ezeket az attribútumokat egy OBJECT_ATTRIBUTES struktúrában.
Az objektumfogók érvényesítéséről további információt az Az objektumfogók érvényesítésének hibája című témakörben talál.
Privát objektumkezelők
Amikor egy illesztő létrehoz egy objektumfogópontot a privát használatra, az illesztőnek meg kell adnia a OBJ_KERNEL_HANDLE attribútumot. Ez biztosítja, hogy a fogantyú ne legyen elérhető a felhasználói módú alkalmazások számára.
Megosztott objektum fogópontjai
A rendszermag mód és a felhasználói mód között objektumfogópontokat megosztó illesztőprogramot gondosan meg kell írni, hogy elkerülje a biztonsági rések véletlen létrehozását. Íme néhány irányelv:
Hozzunk létre fogópontokat kernel módban, és adjuk át őket a felhasználói módnak, ahelyett, hogy fordítva tennénk. Az illesztőprogramnak átadott, felhasználói módú összetevő által létrehozott leírókban nem szabad megbízni.
Ha az illesztőnek felhasználói módú alkalmazások nevében kell kezelnie a kezelőket, használja a OBJ_FORCE_ACCESS_CHECK attribútumot annak ellenőrzéséhez, hogy az alkalmazás rendelkezik-e a szükséges hozzáféréssel.
Az ObReferenceObjectByPointer használatával kernel módú hivatkozást tárolhat egy megosztott leírón. Ellenkező esetben, ha egy felhasználói módú összetevő bezárja a leírót, a hivatkozási szám nullára csökken, és ha az illesztőprogram ezután megpróbálja használni vagy bezárni a fogópontot, a rendszer összeomlik.
Ha egy felhasználói módú alkalmazás létrehoz egy eseményobjektumot, az illesztőprogram nyugodtan megvárhatja az esemény jelzését, de csak akkor, ha az alkalmazás egy IOCTL-sel továbbítja az eseményobjektumnak egy leírót. Az illesztőprogramnak az eseményt létrehozó folyamat kontextusában kell kezelnie az IOCTL-t, és az ObReferenceObjectByHandle meghívásával ellenőriznie kell, hogy a leíró eseményleíró-e.