Partager via


Structures opaques du noyau Windows

Cet article répertorie et décrit les structures opaques du noyau Windows. Pour la plupart de ces structures, les pilotes ne doivent pas accéder ou modifier les membres, mais doivent utiliser plutôt des routines fournies par le système pour accéder aux informations. Pour plus d’informations, consultez chaque structure.

EPROCESS

La structure EPROCESS est une structure opaque qui sert d’objet de processus pour un processus.

Certaines routines, telles que PsGetProcessCreateTimeQuadPart, utilisent EPROCESS pour identifier le processus sur lequel opérer. Les pilotes peuvent utiliser la routine PsGetCurrentProcess pour obtenir un pointeur vers l’objet de processus pour le processus actuel et utiliser la routine ObReferenceObjectByHandle pour obtenir un pointeur vers l’objet de processus associé au handle spécifié. La variable globale PsInitialSystemProcess pointe vers l’objet de processus pour le processus système.

Un objet de processus est un objet Gestionnaire d’objets. Les pilotes doivent utiliser des routines du Gestionnaire d’objets telles que ObReferenceObject et ObDereferenceObject pour conserver le nombre de références de l’objet.

En-tête : Wdm.h. Include : Wdm.h, Ntddk.h, Ntifs.h.

ETHREAD

La structure ETHREAD est une structure opaque qui sert d’objet thread pour un thread.

Certaines routines, telles que PsIsSystemThread, utilisent ETHREAD pour identifier le thread à utiliser. Les pilotes peuvent utiliser la routine PsGetCurrentThread pour obtenir un pointeur vers l’objet thread pour le thread actuel et utiliser la routine ObReferenceObjectByHandle pour obtenir un pointeur vers l’objet thread associé au handle spécifié.

Un objet thread est un objet Gestionnaire d’objets. Les pilotes doivent utiliser des routines du Gestionnaire d’objets telles que ObReferenceObject et ObDereferenceObject pour conserver le nombre de références de l’objet.

En-tête : Wdm.h. Include : Wdm.h, Ntddk.h, Ntifs.h.

EX_RUNDOWN_REF

La structure EX_RUNDOWN_REF est une structure système opaque qui contient des informations sur l’état de la protection d’exécution pour un objet partagé associé.

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

Les routines de protection d’exécution répertoriées en bas de cette page prennent tous un pointeur vers une structure EX_RUNDOWN_REF comme premier paramètre.

Pour plus d’informations, consultez Run-Down Protection. En-tête : Wdm.h. Incluez Wdm.h.

EX_TIMER

La structure EX_TIMER est une structure opaque utilisée par le système d’exploitation pour représenter un objet minuteur EX_TIMER .

typedef struct _EX_TIMER *PEX_TIMER;

Tous les membres de cette structure sont opaques pour les pilotes.

Les routines ExXxxTimer suivantes nécessitent un pointeur vers une structure EX_TIMER allouée par le système en tant que paramètre d’entrée :

Le système d’exploitation crée des objets de minuteur basés sur EX_TIMER. Pour obtenir un tel objet minuteur, votre pilote appelle la routine ExAllocateTimer. Lorsque cet objet n’est plus nécessaire, le pilote est responsable de la suppression de l’objet en appelant ExDeleteTimer.

Pour plus d’informations, consultez Routines du minuteur ExXxxet objets EX_TIMER.

En-tête : Wdm.h. Include : Wdm.h, Ntddk.h, Ntifs.h.

FAST_MUTEX

Une structure FAST_MUTEX est une structure de données opaque qui représente un mutex rapide. La routine ExInitializeFastMutex initialise cette structure.

Pour plus d’informations sur les mutex rapides, consultez Mutexes rapides et Mutexes guarded.

En-tête : Wdm.h. Include : Wdm.h, Ntddk.h, Ntifs.h.

IO_CSQ

