Megosztás:


A Windows kernel átlátszatlan struktúrái

Ez a cikk a Windows kernel átlátszatlan struktúráinak listáját és leírását tartalmazza. Sok ilyen struktúra esetében az illesztőprogramoknak nem szabad hozzáférniük vagy módosítaniuk a tagokat, hanem a rendszer által biztosított rutinokat kell használniuk az információk eléréséhez. A részletekért tekintse meg az egyes struktúrákat.

EPROCESS

Az EPROCESS-struktúra egy átlátszatlan struktúra, amely egy folyamat folyamatobjektumaként szolgál.

Egyes rutinok, például a PsGetProcessCreateTimeQuadPart, az EPROCESS használatával azonosítják a működéshez szükséges folyamatot. Az illesztőprogramok a PsGetCurrentProcess rutin használatával mutatót kaphatnak az aktuális folyamat folyamatobjektumához, és az ObReferenceObjectByHandle rutin használatával mutatót kaphatnak a megadott leíróhoz társított folyamatobjektumhoz. A PsInitialSystemProcess globális változó a rendszerfolyamat folyamatobjektumára mutat.

A folyamatobjektum egy Object Manager-objektum. Az illesztőknek az Objektumkezelő olyan rutinjait kell használniuk, mint az ObReferenceObject és az ObDereferenceObject az objektum referenciaszámának fenntartásához.

Fejléc: Wdm.h. Tartalmazza: Wdm.h, Ntddk.h, Ntifs.h.

ETHREAD

Az ETHREAD-struktúra egy átlátszatlan szerkezet, amely egy szál szálobjektumaként szolgál.

Egyes rutinok, például a PsIsSystemThread, az ETHREAD használatával azonosítják a szálat, amelyen működni szeretne. Az illesztőprogramok a PsGetCurrentThread rutin használatával mutatót kaphatnak az aktuális szál szálobjektumához, és az ObReferenceObjectByHandle rutin használatával mutatót kaphatnak a megadott fogóponthoz társított szálobjektumra.

A szálobjektum egy Object Manager-objektum. Az illesztőknek az Objektumkezelő olyan rutinjait kell használniuk, mint az ObReferenceObject és az ObDereferenceObject az objektum referenciaszámának fenntartásához.

Fejléc: Wdm.h. Tartalmazza: Wdm.h, Ntddk.h, Ntifs.h.

EX_RUNDOWN_REF

A EX_RUNDOWN_REF szerkezet egy átlátszatlan rendszerstruktúra, amely információkat tartalmaz a társított megosztott objektumok lefutás elleni védelmének állapotáról.

typedef struct _EX_RUNDOWN_REF {
  
  ...  // opaque
  
} EX_RUNDOWN_REF, *PEX_RUNDOWN_REF;

A cikk végén felsorolt lefutásvédelmi rutinok mind egy EX_RUNDOWN_REF struktúrára mutatnak első paraméterként.

További információ: Run-Down Protection. Fejléc: Wdm.h. Wdm.h. belefoglalása.

EX_TIMER

A EX_TIMER szerkezet egy átlátszatlan struktúra, amelyet az operációs rendszer egy EX_TIMER időzítőobjektum ábrázolására használ.

typedef struct _EX_TIMER *PEX_TIMER;

Az struktúra összes tagja átlátszatlan az illesztőprogramok számára.

Az alábbi ExXxxidőzítő rutinokhoz egy, a rendszer által lefoglalt EX_TIMER struktúrára mutató mutatóra van szükség bemeneti paraméterként:

Az operációs rendszer EX_TIMER-alapú időzítőobjektumokat hoz létre. Egy ilyen időzítőobjektum lekéréséhez az illesztőprogram meghívja az ExAllocateTimer rutint . Ha az objektumra már nincs szükség, az illesztőprogram az ExDeleteTimer meghívásával törli az objektumot.

További információ: ExXxxidőzítő rutinok és EX_TIMER objektumok.

Fejléc: Wdm.h. Tartalmazza: Wdm.h, Ntddk.h, Ntifs.h.

FAST_MUTEX

