Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln visar och beskriver ogenomskinliga strukturer i Windows-kerneln. För många av dessa strukturer bör drivrutiner inte komma åt eller ändra några medlemmar, utan i stället använda rutiner som tillhandahålls av systemet för att få åtkomst till informationen. Mer information finns i varje struktur.
EPROCESS
EPROCESS- struktur är en ogenomskinlig struktur som fungerar som processobjekt för en process.
Vissa rutiner, till exempel PsGetProcessCreateTimeQuadPart, använder EPROCESS- för att identifiera vilken process som ska köras. Drivrutiner kan använda den PsGetCurrentProcess--rutinen för att hämta en pekare till processobjektet för den aktuella processen och kan använda den ObReferenceObjectByHandle--rutinen för att hämta en pekare till processobjektet som är associerat med det angivna handtaget. PsInitialSystemProcess globala variabeln pekar på processobjektet för systemprocessen.
Ett processobjekt är ett Object Manager-objekt. Drivrutiner bör använda Object Manager-rutiner som ObReferenceObject och ObDereferenceObject för att upprätthålla objektets referensantal.
Rubrik: Wdm.h. Inkludera: Wdm.h, Ntddk.h, Ntifs.h.
ETHREAD
ETHREAD--struktur är en ogenomskinlig struktur som fungerar som ett trådobjekt för en tråd.
Vissa rutiner, till exempel PsIsSystemThread, använder ETHREAD- för att identifiera tråden som ska användas. Drivrutiner kan använda PsGetCurrentThread rutin för att hämta en pekare till trådobjektet för den aktuella tråden och kan använda ObReferenceObjectByHandle rutin för att hämta en pekare till trådobjektet som är associerat med det angivna handtaget.
Ett trådobjekt är ett Object Manager-objekt. Drivrutiner bör använda Object Manager-rutiner som ObReferenceObject och ObDereferenceObject för att upprätthålla objektets referensantal.
Rubrik: Wdm.h. Inkludera: Wdm.h, Ntddk.h, Ntifs.h.
EX_RUNDOWN_REF
Den EX_RUNDOWN_REF strukturen är en ogenomskinlig systemstruktur som innehåller information om status för nedkörningsskydd för ett associerat delat objekt.
typedef struct _EX_RUNDOWN_REF {
... // opaque
} EX_RUNDOWN_REF, *PEX_RUNDOWN_REF;
Skyddsrutinerna för avveckling som visas längst ned på den här sidan tar alla en pekare till en EX_RUNDOWN_REF struktur som deras första parameter.
Mer information finns i Run-Down Protection. Rubrik: Wdm.h. Inkludera Wdm.h.
EX_TIMER
Den EX_TIMER strukturen är en ogenomskinlig struktur som operativsystemet använder för att representera ett EX_TIMER timerobjekt.
typedef struct _EX_TIMER *PEX_TIMER;
Alla medlemmar i den här strukturen är ogenomskinliga för drivrutiner.
Följande ExXxxTimer-rutiner kräver en pekare till en systemallokerad EX_TIMER struktur som indataparameter:
Operativsystemet skapar EX_TIMER-baserade timerobjekt. För att få ett sådant timerobjekt anropar din drivrutin rutinen ExAllocateTimer. När det här objektet inte längre behövs ansvarar drivrutinen för att ta bort objektet genom att anropa ExDeleteTimer.
För mer information, se ExXxxTimer Routines och EX_TIMER Objects.
Rubrik: Wdm.h. Inkludera: Wdm.h, Ntddk.h, Ntifs.h.
FAST_MUTEX
En FAST_MUTEX struktur är en ogenomskinlig datastruktur som representerar en snabb mutex. Rutinen ExInitializeFastMutex initierar den här strukturen.
Mer information om snabba mutexar finns i Snabba mutexar och skyddade mutexar.
Rubrik: Wdm.h. Inkludera: Wdm.h, Ntddk.h, Ntifs.h.
IO_CSQ
Den IO_CSQ strukturen är en ogenomskinlig struktur som används för att ange förarens avbrottssäkra IRP-körutiner. Ange inte medlemmarna i den här strukturen direkt. Använd IoCsqInitialize eller IoCsqInitializeEx för att initiera den här strukturen.
En översikt över hur du använder cancel-safe IRP-köer finns i Cancel-Safe IRP-köer.
Finns i Microsoft Windows XP och senare versioner av Windows-operativsystemet.
Rubrik: Wdm.h. Inkludera: Wdm.h, Ntddk.h, Ntifs.h.
IO_CSQ_IRP_CONTEXT
Den IO_CSQ_IRP_CONTEXT strukturen är en ogenomskinlig datastruktur som används för att ange IRP-kontexten för en IRP i drivrutinens cancel-safe IRP-kö. IoCsqInsertIrp, IoCsqInsertIrpExoch IoCsqRemoveIrp rutiner använder den här strukturen som en nyckel för att identifiera specifika IP-adresser i kön.
För en översikt av hur man använder avbryt-säkra IRP-köer, se Cancel-Safe IRP-köer.
Finns i Microsoft Windows XP och senare versioner av Windows-operativsystemet.
Rubrik: Wdm.h. Inkludera: Wdm.h, Ntddk.h, Ntifs.h.
IO_WORKITEM
Den IO_WORKITEM strukturen är en ogenomskinlig struktur som beskriver ett arbetsobjekt för en systemarbetartråd.
En drivrutin kan allokera ett arbetsobjekt genom att anropa IoAllocateWorkItem. Alternativt kan en drivrutin allokera sin egen buffert och sedan anropa IoInitializeWorkItem för att initiera bufferten som ett arbetsobjekt.
Alla arbetsobjekt som allokeras av IoAllocateWorkItem måste frigöras av IoFreeWorkItem. Allt minne som initieras av IoInitializeWorkItem måste vara onitialiserat av IoUninitializeWorkItem innan det kan frigöras.
Mer information om arbetsobjekt finns i System Worker Threads.
Rubrik: Wdm.h. Inkludera: Wdm.h, Ntddk.h, Ntifs.h.
KBUGCHECK_CALLBACK_RECORD
Den KBUGCHECK_CALLBACK_RECORD strukturen är en ogenomskinlig struktur som KeRegisterBugCheckCallback och KeDeregisterBugCheckCallback rutiner använder.
Den KBUGCHECK_CALLBACK_RECORD strukturen används av KeRegisterBugCheckReasonCallback och KeDeregisterBugCheckReasonCallback rutiner för bokföring.
Strukturen måste allokeras i internminnet, till exempel en icke-sidsidig pool. Använd KeInitializeCallbackRecord rutin för att initiera strukturen innan du använder den.
Rubrik: Ntddk.h. Inkludera: Ntddk.h.
KBUGCHECK_REASON_CALLBACK_RECORD
Den KBUGCHECK_REASON_CALLBACK_RECORD strukturen är en ogenomskinlig struktur som KeRegisterBugCheckReasonCallback och KeDeregisterBugCheckReasonCallback rutiner använder.
Den KBUGCHECK_REASON_CALLBACK_RECORD strukturen används av KeRegisterBugCheckReasonCallback och KeDeregisterBugCheckReasonCallback rutinerna för att sköta bokföringen.
Strukturen måste allokeras i internminnet, till exempel en icke-sidsidig pool. Använd KeInitializeCallbackRecord rutin för att initiera strukturen innan du använder den.
Finns i Microsoft Windows XP med Service Pack 1 (SP1), Windows Server 2003 och senare versioner av Windows-operativsystemet.
Rubrik: Ntddk.h. Inkludera: Ntddk.h.
KDPC
Den KDPC- strukturen är en ogenomskinlig struktur som representerar ett DPC-objekt. Ange inte medlemmarna i den här strukturen direkt. Se DPC-objekt och DPC:er.
Rubrik: Wdm.h. Inkludera: Wdm.h, Ntddk.h, Ntifs.h.
KFLOATING_SAVE
Den KFLOATING_SAVE strukturen är en ogenomskinlig struktur som beskriver det flyttaltillstånd som KeSaveFloatingPointState rutin sparade.
Använd KeRestoreFloatingPointState för att återställa flyttalstillståndet.
Rubrik: Wdm.h. Inkludera: Wdm.h, Ntddk.h, Ntifs.h.
KGUARDED_MUTEX
Strukturen KGUARDED_MUTEX är en ogenomskinlig struktur som representerar en skyddad mutex.
Använd KeInitializeGuardedMutex för att initiera en KGUARDED_MUTEX-struktur som en skyddad mutex.
Skyddade mutexar måste allokeras från en icke-sidväxlingspool.
Mer information om skyddade mutexar finns i Snabba mutexes och skyddade mutexer.
Rubrik: Wdm.h. Inkludera: Wdm.h, Ntddk.h, Ntifs.h.
KINTERRUPT
En KINTERRUPT- struktur är en ogenomskinlig struktur som representerar ett avbrott i systemet.
IoConnectInterruptEx ger en pekare till strukturen KINTERRUPT för avbrottet när drivrutinen registrerar en rutin InterruptService eller InterruptMessageService. Drivrutinen använder den här pekaren när den hämtar eller släpper avbrottsspinnlåset för avbrottet. Drivrutinen använder också den här pekaren när den avlägsnar en InterruptService--rutin.
Rubrik: Wdm.h. Inkludera: Wdm.h, Ntddk.h, Ntifs.h.
KLOCK_QUEUE_HANDLE
Den KLOCK_QUEUE_HANDLE strukturen är en ogenomskinlig struktur som beskriver ett köat spinnlås. Drivrutinen allokerar strukturen KLOCK_QUEUE_HANDLE och skickar den till KeAcquireInStackQueuedSpinLock samt KeAcquireInStackQueuedSpinLockAtDpcLevel för att anskaffa det köade spinnlåset. Dessa rutiner initierar strukturen för att representera det köade spinnlåset. Drivrutinen skickar strukturen till KeReleaseInStackQueuedSpinLock och KeReleaseInStackQueuedSpinLockFromDpcLevel när du släpper spinnlåset.
För mer information, se Köade spinlåser.
Rubrik: Wdm.h. Inkludera: Wdm.h, Ntddk.h, Ntifs.h.
KTIMER
Den KTIMER- strukturen är en ogenomskinlig struktur som representerar ett tidsinställt objekt. Ange inte medlemmarna i den här strukturen direkt. För mer information, se Timer-objekt och DPC:er.
Rubrik: Wdm.h. Inkludera: Wdm.h, Ntddk.h, Ntifs.h.
LOOKASIDE_LIST_EX
Strukturen LOOKASIDE_LIST_EX beskriver en lookaside-lista.
typedef struct _LOOKASIDE_LIST_EX {
... // opaque
} LOOKASIDE_LIST_EX, *PLOOKASIDE_LIST_EX;
En lookaside-lista är en pool med buffertar med fast storlek som drivrutinen kan hantera lokalt för att minska antalet anrop till systemallokeringsrutiner, vilket förbättrar prestandan. Buffertarna är av enhetlig storlek och lagras som poster i lookaside-listan.
Drivrutiner bör behandla LOOKASIDE_LIST_EX struktur som ogenomskinlig. Drivrutiner som har åtkomst till strukturmedlemmar eller som har beroenden på dessa medlemmars platser kanske inte förblir portabla och kompatibla med andra drivrutiner.
Avsnittet Relaterade artiklar innehåller en lista över de rutiner som använder den här strukturen.
För mer information om lookaside-listor, se Using Lookaside Lists.
På 64-bitarsplattformar måste den här strukturen vara 16 byte justerad.
Rubrik: Wdm.h. Inkludera: Wdm.h, Ntddk.h, Ntifs.h.
NPAGED_LOOKASIDE_LIST
Den NPAGED_LOOKASIDE_LIST strukturen är en ogenomskinlig struktur som beskriver en lookaside-lista över buffertar med fast storlek som allokerats från en icke-sidsidig pool. Systemet skapar nya poster och förstör oanvända poster i listan efter behov. För buffertar med fast storlek går det snabbare att använda en lookaside-lista än att allokera minne direkt.
Använd ExInitializeNPagedLookasideList för att initiera lookaside-listan. Använd ExAllocateFromNPagedLookasideList för att allokera en buffert från listan och ExFreeToNPagedLookasideList för att returnera en buffert till listan.
Drivrutiner måste alltid uttryckligen frigöra alla lookaside-listor som de skapar innan avlastning. Det är ett allvarligt programmeringsfel att göra något annat. Använd ExDeleteNPagedLookasideList för att frigöra listan.
Drivrutiner kan också använda lookaside-listor för växlingspool. En PAGED_LOOKASIDE_LIST-struktur beskriver en lookaside-lista som innehåller sidsatta buffertar. En LOOKASIDE_LIST_EX struktur kan beskriva en lookaside-lista som innehåller paginerade eller icke-paginerade buffertar. Mer information finns i Använda Lookaside-listor.
På 64-bitarsplattformar måste den här strukturen vara 16 byte justerad.
Rubrik: Wdm.h. Inkludera: Wdm.h, Ntddk.h, Ntifs.h.
OBJECT_TYP
OBJECT_TYPE är en ogenomskinlig struktur som anger objekttypen för ett handtag. Mer information finns i ObReferenceObjectByHandle.
Rubrik: Wdm.h. Inkludera: Wdm.h, Ntddk.h, Ntifs.h.
PAGED_LOOKASIDE_LIST
Den PAGED_LOOKASIDE_LIST strukturen är en ogenomskinlig struktur som beskriver en lookaside-lista över buffertar med fast storlek som allokerats från en sidpool. Systemet skapar nya poster och förstör oanvända poster i listan efter behov. För buffertar med fast storlek går det snabbare att använda en lookaside-lista än att allokera minne direkt.
Använd ExInitializePagedLookasideList för att initiera lookaside-listan. Använd ExAllocateFromPagedLookasideList för att allokera en buffert från listan och ExFreeToPagedLookasideList för att returnera en buffert till listan.
Drivrutiner måste alltid uttryckligen frigöra alla lookaside-listor som de skapar innan de avinstalleras. Det är ett allvarligt programmeringsfel att göra något annat. Använd ExDeletePagedLookasideList för att frigöra listan.
Drivrutiner kan också använda lookaside-listor för icke-sidindelad pool. En NPAGED_LOOKASIDE_LIST struktur beskriver en lookaside-lista som innehåller icke-sidindelade buffertar. En LOOKASIDE_LIST_EX struktur kan beskriva en lookaside-lista som innehåller sid- eller icke-sidiga buffertar. Mer information finns i Använda Lookaside-listor.
På 64-bitarsplattformar måste den här strukturen vara 16 byte justerad.
Rubrik: Wdm.h. Inkludera: Wdm.h, Ntddk.h, Ntifs.h.
RTL_BITMAP
Den RTL_BITMAP strukturen är en ogenomskinlig struktur som beskriver en bitmapp.
typedef struct _RTL_BITMAP {
// opaque
} RTL_BITMAP, *PRTL_BITMAP;
Få inte direkt åtkomst till medlemmarna i den här strukturen. Drivrutiner som har beroenden på medlemsplatser eller som kommer åt medlemsvärden direkt kanske inte är kompatibla med framtida versioner av Windows-operativsystemet.
Den RTL_BITMAP strukturen fungerar som en rubrik för en generell, endimensionell bitmapp med godtycklig längd. En drivrutin kan använda en sådan bitmapp som ett ekonomiskt sätt att hålla reda på en uppsättning återanvändbara objekt. Ett filsystem kan till exempel använda bitmappar för att spåra vilka kluster och sektorer på en hårddisk som redan har allokerats för att lagra fildata.
En lista över RtlXxx rutiner som använder RTL_BITMAP strukturer finns i avsnittet Relaterade artiklar. Anroparen av dessa RtlXxx rutiner ansvarar för att allokera lagringen för RTL_BITMAP-strukturen och för bufferten som innehåller bitmappen. Den här bufferten måste börja på en gräns på 4 byte i minnet och måste vara en multipel av 4 byte i längd. Bitmappen börjar i början av bufferten men kan innehålla valfritt antal bitar som får plats i den allokerade bufferten.
Innan du anger en RTL_BITMAP struktur som en parameter till en Rtl-Xxx-rutin anropar du rutinen RtlInitializeBitMap för att initiera strukturen. Indataparametrarna i den här rutinen är en pekare till en buffert som innehåller bitmappen och bitmappens storlek i bitar. RtlInitializeBitMap ändrar inte innehållet i bufferten.
Om anroparen allokerar lagring för RTL_BITMAP-strukturen och bitmappen i paginerat minne, måste anroparen köras på IRQL <= APC_LEVEL när en pekare till denna struktur skickas som parameter till någon av de RtlXxx-rutiner som anges i Relaterade artiklar-sektionen. Om anroparen allokerar lagringen från osidat minne (eller, på motsvarande sätt, från låst sidminne) kan anroparen köras på vilken som helst IRQL-nivå när den anropar RtlXxx rutin.
Rubrik: Wdm.h. Inkludera: Wdm.h, Ntddk.h, Ntifs.h.
RTL_RUN_ONCE
Den RTL_RUN_ONCE strukturen är en ogenomskinlig struktur som lagrar informationen för en engångsinitiering.
Drivrutiner måste initiera den här strukturen genom att anropa RtlRunOnceInitialize rutin innan de skickar den till andra RtlRunOnceXxx rutiner.
Rubrik: Ntddk.h. Inkludera: Ntddk.h.
SÄKERHETSÄMNESKONTEXT
Den SECURITY_SUBJECT_CONTEXT strukturen är en ogenomskinlig struktur som representerar säkerhetskontexten inom vilken en viss åtgärd äger rum. Drivrutiner får inte ändra eller försöka få direkt åtkomst till några element i den här strukturen för att fatta säkerhetsbeslut. För att undvika säkerhetsproblem i auktorisering skickar du i stället den här ogenomskinliga strukturen i anrop till SeAccessCheck eller SePrivilegeCheck.
Rubrik: Wdm.h. Inkludera: Wdm.h, Ntddk.h, Ntifs.h.
SLIST_HEADER
En SLIST_HEADER struktur är en ogenomskinlig struktur som fungerar som huvud för en sekvenserad enkelt länkad lista. Mer information finns i Singly och Dubbla länkade listor.
På 64-bitarsplattformar måste SLIST_HEADER strukturer vara justerade till 16 byte.
Rubrik: Wdm.h. Inkludera: Wdm.h, Ntddk.h, Ntifs.h.
XSTATE_SAVE
Den XSTATE_SAVE strukturen är en ogenomskinlig struktur som beskriver den utökade processortillståndsinformation som en drivrutin i kernelläge sparar och återställer.
typedef struct _XSTATE_SAVE {
... // opaque
} XSTATE_SAVE, *PXSTATE_SAVE;
Alla medlemmar är ogenomskinliga.
KeSaveExtendedProcessorState och KeRestoreExtendedProcessorState rutiner använder den här strukturen.
Rubrik: Wdm.h. Inkludera: Wdm.h, Ntddk.h, Ntifs.h.
Relaterade artiklar
ExAllocateFromNPagedLookasideList
ExAllocateFromPagedLookasideList
ExInitializePagedLookasideList
ExInitializeNPagedLookasideList
KeAcquireInStackQueuedSpinLock
KeAcquireInStackQueuedSpinLockAtDpcLevel
KeRestoreExtendedProcessorState
KeDeregisterBugCheckReasonCallback
sv-SE: KeRegisterBugCheckReasonCallback
KeReleaseInStackQueuedSpinLock
KeReleaseInStackQueuedSpinLockFromDpcLevel
PsGetProcessCreateTimeQuadPart