Strutture opache del kernel di Windows

Questo articolo elenca e descrive le strutture opache del kernel di Windows. Per molte di queste strutture, i driver non devono accedere o modificare i membri, ma devono invece usare routine fornite dal sistema per accedere alle informazioni. Per informazioni dettagliate, vedere ogni struttura.

EPROCESS

La struttura EPROCESS è una struttura opaca che funge da oggetto processo per un processo.

Alcune routine, ad esempio PsGetProcessCreateTimeQuadPart, usano EPROCESS per identificare il processo su cui operare. I driver possono usare la routine PsGetCurrentProcess per ottenere un puntatore all'oggetto process per il processo corrente e può usare la routine ObReferenceObjectByHandle per ottenere un puntatore all'oggetto processo associato all'handle specificato. La variabile globale PsInitialSystemProcess punta all'oggetto process per il processo di sistema.

Un oggetto process è un oggetto Object Manager. I driver devono usare routine di Object Manager, ad esempio ObReferenceObject e ObDereferenceObject per mantenere il conteggio dei riferimenti dell'oggetto.

Intestazione: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.

ETHREAD

La struttura ETHREAD è una struttura opaca che funge da oggetto thread per un thread.

Alcune routine, ad esempio PsIsSystemThread, usano ETHREAD per identificare il thread da usare. I driver possono usare la routine PsGetCurrentThread per ottenere un puntatore all'oggetto thread per il thread corrente e può usare la routine ObReferenceObjectByHandle per ottenere un puntatore all'oggetto thread associato all'handle specificato.

Un oggetto thread è un oggetto Object Manager. I driver devono usare routine di Object Manager, ad esempio ObReferenceObject e ObDereferenceObject per mantenere il conteggio dei riferimenti dell'oggetto.

Intestazione: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.

EX_RUNDOWN_REF

La struttura EX_RUNDOWN_REF è una struttura di sistema opaca che contiene informazioni sullo stato della protezione da run-down per un oggetto condiviso associato.

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

Le routine di protezione da run-down elencate nella parte inferiore di questa pagina accettano tutti un puntatore a una struttura EX_RUNDOWN_REF come primo parametro.

Per altre informazioni, vedere Run-Down Protection. Intestazione: Wdm.h. Includere Wdm.h.

EX_TIMER

La struttura EX_TIMER è una struttura opaca usata dal sistema operativo per rappresentare un oggetto timer EX_TIMER .

typedef struct _EX_TIMER *PEX_TIMER;

Tutti i membri di questa struttura sono opachi ai driver.

Le routine Ex XxxTimer seguenti richiedono un puntatore a una struttura EX_TIMER allocata dal sistema come parametro di input:

Il sistema operativo crea oggetti timer basati su EX_TIMER. Per ottenere un oggetto timer di questo tipo, il driver chiama la routine ExAllocateTimer . Quando questo oggetto non è più necessario, il driver è responsabile dell'eliminazione dell'oggetto chiamando ExDeleteTimer.

Per altre informazioni, vedere Routine timer exxxxe oggetti EX_TIMER.

Intestazione: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.

FAST_MUTEX

Una struttura FAST_MUTEX è una struttura di dati opaca che rappresenta un mutex veloce. La routine ExInitializeFastMutex inizializza questa struttura.

Per altre informazioni sui mutex veloci, vedere Mutex veloci e Mutex sorvegliati.

Intestazione: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.

IO_CSQ

La struttura IO_CSQ è una struttura opaca usata per specificare le routine di coda di IRP annullate sicure del driver. Non impostare direttamente i membri di questa struttura. Usare IoCsqInitialize o IoCsqInitializeEx per inizializzare questa struttura.

Per una panoramica dell'uso delle code IRP non sicure, vedere Cancel-Safe IRP Queues.

Disponibile in Microsoft Windows XP e versioni successive del sistema operativo Windows.

Intestazione: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.

IO_CSQ_IRP_CONTEXT

La struttura IO_CSQ_IRP_CONTEXT è una struttura di dati opaca usata per specificare il contesto IRP per un'IRP nella coda IRP annullata del driver. Le routine IoCsqInsertIrp, IoCsqInsertIrpEx e IoCsqRemoveIrp usano questa struttura come chiave per identificare determinati IRP nella coda.

Per una panoramica dell'uso delle code IRP non sicure, vedere Cancel-Safe IRP Queues.

Disponibile in Microsoft Windows XP e versioni successive del sistema operativo Windows.

Intestazione: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.

IO_WORKITEM