A FAST_MUTEX szerkezet egy átlátszatlan adatszerkezet, amely gyors mutexet jelöl. Az ExInitializeFastMutex rutin inicializálja ezt a struktúrát.

A gyors mutexekkel kapcsolatos további információkért lásd: Fast Mutexes and Guarded Mutexes.

Fejléc: Wdm.h. Tartalmazza: Wdm.h, Ntddk.h, Ntifs.h.

IO_CSQ

A IO_CSQ struktúra egy átlátszatlan struktúra, amellyel megadhatja az illesztőprogram megszakításmentes IRP-üzenetsor-rutinjait. Ne állítsa be közvetlenül a struktúra tagjait. A struktúra inicializálásához használja az IoCsqInitialize vagy az IoCsqInitializeEx eszközt.

A megszakításbiztos IRP sorok használatának áttekintéséért tekintse meg Cancel-Safe IRP sorokat.

Elérhető a Microsoft Windows XP és a Windows operációs rendszer újabb verzióiban.

Fejléc: Wdm.h. Tartalmazza: Wdm.h, Ntddk.h, Ntifs.h.

IO_CSQ_IRP_CONTEXT

A IO_CSQ_IRP_CONTEXT struktúra egy átlátszatlan adatstruktúra, amellyel meghatározható az IRP-környezet az illesztőprogram megszakításmentes IRP-üzenetsorában. Az IoCsqInsertIrp, IoCsqInsertIrpEx és az IoCsqRemoveIrp rutinok ezt a struktúrát használják kulcsként az üzenetsor adott IRP-inak azonosításához.

A megszakításbiztos IRP sorok használatának áttekintéséért tekintse meg Cancel-Safe IRP sorokat.

Elérhető a Microsoft Windows XP és a Windows operációs rendszer újabb verzióiban.

Fejléc: Wdm.h. Tartalmazza: Wdm.h, Ntddk.h, Ntifs.h.

IO_WORKITEM

A IO_WORKITEM szerkezet egy átlátszatlan szerkezet, amely egy rendszermunkaszál munkaelemét írja le.

A sofőr a munkaelemet az IoAllocateWorkItem meghívásával foglalhatja le. Másik lehetőségként az illesztőprogram lefoglalhatja a saját pufferét, majd meghívhatja az IoInitializeWorkItem parancsot a puffer munkaelemként való inicializálásához.

Az IoAllocateWorkItem által lefoglalt munkaelemeket az IoFreeWorkItem-nek kell felszabadítania. Az IoInitializeWorkItem által inicializált memóriát az IoUninitializeWorkItem nem inicializálja , mielőtt felszabadítható lenne.

További információ a munkaelemekről: System Worker Threads.

Fejléc: Wdm.h. Tartalmazza: Wdm.h, Ntddk.h, Ntifs.h.

KBUGCHECK_CALLBACK_RECORD

A KBUGCHECK_CALLBACK_RECORD szerkezet egy átlátszatlan szerkezet, amelyet a KeRegisterBugCheckCallback és a KeDeregisterBugCheckCallback rutinok használnak.

A KBUGCHECK_CALLBACK_RECORD struktúrát a KeRegisterBugCheckReasonCallback és a KeDeregisterBugCheckReasonCallback rutinok használják a könyveléshez.

A struktúrát rezidens memóriában kell lefoglalni, például nem lapozott tárterületen. Használja a KeInitializeCallbackRecord rutint a struktúra inicializálásához a használat előtt.

Fejléc: Ntddk.h. Tartalmazza: Ntddk.h.

KBUGCHECK_REASON_CALLBACK_RECORD

A KBUGCHECK_REASON_CALLBACK_RECORD szerkezet egy átlátszatlan szerkezet, amelyet a KeRegisterBugCheckReasonCallback és a KeDeregisterBugCheckReasonCallback rutinok használnak.

A KBUGCHECK_REASON_CALLBACK_RECORD struktúrát a KeRegisterBugCheckReasonCallback és a KeDeregisterBugCheckReasonCallback rutinok használják a könyveléshez.

A struktúrát rezidens memóriában kell lefoglalni, például nem lapozott tárterületen. Használja a KeInitializeCallbackRecord rutint a struktúra inicializálásához a használat előtt.