La structure IO_CSQ est une structure opaque utilisée pour spécifier les routines de file d’attente IRP annulées du pilote. Ne définissez pas directement les membres de cette structure. Utilisez IoCsqInitialize ou IoCsqInitializeEx pour initialiser cette structure.

Pour obtenir une vue d’ensemble de l’utilisation des files d’attente IRP annulées, consultez Files d’attente IRP Cancel-Safe.

Disponible sur Microsoft Windows XP et versions ultérieures du système d’exploitation Windows.

En-tête : Wdm.h. Include : Wdm.h, Ntddk.h, Ntifs.h.

IO_CSQ_IRP_CONTEXT

La structure IO_CSQ_IRP_CONTEXT est une structure de données opaque utilisée pour spécifier le contexte IRP d’un IRP dans la file d’attente IRP du pilote. Les routines IoCsqInsertIrp, IoCsqInsertIrpEx et IoCsqRemoveIrp utilisent cette structure en tant que clé pour identifier des irPs spécifiques dans la file d’attente.

Pour obtenir une vue d’ensemble de l’utilisation des files d’attente IRP annulées, consultez Files d’attente IRP Cancel-Safe.

Disponible sur Microsoft Windows XP et versions ultérieures du système d’exploitation Windows.

En-tête : Wdm.h. Include : Wdm.h, Ntddk.h, Ntifs.h.

IO_WORKITEM

La structure IO_WORKITEM est une structure opaque qui décrit un élément de travail pour un thread de travail système.

Un pilote peut allouer un élément de travail en appelant IoAllocateWorkItem. Vous pouvez également allouer sa propre mémoire tampon, puis appeler IoInitializeWorkItem pour initialiser cette mémoire tampon en tant qu’élément de travail.

Tout élément de travail que IoAllocateWorkItem alloue doit être libéré par IoFreeWorkItem. Toute mémoire initialisée par IoInitializeWorkItem doit être non initialisée par IoUninitializeWorkItem avant de pouvoir être libérée.

Pour plus d’informations sur les éléments de travail, consultez Threads de travail système.

En-tête : Wdm.h. Include : Wdm.h, Ntddk.h, Ntifs.h.

KBUGCHECK_CALLBACK_RECORD

La structure KBUGCHECK_CALLBACK_RECORD est une structure opaque que les routines KeRegisterBugCheckCallback et KeDeregisterBugCheckCallback utilisent.

La structure KBUGCHECK_CALLBACK_RECORD est utilisée par les routines KeRegisterBugCheckReasonCallback et KeDeregisterBugCheckReasonCallback pour la comptabilité.

La structure doit être allouée en mémoire résidente, telle que le pool non paginé. Utilisez la routine KeInitializeCallbackRecord pour initialiser la structure avant de l’utiliser.

En-tête : Ntddk.h. Inclure : Ntddk.h.

KBUGCHECK_REASON_CALLBACK_RECORD

La structure KBUGCHECK_REASON_CALLBACK_RECORD est une structure opaque que les routines KeRegisterBugCheckReasonCallback et KeDeregisterBugCheckReasonCallback utilisent.

La structure KBUGCHECK_REASON_CALLBACK_RECORD est utilisée par les routines KeRegisterBugCheckReasonCallback et KeDeregisterBugCheckReasonCallback pour la comptabilité.

La structure doit être allouée en mémoire résidente, telle que le pool non paginé. Utilisez la routine KeInitializeCallbackRecord pour initialiser la structure avant de l’utiliser.

Disponible sur Microsoft Windows XP avec Service Pack 1 (SP1), Windows Server 2003 et versions ultérieures du système d’exploitation Windows.

En-tête : Ntddk.h. Inclure : Ntddk.h.

KDPC

La structure KDPC est une structure opaque qui représente un objet DPC. Ne définissez pas directement les membres de cette structure. Consultez objets DPC et DPCs.