La struttura IO_WORKITEM è una struttura opaca che descrive un elemento di lavoro per un thread di lavoro di sistema.

Un driver può allocare un elemento di lavoro chiamando IoAllocateWorkItem. In alternativa, un driver può allocare il proprio buffer e quindi chiamare IoInitializeWorkItem per inizializzare tale buffer come elemento di lavoro.

Qualsiasi elemento di lavoro allocato da IoAllocateWorkItem deve essere liberato da IoFreeWorkItem. Qualsiasi memoria inizializzata da IoInitializeWorkItem deve essere non inizializzata da IoUninitializeWorkItem prima che possa essere liberata.

Per altre informazioni sugli elementi di lavoro, vedere Thread di lavoro di sistema.

Intestazione: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.

KBUGCHECK_CALLBACK_RECORD

La struttura KBUGCHECK_CALLBACK_RECORD è una struttura opaca usata dalle routine KeRegisterBugCheckCallback e KeDeregisterBugCheckCallback.

La struttura KBUGCHECK_CALLBACK_RECORD viene utilizzata dalle routine KeRegisterBugCheckReasonCallback e KeDeregisterBugCheckReasonCallback per il mantenimento delle librerie.

La struttura deve essere allocata in memoria residente, ad esempio un pool non di paging. Utilizzare la routine KeInitializeCallbackRecord per inizializzare la struttura prima di usarla.

Intestazione: Ntddk.h. Include: Ntddk.h.

KBUGCHECK_REASON_CALLBACK_RECORD

La struttura KBUGCHECK_REASON_CALLBACK_RECORD è una struttura opaca usata dalle routine KeRegisterBugCheckReasonCallback e KeDeregisterBugCheckReasonCallback .

La struttura KBUGCHECK_REASON_CALLBACK_RECORD viene utilizzata dalle routine KeRegisterBugCheckReasonCallback e KeDeregisterBugCheckReasonCallback per la contabilità.

La struttura deve essere allocata in memoria residente, ad esempio un pool non di paging. Utilizzare la routine KeInitializeCallbackRecord per inizializzare la struttura prima di usarla.

Disponibile in Microsoft Windows XP con Service Pack 1 (SP1), Windows Server 2003 e versioni successive del sistema operativo Windows.

Intestazione: Ntddk.h. Include: Ntddk.h.

KDPC

La struttura KDPC è una struttura opaca che rappresenta un oggetto DPC. Non impostare direttamente i membri di questa struttura. Vedere DPC Objects and DPCs (Oggetti DPC e DPC).

Intestazione: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.

KFLOATING_SAVE

La struttura KFLOATING_SAVE è una struttura opaca che descrive lo stato a virgola mobile salvato dalla routine KeSaveFloatingPointState .

Usare KeRestoreFloatingPointState per ripristinare lo stato a virgola mobile.

Intestazione: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.

KGUARDED_MUTEX

La struttura KGUARDED_MUTEX è una struttura opaca che rappresenta un mutex sorvegliato.

Usare KeInitializeGuardedMutex per inizializzare una struttura KGUARDED_MUTEX come mutex sorvegliato.

I mutex sorvegliati devono essere allocati da un pool non di paging.

Per altre informazioni sui mutex sorvegliati, vedi Mutex veloci e Mutex sorvegliati.

Intestazione: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.

KINTERRUPT

Una struttura KINTERRUPT è una struttura opaca che rappresenta un'interruzione del sistema.

IoConnectInterruptEx fornisce un puntatore alla struttura KINTERRUPT per l'interrupt quando il driver registra una routine InterruptService o InterruptMessageService . Il driver usa questo puntatore durante l'acquisizione o il rilascio del blocco di spin di interruzione per l'interrupt. Il driver usa anche questo puntatore quando si annulla la registrazione di una routine InterruptService .

Intestazione: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.

KLOCK_QUEUE_HANDLE

La struttura KLOCK_QUEUE_HANDLE è una struttura opaca che descrive un blocco di rotazione in coda. Il driver alloca la struttura KLOCK_QUEUE_HANDLE e la passa a KeAcquireInStackQueuedSpinLock e KeAcquireInStackQueuedSpinLockAtDpcLevel per acquisire il blocco di selezione in coda. Tali routine inizializzano la struttura per rappresentare il blocco di rotazione in coda. Il driver passa la struttura a KeReleaseInStackQueuedSpinLock e KeReleaseInStackQueuedSpinLockFromDpcLevel quando rilascia il blocco di selezione.

