Condividi tramite


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 alcun membro, 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 utilizzare la routine PsGetCurrentProcess per ottenere un puntatore all'oggetto processo per il processo corrente e utilizzare la routine ObReferenceObjectByHandle per ottenere un puntatore all'oggetto processo associato all'handle specificato. La variabile globale PsInitialSystemProcess punta all'oggetto processo per il processo di sistema.

Un oggetto processo è un oggetto Di Gestione oggetti. I driver devono usare routine di Gestione oggetti, 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 su cui operare. I driver possono utilizzare la routine PsGetCurrentThread per ottenere un puntatore all'oggetto thread per il thread corrente e utilizzare la routine ObReferenceObjectByHandle per ottenere un puntatore all'oggetto thread associato all'handle specificato.

Un oggetto thread è un oggetto Di Gestione oggetti. I driver devono usare routine di Gestione oggetti, 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 di run-down elencate nella parte inferiore della pagina accettano un puntatore a una struttura EX_RUNDOWN_REF come primo parametro.

Per altre informazioni, vedere Run-Down Protection.For more information, see 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 per i driver.

Le routine exxxxtimer seguenti richiedono un puntatore a una struttura di 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 di 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 IRP annullabili del driver. Non impostare direttamente i membri di questa struttura. Usare IoCsqInitialize o IoCsqInitializeEx per inizializzare questa struttura.

Per una panoramica su come usare code IRP sicure per l'annullamento, vedere Cancel-Safe IRP Queues (Code IRP sicure di annullamento).

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 di annullamento del driver. Le routine IoCsqInsertIrp, IoCsqInsertIrpEx e IoCsqRemoveIrp usano questa struttura come chiave per identificare determinati IRP nella coda.

Per una panoramica su come usare code IRP sicure per l'annullamento, vedere Cancel-Safe IRP Queues (Code IRP sicure di annullamento).

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 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 la contabilità.

La struttura deve essere allocata nella 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 nella 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 Oggetti DPC e CONTROLLER di dominio.

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 pool non di paging.

Per altre informazioni sui mutex sorvegliati, vedere 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 interrupt al 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 rotazione interrupt 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 selezione 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 selezione in coda. Il driver passa la struttura a KeReleaseInStackQueuedSpinLock e KeReleaseInStackQueuedSpinLockFromDpcLevel quando rilascia il blocco di selezione.

Per altre informazioni, vedere Blocchi spin 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 del 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 dalle posizioni 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 degli elenchi Lookaside.

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

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 dei 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. Usare ExDeleteNPagedLookasideList per liberare l'elenco.

I driver possono anche usare elenchi lookaside per il pool di pagine. Una struttura PAGED_LOOKASIDE_LIST descrive un elenco lookaside contenente buffer di paging. Una struttura LOOKASIDE_LIST_EX può descrivere un elenco lookaside contenente buffer di paging o non di paging. Per altre informazioni, vedere Uso degli elenchi Lookaside.

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

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 dei 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. Una struttura NPAGED_LOOKASIDE_LIST descrive un elenco lookaside contenente buffer non di paging. Una struttura LOOKASIDE_LIST_EX può descrivere un elenco lookaside contenente buffer di paging o non di paging. Per altre informazioni, vedere Uso degli elenchi Lookaside.

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

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 monodimensionale di lunghezza arbitraria. 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 in 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 di 4 byte in memoria e deve avere una lunghezza multipla di 4 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 Rtl Xxx, 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 lo spazio di 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 .

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 monouso.

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

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 particolare 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 Elenchi collegati Singly e Doubly.

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.

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 dei bug

RtlRunOnceBeginInitialize

RtlRunOnceComplete

RtlRunOnceExecuteOnce

RtlRunOnceInitialize

RunOnceInitialization

Protezione run-down

SeAccessCheck

SeAssignSecurity

SeAssignSecurityEx