En-tête : Wdm.h. Include : Wdm.h, Ntddk.h, Ntifs.h.

KFLOATING_SAVE

La structure KFLOATING_SAVE est une structure opaque qui décrit l’état à virgule flottante enregistré par la routine KeSaveFloatingPointState .

Utilisez KeRestoreFloatingPointState pour restaurer l’état à virgule flottante.

En-tête : Wdm.h. Include : Wdm.h, Ntddk.h, Ntifs.h.

KGUARDED_MUTEX

La structure KGUARDED_MUTEX est une structure opaque qui représente un mutex protégé.

Utilisez KeInitializeGuardedMutex pour initialiser une structure KGUARDED_MUTEX en tant que mutex protégé.

Les mutex gardés doivent être alloués à partir d’un pool non paginé.

Pour plus d’informations sur les mutex guarded, consultez Mutexes rapides et Mutex guarded.

En-tête : Wdm.h. Include : Wdm.h, Ntddk.h, Ntifs.h.

KINTERRUPT

Une structure KINTERRUPT est une structure opaque qui représente une interruption du système.

IoConnectInterruptEx fournit un pointeur vers la structure KINTERRUPT pour l’interruption lorsque le pilote inscrit une routine InterruptService ou InterruptMessageService. Le pilote utilise ce pointeur lors de l’acquisition ou de la libération du verrou de rotation d’interruption pour l’interruption. Le pilote utilise également ce pointeur lors de l’annulation de l’inscription d’une routine InterruptService .

En-tête : Wdm.h. Include : Wdm.h, Ntddk.h, Ntifs.h.

KLOCK_QUEUE_HANDLE

La structure KLOCK_QUEUE_HANDLE est une structure opaque qui décrit un verrou de rotation en file d’attente. Le pilote alloue la structure KLOCK_QUEUE_HANDLE et le transmet à KeAcquireInStackQueuedSpinLock et KeAcquireInStackQueuedSpinLockAtDpcLevel pour acquérir le verrou de rotation mis en file d’attente. Ces routines initialisent la structure pour représenter le verrou de rotation mis en file d’attente. Le pilote passe la structure à KeReleaseInStackQueuedSpinLock et KeReleaseInStackQueuedSpinLockFromDpcLevel lors de la libération du verrou de rotation.

Pour plus d’informations, consultez Verrous de rotation mis en file d’attente.

En-tête : Wdm.h. Include : Wdm.h, Ntddk.h, Ntifs.h.

KTIMER

La structure KTIMER est une structure opaque qui représente un objet minuteur. Ne définissez pas directement les membres de cette structure. Pour plus d’informations, consultez Objets du minuteur et contrôleurs de domaine.

En-tête : Wdm.h. Include : Wdm.h, Ntddk.h, Ntifs.h.

LOOKASIDE_LIST_EX

La structure LOOKASIDE_LIST_EX décrit une liste de choix.

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

Une liste de choix est un pool de mémoires tampons de taille fixe que le pilote peut gérer localement pour réduire le nombre d’appels aux routines d’allocation système, ce qui améliore les performances. Les mémoires tampons sont de taille uniforme et sont stockées en tant qu’entrées dans la liste lookaside.

Les pilotes doivent traiter la structure LOOKASIDE_LIST_EX comme opaque. Les pilotes qui accèdent aux membres de la structure ou qui ont des dépendances sur les emplacements de ces membres peuvent ne pas rester portables et interopérables avec d’autres pilotes.

La section Articles connexes contient une liste des routines qui utilisent cette structure.

Pour plus d’informations sur les listes lookaside, consultez Utilisation des listes lookaside.

Sur les plateformes 64 bits, cette structure doit être alignée sur 16 octets.

En-tête : Wdm.h. Include : Wdm.h, Ntddk.h, Ntifs.h.

NPAGED_LOOKASIDE_LIST