Per altre informazioni, vedere Blocchi di selezione in coda.

Intestazione: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.

KTIMER

La struttura KTIMER è una struttura opaca che rappresenta un oggetto timer. Non impostare direttamente i membri di questa struttura. Per altre informazioni, vedere Oggetti timer e CONTROLLER di dominio.

Intestazione: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.

LOOKASIDE_LIST_EX

La struttura LOOKASIDE_LIST_EX descrive un elenco lookaside.

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

Un elenco lookaside è un pool di buffer a dimensione fissa che il driver può gestire localmente per ridurre il numero di chiamate alle routine di allocazione di sistema, migliorando così le prestazioni. I buffer sono di dimensioni uniformi e vengono archiviati come voci nell'elenco lookaside.

I driver devono considerare la struttura LOOKASIDE_LIST_EX come opaca. I driver che accedono ai membri della struttura o che hanno dipendenze dai percorsi di questi membri potrebbero non rimanere portabili e interoperabili con altri driver.

La sezione Articoli correlati contiene un elenco delle routine che usano questa struttura.

Per altre informazioni sugli elenchi lookaside, vedere Uso di lookaside Elenchi.

Nelle piattaforme a 64 bit questa struttura deve essere allineata a 16 byte.

Supportato a partire da Windows Vista.

Intestazione: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.

NPAGED_LOOKASIDE_LIST

La struttura NPAGED_LOOKASIDE_LIST è una struttura opaca che descrive un elenco lookaside di buffer a dimensione fissa allocati da un pool non di paging. Il sistema crea nuove voci e elimina le voci inutilizzate nell'elenco in base alle esigenze. Per i buffer a dimensione fissa, l'uso di un elenco lookaside è più rapido rispetto all'allocazione diretta della memoria.

Utilizzare ExInitializeNPagedLookasideList per inizializzare l'elenco lookaside. Utilizzare ExAllocateFromNPagedLookasideList per allocare un buffer dall'elenco e ExFreeToNPagedLookasideList per restituire un buffer all'elenco.

I driver devono sempre liberare esplicitamente tutti gli elenchi lookaside creati prima dello scaricamento. Si tratta di un grave errore di programmazione da eseguire in caso contrario. Utilizzare ExDeleteNPagedLookasideList per liberare l'elenco.

I driver possono anche usare elenchi lookaside per il pool di paging. A partire da Windows 2000, una struttura PAGED_LOOKASIDE_LIST descrive un elenco lookaside contenente buffer di paging. A partire da Windows Vista, una struttura LOOKASIDE_LIST_EX può descrivere un elenco lookaside contenente buffer di paging o non di paging. Per altre informazioni, vedere Uso delle Elenchi Lookaside.

Nelle piattaforme a 64 bit questa struttura deve essere allineata a 16 byte.

Supportato a partire da Windows 2000.

Intestazione: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.

Object_Type

OBJECT_TYPE è una struttura opaca che specifica il tipo di oggetto di un handle. Per altre informazioni, vedere ObReferenceObjectByHandle.

Intestazione: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.

PAGED_LOOKASIDE_LIST

La struttura PAGED_LOOKASIDE_LIST è una struttura opaca che descrive un elenco lookaside di buffer a dimensione fissa allocati dal pool di paging. Il sistema crea nuove voci e elimina le voci inutilizzate nell'elenco in base alle esigenze. Per i buffer a dimensione fissa, l'uso di un elenco lookaside è più rapido rispetto all'allocazione diretta della memoria.

Utilizzare ExInitializePagedLookasideList per inizializzare l'elenco lookaside. Utilizzare ExAllocateFromPagedLookasideList per allocare un buffer dall'elenco e ExFreeToPagedLookasideList per restituire un buffer all'elenco.

I driver devono sempre liberare esplicitamente tutti gli elenchi lookaside creati prima dello scaricamento. Si tratta di un grave errore di programmazione da eseguire in caso contrario. Utilizzare ExDeletePagedLookasideList per liberare l'elenco.

I driver possono anche usare elenchi lookaside per il pool non di paging. A partire da Windows 2000, una struttura NPAGED_LOOKASIDE_LIST descrive un elenco lookaside contenente buffer non di paging. A partire da Windows Vista, una struttura LOOKASIDE_LIST_EX può descrivere un elenco lookaside contenente buffer di paging o non di paging. Per altre informazioni, vedere Uso delle Elenchi Lookaside.

Nelle piattaforme a 64 bit questa struttura deve essere allineata a 16 byte.

Supportato a partire da Windows 2000.