Elérhető a Microsoft Windows XP-n a Service Pack 1 (SP1), a Windows Server 2003 és a Windows operációs rendszer újabb verzióival.

Fejléc: Ntddk.h. Tartalmazza: Ntddk.h.

KDPC

A KDPC-struktúra egy átlátszatlan szerkezet, amely egy DPC-objektumot jelöl. Ne állítsa be közvetlenül a struktúra tagjait. Lásd: DPC-objektumok és DPC-k.

Fejléc: Wdm.h. Tartalmazza: Wdm.h, Ntddk.h, Ntifs.h.

KFLOATING_SAVE

A KFLOATING_SAVE szerkezet egy átlátszatlan szerkezet, amely leírja a KeSaveFloatingPointState rutin által mentett lebegőpontos állapotot.

A lebegőpontos állapot visszaállításához használja a KeRestoreFloatingPointState-t .

Fejléc: Wdm.h. Tartalmazza: Wdm.h, Ntddk.h, Ntifs.h.

KGUARDED_MUTEX

A KGUARDED_MUTEX szerkezet egy átlátszatlan szerkezet, amely egy védett mutexet jelöl.

KeInitializeGuardedMutex használatával inicializálhat KGUARDED_MUTEX struktúrát védett mutexként.

A védett mutexeket nem lapított készletből kell lefoglalni.

További információért az őrzött mutexekről lásd a Gyors mutexek és védett mutexek című részt.

Fejléc: Wdm.h. Tartalmazza: Wdm.h, Ntddk.h, Ntifs.h.

KINTERRUPT

A KINTERRUPT-struktúra egy átlátszatlan szerkezet, amely a rendszer megszakítását jelöli.

Az IoConnectInterruptEx mutatót biztosít a KINTERRUPT struktúrához a megszakítás számára, amikor az illesztőprogram regisztrál egy InterruptService vagy InterruptMessageService rutint. Az illesztőprogram ezt a mutatót használja a megszakításhoz tartozó megszakítási forgózár megszerzésekor vagy felszabadításakor. Az illesztő ezt a mutatót is használja egy InterruptService-rutin regisztrációjának törlésekor.

Fejléc: Wdm.h. Tartalmazza: Wdm.h, Ntddk.h, Ntifs.h.

KLOCK_QUEUE_HANDLE

A KLOCK_QUEUE_HANDLE struktúra egy átlátszatlan struktúra, amely egy sorba állított spin-zárolást ír le. Az illesztőprogram lefoglalja a KLOCK_QUEUE_HANDLE struktúrát, és átadja azt a KeAcquireInStackQueuedSpinLock és KeAcquireInStackQueuedSpinLockAtDpcLevel függvényeknek a sorba állított pörgetési zár megszerzéséhez. Ezek a rutinok inicializálják a struktúrát, hogy az a sorban álló pörgetési zárolást jelölje. A meghajtó átadja a szerkezetet a KeReleaseInStackQueuedSpinLock és KeReleaseInStackQueuedSpinLockFromDpcLevel számára a spin lock feloldásakor.

További információ: Queued Spin Locks.

Fejléc: Wdm.h. Tartalmazza: Wdm.h, Ntddk.h, Ntifs.h.

KTIMER

A KTIMER-struktúra egy átlátszatlan szerkezet, amely egy időzítőobjektumot jelöl. Ne állítsa be közvetlenül a struktúra tagjait. További információ: Időzítőobjektumok és DPC-k.

Fejléc: Wdm.h. Tartalmazza: Wdm.h, Ntddk.h, Ntifs.h.

LOOKASIDE_LIST_EX

A LOOKASIDE_LIST_EX szerkezet egy lookaside listát ír le.

typedef struct _LOOKASIDE_LIST_EX {
  ...  // opaque
} LOOKASIDE_LIST_EX, *PLOOKASIDE_LIST_EX;

A lookaside-lista rögzített méretű pufferek készlete, amelyeket az illesztőprogram helyileg kezelhet a rendszerfoglalási rutinok hívásainak számának csökkentése érdekében. A hívások számának csökkentése javítja a teljesítményt. A pufferek egységes méretűek, és a lookaside listában bejegyzésként vannak tárolva.