La structure NPAGED_LOOKASIDE_LIST est une structure opaque qui décrit une liste de recherche de mémoires tampons de taille fixe allouées à partir d’un pool non paginé. Le système crée de nouvelles entrées et détruit les entrées inutilisées dans la liste si nécessaire. Pour les mémoires tampons de taille fixe, l’utilisation d’une liste lookaside est plus rapide que l’allocation directe de la mémoire.

Utilisez ExInitializeNPagedLookasideList pour initialiser la liste lookaside. Utilisez ExAllocateFromNPagedLookasideList pour allouer une mémoire tampon à partir de la liste et ExFreeToNPagedLookasideList pour renvoyer une mémoire tampon à la liste.

Les pilotes doivent toujours libérer explicitement toutes les listes de lookaside qu’ils créent avant de décharger. Il s’agit d’une erreur de programmation sérieuse à faire dans le cas contraire. Utilisez ExDeleteNPagedLookasideList pour libérer la liste.

Les pilotes peuvent également utiliser des listes de lookaside pour le pool paginé. Une structure PAGED_LOOKASIDE_LIST décrit une liste de choix contenant des mémoires tampons paginées. Une structure LOOKASIDE_LIST_EX peut décrire une liste de choix contenant des mémoires tampons paginées ou non paginées. Pour plus d’informations, consultez Utilisation des listes lookaside.

Sur les plateformes 64 bits, cette structure doit être alignée sur 16 octets.

En-tête : Wdm.h. Include : Wdm.h, Ntddk.h, Ntifs.h.

Object_Type

OBJECT_TYPE est une structure opaque qui spécifie le type d’objet d’un handle. Pour plus d’informations, consultez ObReferenceObjectByHandle.

En-tête : Wdm.h. Include : Wdm.h, Ntddk.h, Ntifs.h.

PAGED_LOOKASIDE_LIST

La structure PAGED_LOOKASIDE_LIST est une structure opaque qui décrit une liste de mémoires tampons de taille fixe allouées à partir du pool paginé. Le système crée de nouvelles entrées et détruit les entrées inutilisées dans la liste si nécessaire. Pour les mémoires tampons de taille fixe, l’utilisation d’une liste lookaside est plus rapide que l’allocation directe de la mémoire.

Utilisez ExInitializePagedLookasideList pour initialiser la liste lookaside. Utilisez ExAllocateFromPagedLookasideList pour allouer une mémoire tampon à partir de la liste et ExFreeToPagedLookasideList pour renvoyer une mémoire tampon à la liste.

Les pilotes doivent toujours libérer explicitement toutes les listes de lookaside qu’ils créent avant de décharger. Il s’agit d’une erreur de programmation sérieuse à faire dans le cas contraire. Utilisez ExDeletePagedLookasideList pour libérer la liste.

Les pilotes peuvent également utiliser des listes lookaside pour le pool non paginé. Une structure NPAGED_LOOKASIDE_LIST décrit une liste de choix qui contient des mémoires tampons non paginés. Une structure LOOKASIDE_LIST_EX peut décrire une liste de choix contenant des mémoires tampons paginées ou non paginées. Pour plus d’informations, consultez Utilisation des listes lookaside.

Sur les plateformes 64 bits, cette structure doit être alignée sur 16 octets.

En-tête : Wdm.h. Include : Wdm.h, Ntddk.h, Ntifs.h.

RTL_BITMAP

La structure RTL_BITMAP est une structure opaque qui décrit une bitmap.

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

N’accédez pas directement aux membres de cette structure. Les pilotes qui ont des dépendances sur les emplacements des membres ou qui accèdent directement aux valeurs de membre peuvent ne pas rester compatibles avec les futures versions du système d’exploitation Windows.

La structure RTL_BITMAP sert d’en-tête pour une bitmap unidimensionnelle à usage général de longueur arbitraire. Un pilote peut utiliser une image bitmap comme un moyen économique de suivre un ensemble d’éléments réutilisables. Par exemple, un système de fichiers peut utiliser des bitmaps pour suivre les clusters et les secteurs sur un disque dur qui ont déjà été alloués pour contenir des données de fichier.