Intestazione: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.

RTL_BITMAP

La struttura RTL_BITMAP è una struttura opaca che descrive una bitmap.

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

Non accedere direttamente ai membri di questa struttura. I driver con dipendenze dai percorsi dei membri o che accedono direttamente ai valori dei membri potrebbero non rimanere compatibili con le versioni future del sistema operativo Windows.

La struttura RTL_BITMAP funge da intestazione per una bitmap unidimensionale di lunghezza arbitraria per utilizzo generico. Un driver può usare una bitmap di questo tipo come un modo economico per tenere traccia di un set di elementi riutilizzabili. Ad esempio, un file system può usare bitmap per tenere traccia dei cluster e dei settori su un disco rigido già allocati per contenere i dati dei file.

Per un elenco delle routine RtlXxx che usano strutture RTL_BITMAP , vedere la sezione Articoli correlati . Il chiamante di queste routine RtlXxx è responsabile dell'allocazione dell'archiviazione per la struttura RTL_BITMAP e per il buffer che contiene la bitmap. Questo buffer deve iniziare su un limite a quattro byte in memoria e deve avere una lunghezza multipla di quattro byte. La bitmap inizia all'inizio del buffer, ma può contenere qualsiasi numero di bit che rientrano nel buffer allocato.

Prima di fornire una struttura RTL_BITMAP come parametro a una routine RtlXxx , chiamare la routine RtlInitializeBitMap per inizializzare la struttura. I parametri di input di questa routine sono un puntatore a un buffer che contiene la bitmap e le dimensioni, in bit, della bitmap. RtlInitializeBitMap non modifica il contenuto di questo buffer.

Se il chiamante alloca lo spazio di archiviazione per la struttura RTL_BITMAP e la bitmap nella memoria di paging, il chiamante deve essere in esecuzione in IRQL <= APC_LEVEL quando passa un puntatore a questa struttura come parametro a una delle routine RtlXxx elencate nella sezione Articoli correlati . Se il chiamante alloca l'archiviazione dalla memoria non di paging (o, in modo equivalente, dalla memoria di paging bloccata), il chiamante può essere in esecuzione in qualsiasi IRQL quando chiama la routine RtlXxx .

Supportato in Windows 2000 e versioni successive di Windows.

Intestazione: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.

RTL_RUN_ONCE

La struttura RTL_RUN_ONCE è una struttura opaca che archivia le informazioni per un'inizializzazione una tantum.

I driver devono inizializzare questa struttura chiamando la routine RtlRunOnceInitialize prima di passarla a qualsiasi altra routine RtlRunOnceXxx .

Disponibile in Windows Vista e versioni successive del sistema operativo Windows.

Intestazione: Ntddk.h. Include: Ntddk.h.

SECURITY_SUBJECT_CONTEXT

La struttura SECURITY_SUBJECT_CONTEXT è una struttura opaca che rappresenta il contesto di sicurezza all'interno del quale viene eseguita una determinata operazione. I driver non devono modificare o tentare di accedere direttamente a tutti i membri di questa struttura per prendere decisioni di sicurezza. Per evitare problemi di sicurezza nell'autorizzazione, passare invece questa struttura opaca nelle chiamate a SeAccessCheck o SePrivilegeCheck.

Intestazione: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.

SLIST_HEADER

Una struttura SLIST_HEADER è una struttura opaca che funge da intestazione per un elenco collegato sequenziato. Per altre informazioni, vedere Singly e Doubly Linked Elenchi.For more information, see Singly and Doubly Linked Elenchi.

Nelle piattaforme a 64 bit SLIST_HEADER strutture devono essere allineate a 16 byte.

Intestazione: Wdm.h. Include: Wdm.h, Ntddk.h, Ntifs.h.

XSTATE_SAVE

La struttura XSTATE_SAVE è una struttura opaca che descrive le informazioni sullo stato del processore esteso salvate e ripristinate da un driver in modalità kernel.

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

Tutti i membri sono opachi.

Le routine KeSaveExtendedProcessorState e KeRestoreExtendedProcessorState usano questa struttura.

Supportato in Windows 7 e versioni successive del sistema operativo Windows.

Intestazione: Wdm.h. Include: 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

Lettura dei dati di callback di controllo bug

RtlRunOnceBeginInitialize

RtlRunOnceComplete

RtlRunOnceExecuteOnce

RtlRunOnceInitialize

RunOnceInitialization

Protezione run-down

SeAccessCheck

SeAssignSecurity

SeAssignSecurityEx