Az illesztőprogramoknak átlátszatlanként kell kezelnie a LOOKASIDE_LIST_EX szerkezetet. Előfordulhat, hogy a struktúratagokhoz hozzáférő vagy a tagok helyétől függő illesztőprogramok nem maradnak hordozhatóak és más illesztőprogramokkal együttműködve.

A Kapcsolódó cikkek szakasz felsorolja azokat a rutinokat, amelyek ezt a struktúrát használják.

A lookaside listákról további információt a Lookaside-listák használata című témakörben talál.

A 64 bites platformokon ennek a struktúrának 16 bájtosnak kell lennie.

Fejléc: Wdm.h. Tartalmazza: Wdm.h, Ntddk.h, Ntifs.h.

NPAGED_LOOKASIDE_LIST

A NPAGED_LOOKASIDE_LIST szerkezet egy átlátszatlan struktúra, amely a nem lapozott készletből lefoglalt rögzített méretű pufferek lookaside-listáját írja le. A rendszer új bejegyzéseket hoz létre, és szükség esetén megsemmisíti a lista nem használt bejegyzéseit. Rögzített méretű pufferek esetén a lookaside-lista használata gyorsabb, mint a memória közvetlen kiosztása.

Az ExInitializeNPagedLookasideList használatával inicializálhatja a lookaside listát. Az ExAllocateFromNPagedLookasideList használatával foglaljon le egy puffert a listából, az ExFreeToNPagedLookasideList pedig puffert adjon vissza a listához.

Az illesztőprogramoknak mindig expliciten kell felszabadítaniuk az általuk létrehozott lookaside listákat a kirakodás előtt. Az, hogy másképp cselekszik, súlyos programozási hiba. Az ExDeleteNPagedLookasideList használatával szabadíthatja fel a listát.

Az illesztőprogramok a lapozott készlethez is használhatnak lookaside-listákat. A PAGED_LOOKASIDE_LIST-struktúra lapszámozott puffereket tartalmazó lookaside-listát ír le. A LOOKASIDE_LIST_EX-struktúra leírhatja a lapszámozott vagy nem lapszámozott puffereket tartalmazó lookaside-listát. További információ: Lookaside-listák használata.

A 64 bites platformokon ennek a struktúrának 16 bájtosnak kell lennie.

Fejléc: Wdm.h. Tartalmazza: Wdm.h, Ntddk.h, Ntifs.h.

OBJEKTUM_TÍPUS

OBJECT_TYPE egy átlátszatlan szerkezet, amely meghatározza a fogantyú objektumtípusát. További információ: ObReferenceObjectByHandle.

Fejléc: Wdm.h. Tartalmazza: Wdm.h, Ntddk.h, Ntifs.h.

PAGED_LOOKASIDE_LIST

A PAGED_LOOKASIDE_LIST struktúra egy átlátszatlan struktúra, amely egy lapozott készletből lefoglalt rögzített méretű puffereket tartalmazó lookaside-listát ír le. A rendszer új bejegyzéseket hoz létre, és szükség esetén megsemmisíti a lista nem használt bejegyzéseit. Rögzített méretű pufferek esetén a lookaside-lista használata gyorsabb, mint a memória közvetlen kiosztása.

Az ExInitializePagedLookasideList használatával inicializálhatja a lookaside listát. Az ExAllocateFromPagedLookasideList használatával foglaljon le egy puffert a listából, az ExFreeToPagedLookasideList pedig puffert adjon vissza a listához.

Az illesztőprogramoknak mindig expliciten kell felszabadítaniuk az általuk létrehozott lookaside listákat a kirakodás előtt. Az, hogy másképp cselekszik, súlyos programozási hiba. Az ExDeletePagedLookasideList használatával szabadíthatja fel a listát.

Az illesztőprogramok bepillantó listákat is használhatnak a nem lapozott tárterülethez. A NPAGED_LOOKASIDE_LIST struktúra egy nem lapozott pufferokat tartalmazó lookaside listát jellemez. A LOOKASIDE_LIST_EX-struktúra leírhatja a lapszámozott vagy nem lapszámozott puffereket tartalmazó lookaside-listát. További információ: Lookaside-listák használata.

