Structures opaques du noyau Windows

Cet article répertorie et décrit les structures opaques du noyau Windows. Pour bon nombre de ces structures, les pilotes ne doivent pas accéder aux membres ou les modifier, mais utiliser 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 fonctionner. Les pilotes peuvent utiliser la routine PsGetCurrentProcess pour obtenir un pointeur vers l’objet de processus pour le processus en cours et peuvent 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 process 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. Inclure : 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 sur lequel fonctionner. Les pilotes peuvent utiliser la routine PsGetCurrentThread pour obtenir un pointeur vers l’objet thread pour le thread actif 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. Inclure : 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 la status de la protection contre l’exécution d’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 toutes un pointeur vers une structure de EX_RUNDOWN_REF comme premier paramètre.

Pour plus d’informations, consultez Protection contre les pannes. En-tête : Wdm.h. Incluez Wdm.h.

EX_TIMER

La structure EX_TIMER est une structure opaque que le système d’exploitation utilise 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 de minuteur ExXxx suivantes nécessitent un pointeur vers une structure de 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 de 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. Inclure : 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 gardés.

En-tête : Wdm.h. Inclure : 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 d’annulation et de sécurité 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 cancel-safe, consultez Cancel-Safe IRP Queues.

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

En-tête : Wdm.h. Inclure : 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 DPI du pilote. Les routines IoCsqInsertIrp, IoCsqInsertIrpEx et IoCsqRemoveIrp utilisent cette structure comme clé pour identifier des IIP particuliers dans la file d’attente.

Pour obtenir une vue d’ensemble de l’utilisation des files d’attente IRP cancel-safe, consultez Cancel-Safe IRP Queues.

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

En-tête : Wdm.h. Inclure : 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. Un pilote peut é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 alloué par IoAllocateWorkItem 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. Inclure : 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 DPC.

En-tête : Wdm.h. Inclure : 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. Inclure : 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 guarded doivent être alloués à partir d’un pool non paginé.

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

En-tête : Wdm.h. Inclure : 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 la désinscription d’une routine InterruptService .

En-tête : Wdm.h. Inclure : 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 mis en file d’attente. Le pilote alloue la structure KLOCK_QUEUE_HANDLE et la 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 transmet la structure à KeReleaseInStackQueuedSpinLock et KeReleaseInStackQueuedSpinLockFromDpcLevel lors de la libération du verrouillage de rotation.

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

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

KTIMER

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

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

LOOKASIDE_LIST_EX

La structure LOOKASIDE_LIST_EX décrit une liste de lookaside.

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

Une liste de lookaside 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 sous forme d’entrées dans la liste de 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 de lookaside, consultez Utilisation de lookaside Listes.

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

Pris en charge à partir de Windows Vista.

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

NPAGED_LOOKASIDE_LIST

La structure NPAGED_LOOKASIDE_LIST est une structure opaque qui décrit une liste de modèles 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 de lookaside est plus rapide que l’allocation directe de mémoire.

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

Les conducteurs doivent toujours libérer explicitement les listes de lookaside qu’ils créent avant le déchargement. Il s’agit d’une erreur de programmation grave à faire autrement. Utilisez ExDeleteNPagedLookasideList pour libérer la liste.

Les pilotes peuvent également utiliser des listes de recherche pour le pool paginé. À compter de Windows 2000, une structure PAGED_LOOKASIDE_LIST décrit une liste de lookaside qui contient des mémoires tampons paginées. À partir de Windows Vista, une structure LOOKASIDE_LIST_EX peut décrire une liste de lookaside qui contient des mémoires tampons paginées ou non paginées. Pour plus d’informations, consultez Utilisation de lookaside Listes.

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

Pris en charge à partir de Windows 2000.

En-tête : Wdm.h. Inclure : 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. Inclure : Wdm.h, Ntddk.h, Ntifs.h.

PAGED_LOOKASIDE_LIST

La structure PAGED_LOOKASIDE_LIST est une structure opaque qui décrit une liste de modèles de mémoires tampons de taille fixe allouées à partir d’un 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 de lookaside est plus rapide que l’allocation directe de mémoire.

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

Les conducteurs doivent toujours libérer explicitement les listes de lookaside qu’ils créent avant le déchargement. Il s’agit d’une erreur de programmation grave à faire autrement. Utilisez ExDeletePagedLookasideList pour libérer la liste.

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

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

Pris en charge à partir de Windows 2000.

En-tête : Wdm.h. Inclure : 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 des membres peuvent ne pas rester compatibles avec les versions futures du système d’exploitation Windows.

La structure RTL_BITMAP sert d’en-tête pour une bitmap à usage général unidimensionnel de longueur arbitraire. Un pilote peut utiliser une telle bitmap comme 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 d’un disque dur qui ont déjà été alloués pour stocker 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 pour la mémoire tampon qui contient la bitmap. Cette mémoire tampon doit commencer sur une limite de quatre octets en mémoire et doit être un multiple de quatre octets. La bitmap commence au début de la mémoire tampon, mais peut contenir n’importe quel nombre de bits qui tiennent dans 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 pour la structure RTL_BITMAP et l’image bitmap dans la mémoire paginée, l’appelant doit s’exécuter à IRQL <= APC_LEVEL lorsqu’il transmet un pointeur vers cette structure en tant que paramètre vers 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 façon équivalente, de la mémoire paginée verrouillée), l’appelant peut s’exécuter à n’importe quel IRQL lorsqu’il appelle la routine RtlXxx .

Pris en charge dans Windows 2000 et versions ultérieures de Windows.

En-tête : Wdm.h. Inclure : 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 unique.

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

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

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. Inclure : 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 séparément et doublement liées.

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

En-tête : Wdm.h. Inclure : 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 étendues 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.

Pris en charge dans Windows 7 et versions ultérieures du système d’exploitation Windows.

En-tête : Wdm.h. Inclure : 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 contre les pannes

SeAccessCheck

SeAssignSecurity

SeAssignSecurityEx