Pour obtenir la liste des routines RtlXxx qui utilisent RTL_BITMAP structures, consultez la section Articles connexes. L’appelant de ces routines RtlXxx est responsable de l’allocation du stockage pour la structure RTL_BITMAP et de la mémoire tampon qui contient la bitmap. Cette mémoire tampon doit commencer sur une limite de 4 octets en mémoire et doit être un multiple de 4 octets de longueur. La bitmap commence au début de la mémoire tampon, mais peut contenir n’importe quel nombre de bits qui correspondent à la mémoire tampon allouée.

Avant de fournir une structure RTL_BITMAP en tant que paramètre à une routine RtlXxx , appelez la routine RtlInitializeBitMap pour initialiser la structure. Les paramètres d’entrée de cette routine sont un pointeur vers une mémoire tampon qui contient la bitmap et la taille, en bits, de la bitmap. RtlInitializeBitMap ne modifie pas le contenu de cette mémoire tampon.

Si l’appelant alloue le stockage de la structure RTL_BITMAP et de la bitmap en mémoire paginée, l’appelant doit s’exécuter à IRQL <= APC_LEVEL lorsqu’il transmet un pointeur à cette structure en tant que paramètre à l’une des routines RtlXxx répertoriées dans la section Articles connexes. Si l’appelant alloue le stockage à partir de la mémoire non paginée (ou, de manière équivalente, à partir de la mémoire paginée verrouillée), l’appelant peut s’exécuter à n’importe quel irQL lorsqu’il appelle la routine RtlXxx .

En-tête : Wdm.h. Include : Wdm.h, Ntddk.h, Ntifs.h.

RTL_RUN_ONCE

La structure RTL_RUN_ONCE est une structure opaque qui stocke les informations pour une initialisation ponctuelle.

Les pilotes doivent initialiser cette structure en appelant la routine RtlRunOnceInitialize avant de le transmettre à d’autres routines RtlRunOnceXxx.

En-tête : Ntddk.h. Inclure : Ntddk.h.

SECURITY_SUBJECT_CONTEXT

La structure SECURITY_SUBJECT_CONTEXT est une structure opaque qui représente le contexte de sécurité dans lequel une opération particulière a lieu. Les pilotes ne doivent pas modifier ou essayer d’accéder directement aux membres de cette structure pour prendre des décisions de sécurité. Au lieu de cela, pour éviter les problèmes de sécurité dans l’autorisation, transmettez cette structure opaque dans les appels à SeAccessCheck ou SePrivilegeCheck.

En-tête : Wdm.h. Include : Wdm.h, Ntddk.h, Ntifs.h.

SLIST_HEADER

Une structure SLIST_HEADER est une structure opaque qui sert d’en-tête pour une liste liée séquencée. Pour plus d’informations, consultez Listes liées Singly et Doubly.

Sur les plateformes 64 bits, SLIST_HEADER structures doivent être alignées sur 16 octets.

En-tête : Wdm.h. Include : Wdm.h, Ntddk.h, Ntifs.h.

XSTATE_SAVE

La structure XSTATE_SAVE est une structure opaque qui décrit les informations d’état du processeur étendu qu’un pilote en mode noyau enregistre et restaure.

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

Tous les membres sont opaques.

Les routines KeSaveExtendedProcessorState et KeRestoreExtendedProcessorState utilisent cette structure.

En-tête : 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

Lecture des données de rappel de vérification des bogues

RtlRunOnceBeginInitialize

RtlRunOnceComplete

RtlRunOnceExecuteOnce

RtlRunOnceInitialize

RunOnceInitialization

Protection d’exécution

SeAccessCheck

SeAssignSecurity

SeAssignSecurityEx