A 64 bites platformokon ennek a struktúrának 16 bájtosnak kell lennie.

Fejléc: Wdm.h. Tartalmazza: Wdm.h, Ntddk.h, Ntifs.h.

RTL_BITKÉP

A RTL_BITMAP szerkezet egy átlátszatlan szerkezet, amely bitképet ír le.

typedef struct _RTL_BITMAP {
  // opaque
} RTL_BITMAP, *PRTL_BITMAP;

Ne érje el közvetlenül a struktúra tagjait. Előfordulhat, hogy azok az illesztőprogramok, amelyek függenek a tagok helyétől, vagy amelyek közvetlenül férnek hozzá a tagértékekhez, nem kompatibilisek maradnak a Windows operációs rendszer jövőbeli verzióival.

A RTL_BITMAP struktúra egy általános célú, egydimenziós, tetszőleges hosszúságú bitkép fejléceként szolgál. Az illesztőprogramok az ilyen bitképeket gazdaságos módszerként használhatják az újrahasználható elemek nyomon követésére. A fájlrendszer például bitképekkel követheti nyomon, hogy a merevlemezen mely fürtök és szektorok vannak már lefoglalva a fájladatok tárolásához.

A RTL_BITMAP struktúrákat használó RtlXxx rutinok listáját a Kapcsolódó cikkek szakaszban találja. Ezen RtlXxx rutinok hívója felelős a RTL_BITMAP struktúrához és a bitképet tartalmazó pufferhez tartozó tároló kiosztásáért. Ennek a puffernek 4 bájtos határon kell kezdődnie a memóriában, és 4 bájt hosszúságú többszörösének kell lennie. A bitkép a puffer elején kezdődik, de tetszőleges számú bitet tartalmazhat, amelyek elférnek a lefoglalt pufferben.

Mielőtt egy RTL_BITMAP struktúrát paraméterként megadna egy RtlXxx rutinnak, hívja meg az RtlInitializeBitMap rutint a struktúra inicializálására. A rutin bemeneti paraméterei egy pufferre mutató mutató, amely tartalmazza a bitképet, valamint a bitkép méretét bitekben. Az RtlInitializeBitMap nem módosítja a puffer tartalmát.

Ha a hívó lefoglalja a tárterületet a RTL_BITMAP struktúrához és a bitképhez a lapozott memóriában, akkor a hívónak irQL <= APC_LEVEL kell futnia, amikor a kapcsolódó cikkek szakaszban felsorolt RtlXxx rutinok egyikének paraméterként átadja a szerkezetre mutató mutatót. Ha a hívó lefoglalja a tárterületet a nem lapozott memóriából (vagy ezzel egyenértékűen a zárolt lapozott memóriából), a hívó bármilyen IRQL-n futhat, amikor meghívja az RtlXxx rutint.

Fejléc: Wdm.h. Tartalmazza: Wdm.h, Ntddk.h, Ntifs.h.

RTL_RUN_ONCE

A RTL_RUN_ONCE szerkezet egy átlátszatlan struktúra, amely egy egyszeri inicializálás információinak tárolására szolgál.

Az illesztőprogramoknak inicializálni kell ezt a struktúrát az RtlRunOnceInitialize rutin meghívásával, mielőtt átadják azt bármely más RtlRunOnceXxx rutinnak.

Fejléc: Ntddk.h. Tartalmazza: Ntddk.h.

BIZTONSÁGI_ALANY_KONTEXTUS

A SECURITY_SUBJECT_CONTEXT szerkezet egy átlátszatlan szerkezet, amely azt a biztonsági környezetet jelöli, amelyen belül egy adott művelet zajlik. A biztonsági döntések meghozatalához az illesztőprogramok nem módosíthatják, és nem próbálhatnak meg közvetlenül hozzáférni a struktúra bármelyik tagjához. Ehelyett az engedélyezés során felmerülő biztonsági problémák elkerülése érdekében adja át ezt az átlátszatlan struktúrát a SeAccessCheck vagy a SePrivilegeCheck hívásaiban.

Fejléc: Wdm.h. Tartalmazza: Wdm.h, Ntddk.h, Ntifs.h.

SLIST_HEADER

A SLIST_HEADER szerkezet egy átlátszatlan struktúra, amely egy sorrendbe rendezett, egymáshoz csatolt lista fejléceként szolgál. További információ: Egyszerűen és kétszeresen összefűzött listák.

64 bites platformokon SLIST_HEADER struktúráknak 16 bájtosnak kell lenniük.

Fejléc: Wdm.h. Tartalmazza: Wdm.h, Ntddk.h, Ntifs.h.

XSTATE_SAVE

A XSTATE_SAVE struktúra egy átlátszatlan struktúra, amely leírja a kernel módú illesztőprogram által mentett és visszaállított kiterjesztett processzorállapot-információkat.

typedef struct _XSTATE_SAVE {
  ...  // opaque
} XSTATE_SAVE, *PXSTATE_SAVE;

Minden tag átlátszatlan.

A KeSaveExtendedProcessorState és a KeRestoreExtendedProcessorState rutinok ezt a struktúrát használják.

Fejléc: Wdm.h. Tartalmazza: Wdm.h, Ntddk.h, Ntifs.h.

ExAcquireFastMutex

ExAcquireFastMutexUnsafe

ExAllocateFromLookasideListEx

ExAllocateFromNPagedLookasideList

ExAllocateFromPagedLookasideList

ExAllocateTimer

ExDeletePagedLookasideList

ExFreeToPagedLookasideList

ExInitializePagedLookasideList

ExCancelTimer

ExDeleteLookasideListEx

ExDeleteNPagedLookasideList

ExDeleteTimer

ExFlushLookasideListEx

ExFreeToLookasideListEx

ExFreeToNPagedLookasideList

ExInitializeLookasideListEx

ExInitializeNPagedLookasideList

ExInitializeSListHead

ExInterlockedFlushSList

ExInterlockedPopEntrySList

ExInterlockedPushEntrySList

ExQueryDepthSList

ExReleaseFastMutex

ExReleaseFastMutexUnsafe

ExSetTimer

ExTryToAcquireFastMutex

ExTimerCallback

IoAllocateWorkItem

IoConnectInterruptEx

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrp

IoCsqInsertIrpEx

IoCsqRemoveIrp

IoDisconnectInterruptEx

IoFreeWorkItem

IoInitializeWorkItem

IoRequestDpc

IoUninitializeWorkItem

KeAcquireGuardedMutex

KeAcquireGuardedMutexUnsafe

KeAcquireInStackQueuedSpinLock

KeAcquireInStackQueuedSpinLockAtDpcLevel

KeAcquireInterruptSpinLock

KeCancelTimer

KeInitializeCallbackRecord

KeInitializeGuardedMutex

KeInitializeTimer

KeInitializeTimerEx

KeReadStateTimer

KeRestoreExtendedProcessorState

KeSaveExtendedProcessorState

KeSetTimer

KeSetTimerEx

KeDeregisterBugCheckCallback

KeDeregisterBugCheckReasonCallback

KeInsertQueueDpc

KeRegisterBugCheckCallback

KeRegisterBugCheckReasonCallback

KeReleaseGuardedMutexUnsafe

KeReleaseInStackQueuedSpinLock

KeReleaseInStackQueuedSpinLockFromDpcLevel

KeReleaseInterruptSpinLock

KeRestoreFloatingPointState

KeSaveFloatingPointState

KeSynchronizeExecution

LookasideListAllocateEx

LookasideListFreeEx

ObReferenceObjectByHandle

PsGetCurrentProcess

PsGetProcessCreateTimeQuadPart

PsInitialSystemProcess

PsIsSystemThread

Hibaellenőrzési visszahívási adatok olvasása

RtlRunOnceBeginInitialize

RtlRunOnceComplete

RtlRunOnceExecuteOnce

RtlRunOnceInitialize

RunOnceInitialization

Run-Down Védelem

SeAccessCheck

SeAssignSecurity

SeAssignSecurityEx