Estructuras opacas del kernel de Windows

En este artículo se enumeran y describen las estructuras opacas del kernel de Windows. Para muchas de estas estructuras, los controladores no deben tener acceso ni cambiar ningún miembro, sino que deben usar rutinas proporcionadas por el sistema para acceder a la información. Consulte cada estructura para obtener más información.

EPROCESS

La estructura EPROCESS es una estructura opaca que actúa como objeto de proceso para un proceso.

Algunas rutinas, como PsGetProcessCreateTimeQuadPart, usan EPROCESS para identificar el proceso en el que operar. Los controladores pueden usar la rutina PsGetCurrentProcess para obtener un puntero al objeto de proceso para el proceso actual y pueden usar la rutina ObReferenceObjectByHandle para obtener un puntero al objeto de proceso asociado al identificador especificado. La variable global PsInitialSystemProcess apunta al objeto de proceso para el proceso del sistema.

Un objeto process es un objeto Object Manager. Los controladores deben usar rutinas del Administrador de objetos como ObReferenceObject y ObDereferenceObject para mantener el recuento de referencias del objeto.

Encabezado: Wdm.h. Incluye: Wdm.h, Ntddk.h, Ntifs.h.

ETHREAD

La estructura ETHREAD es una estructura opaca que actúa como objeto de subproceso para un subproceso.

Algunas rutinas, como PsIsSystemThread, usan ETHREAD para identificar el subproceso en el que operar. Los controladores pueden usar la rutina PsGetCurrentThread para obtener un puntero al objeto de subproceso para el subproceso actual y pueden usar la rutina ObReferenceObjectByHandle para obtener un puntero al objeto de subproceso asociado al identificador especificado.

Un objeto de subproceso es un objeto object Manager. Los controladores deben usar rutinas del Administrador de objetos como ObReferenceObject y ObDereferenceObject para mantener el recuento de referencias del objeto.

Encabezado: Wdm.h. Incluye: Wdm.h, Ntddk.h, Ntifs.h.

EX_RUNDOWN_REF

La estructura EX_RUNDOWN_REF es una estructura del sistema opaca que contiene información sobre el estado de la protección de ejecución para un objeto compartido asociado.

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

Las rutinas de protección de ejecución enumeradas en la parte inferior de esta página toman un puntero a una estructura de EX_RUNDOWN_REF como primer parámetro.

Para obtener más información, consulte Protección contra desaprotección. Encabezado: Wdm.h. Incluya Wdm.h.

EX_TIMER

La estructura EX_TIMER es una estructura opaca que el sistema operativo usa para representar un objeto de temporizador EX_TIMER .

typedef struct _EX_TIMER *PEX_TIMER;

Todos los miembros de esta estructura son opacos para los controladores.

Las siguientes rutinas del temporizador ExXxx requieren un puntero a una estructura de EX_TIMER asignada por el sistema como parámetro de entrada:

El sistema operativo crea objetos de temporizador basados en EX_TIMER. Para obtener este objeto de temporizador, el controlador llama a la rutina ExAllocateTimer . Cuando este objeto ya no es necesario, el controlador es responsable de eliminar el objeto mediante una llamada a ExDeleteTimer.

Para obtener más información, vea ExXxxTimer Routines and EX_TIMER Objects.

Encabezado: Wdm.h. Incluye: Wdm.h, Ntddk.h, Ntifs.h.

FAST_MUTEX

Una estructura FAST_MUTEX es una estructura de datos opaca que representa una exclusión mutua rápida. La rutina ExInitializeFastMutex inicializa esta estructura.

Para obtener más información sobre las exclusiones mutuas rápidas, vea Mutexes rápidas y Exclusiones mutuas protegidas.

Encabezado: Wdm.h. Incluye: Wdm.h, Ntddk.h, Ntifs.h.

IO_CSQ

La estructura de IO_CSQ es una estructura opaca que se usa para especificar las rutinas de cola irP seguras para cancelación del controlador. No establezca directamente los miembros de esta estructura. Use IoCsqInitialize o IoCsqInitializeEx para inicializar esta estructura.

Para obtener información general sobre cómo usar colas IRP seguras para cancelaciones, consulte Cancel-Safe IRP Queues( Colas irP seguras para cancelar).

Disponible en Microsoft Windows XP y versiones posteriores del sistema operativo Windows.

Encabezado: Wdm.h. Incluye: Wdm.h, Ntddk.h, Ntifs.h.

IO_CSQ_IRP_CONTEXT

La estructura de IO_CSQ_IRP_CONTEXT es una estructura de datos opaca que se usa para especificar el contexto IRP de un IRP en la cola irP segura para cancelación del controlador. Las rutinas IoCsqInsertIrp, IoCsqInsertIrpEx e IoCsqRemoveIrp usan esta estructura como clave para identificar determinados IRP en la cola.

Para obtener información general sobre cómo usar colas IRP seguras para cancelaciones, consulte Cancel-Safe IRP Queues( Colas irP seguras para cancelar).

Disponible en Microsoft Windows XP y versiones posteriores del sistema operativo Windows.

Encabezado: Wdm.h. Incluye: Wdm.h, Ntddk.h, Ntifs.h.

IO_WORKITEM

La estructura IO_WORKITEM es una estructura opaca que describe un elemento de trabajo para un subproceso de trabajo del sistema.

Un controlador puede asignar un elemento de trabajo llamando a IoAllocateWorkItem. Como alternativa, un controlador puede asignar su propio búfer y, a continuación, llamar a IoInitializeWorkItem para inicializar ese búfer como un elemento de trabajo.

IoFreeWorkItem debe liberar cualquier elemento de trabajo que ioAllocateWorkItem asigne. IoUninitializeWorkItem debe anular la inicialización de cualquier memoria inicializada por IoUninitializeWorkItem para poder liberarla.

Para obtener más información sobre los elementos de trabajo, vea Subprocesos de trabajo del sistema.

Encabezado: Wdm.h. Incluye: Wdm.h, Ntddk.h, Ntifs.h.

KBUGCHECK_CALLBACK_RECORD

La estructura KBUGCHECK_CALLBACK_RECORD es una estructura opaca que usan las rutinas KeRegisterBugCheckCallback y KeDeregisterBugCheckCallback .

La estructura KBUGCHECK_CALLBACK_RECORD se usa en las rutinas KeRegisterBugCheckReasonCallback y KeDeregisterBugCheckReasonCallback para el mantenimiento de libros.

La estructura debe asignarse en memoria residente, como el grupo no paginado. Use la rutina KeInitializeCallbackRecord para inicializar la estructura antes de usarla.

Encabezado: Ntddk.h. Incluye: Ntddk.h.

KBUGCHECK_REASON_CALLBACK_RECORD

La estructura KBUGCHECK_REASON_CALLBACK_RECORD es una estructura opaca que usan las rutinas KeRegisterBugCheckReasonCallback y KeDeregisterBugCheckReasonCallback .

La estructura de KBUGCHECK_REASON_CALLBACK_RECORD la usan las rutinas KeRegisterBugCheckReasonCallback y KeDeregisterBugCheckReasonCallback para la contabilidad.

La estructura debe asignarse en memoria residente, como el grupo no paginado. Use la rutina KeInitializeCallbackRecord para inicializar la estructura antes de usarla.

Disponible en Microsoft Windows XP con Service Pack 1 (SP1), Windows Server 2003 y versiones posteriores del sistema operativo Windows.

Encabezado: Ntddk.h. Incluye: Ntddk.h.

KDPC

La estructura KDPC es una estructura opaca que representa un objeto DPC. No establezca directamente los miembros de esta estructura. Consulte DPC Objects and DPC (Objetos DPC y DPC).

Encabezado: Wdm.h. Incluye: Wdm.h, Ntddk.h, Ntifs.h.

KFLOATING_SAVE

La estructura KFLOATING_SAVE es una estructura opaca que describe el estado de punto flotante que guardó la rutina KeSaveFloatingPointState .

Use KeRestoreFloatingPointState para restaurar el estado de punto flotante.

Encabezado: Wdm.h. Incluye: Wdm.h, Ntddk.h, Ntifs.h.

KGUARDED_MUTEX

La estructura KGUARDED_MUTEX es una estructura opaca que representa una exclusión mutua protegida.

Use KeInitializeGuardedMutex para inicializar una estructura de KGUARDED_MUTEX como exclusión mutua protegida.

Las exclusión mutuas protegidas deben asignarse desde un grupo no paginado.

Para obtener más información sobre las exclusión mutuas protegidas, vea Exclusión mutua rápida y Exclusión mutua protegida.

Encabezado: Wdm.h. Incluye: Wdm.h, Ntddk.h, Ntifs.h.

KINTERRUPT

Una estructura KINTERRUPT es una estructura opaca que representa una interrupción en el sistema.

IoConnectInterruptEx proporciona un puntero a la estructura KINTERRUPT para la interrupción cuando el controlador registra una rutina InterruptService o InterruptMessageService . El controlador usa este puntero al adquirir o liberar el bloqueo de giro de interrupción para la interrupción. El controlador también usa este puntero al anular el registro de una rutina InterruptService .

Encabezado: Wdm.h. Incluye: Wdm.h, Ntddk.h, Ntifs.h.

KLOCK_QUEUE_HANDLE

La estructura KLOCK_QUEUE_HANDLE es una estructura opaca que describe un bloqueo de número en cola. El controlador asigna la estructura KLOCK_QUEUE_HANDLE y la pasa a KeAcquireInStackQueuedSpinLock y KeAcquireInStackQueuedSpinLockAtDpcLevel para adquirir el bloqueo de número en cola. Esas rutinas inicializan la estructura para representar el bloqueo de número en cola. El controlador pasa la estructura a KeReleaseInStackQueuedSpinLock y KeReleaseInStackQueuedSpinLockFromDpcLevel al liberar el bloqueo de número.

Para obtener más información, consulte Bloqueos de número en cola.

Encabezado: Wdm.h. Incluye: Wdm.h, Ntddk.h, Ntifs.h.

KTIMER

La estructura KTIMER es una estructura opaca que representa un objeto de temporizador. No establezca directamente los miembros de esta estructura. Para obtener más información, vea Objetos de temporizador y DPC.

Encabezado: Wdm.h. Incluye: Wdm.h, Ntddk.h, Ntifs.h.

LOOKASIDE_LIST_EX

La estructura LOOKASIDE_LIST_EX describe una lista de aspecto.

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

Una lista de aspecto es un grupo de búferes de tamaño fijo que el controlador puede administrar localmente para reducir el número de llamadas a rutinas de asignación del sistema, lo que mejora el rendimiento. Los búferes tienen un tamaño uniforme y se almacenan como entradas en la lista de búsqueda.

Los controladores deben tratar la estructura LOOKASIDE_LIST_EX como opaca. Los controladores que acceden a miembros de la estructura o que tienen dependencias en las ubicaciones de estos miembros podrían no permanecer portátiles e interoperables con otros controladores.

La sección Artículos relacionados contiene una lista de las rutinas que usan esta estructura.

Para obtener más información sobre las listas de búsqueda, consulte Uso de lookaside Listas.

En las plataformas de 64 bits, esta estructura debe estar alineada con 16 bytes.

Se admite a partir de Windows Vista.

Encabezado: Wdm.h. Incluye: Wdm.h, Ntddk.h, Ntifs.h.

NPAGED_LOOKASIDE_LIST

La estructura NPAGED_LOOKASIDE_LIST es una estructura opaca que describe una lista de búsqueda de búferes de tamaño fijo asignados desde un grupo no paginado. El sistema crea nuevas entradas y destruye las entradas sin usar de la lista según sea necesario. En el caso de los búferes de tamaño fijo, el uso de una lista de aspecto es más rápido que asignar memoria directamente.

Use ExInitializeNPagedLookasideList para inicializar la lista de lookaside. Use ExAllocateFromNPagedLookasideList para asignar un búfer de la lista y ExFreeToNPagedLookasideList para devolver un búfer a la lista.

Los controladores siempre deben liberar explícitamente las listas de búsqueda que creen antes de descargarse. Es un error de programación grave para hacerlo de lo contrario. Use ExDeleteNPagedLookasideList para liberar la lista.

Los controladores también pueden usar listas de búsqueda para el grupo paginado. A partir de Windows 2000, una estructura de PAGED_LOOKASIDE_LIST describe una lista de aspecto que contiene búferes paginados. A partir de Windows Vista, una estructura de LOOKASIDE_LIST_EX puede describir una lista de aspecto que contiene búferes paginados o no paginados. Para obtener más información, consulte Uso de lookaside Listas.

En las plataformas de 64 bits, esta estructura debe estar alineada con 16 bytes.

Se admite a partir de Windows 2000.

Encabezado: Wdm.h. Incluye: Wdm.h, Ntddk.h, Ntifs.h.

Object_Type

OBJECT_TYPE es una estructura opaca que especifica el tipo de objeto de un identificador. Para obtener más información, vea ObReferenceObjectByHandle.

Encabezado: Wdm.h. Incluye: Wdm.h, Ntddk.h, Ntifs.h.

PAGED_LOOKASIDE_LIST

La estructura PAGED_LOOKASIDE_LIST es una estructura opaca que describe una lista de búsqueda de búferes de tamaño fijo asignados desde el grupo paginado. El sistema crea nuevas entradas y destruye las entradas sin usar de la lista según sea necesario. En el caso de los búferes de tamaño fijo, el uso de una lista de aspecto es más rápido que asignar memoria directamente.

Use ExInitializePagedLookasideList para inicializar la lista de aspecto. Use ExAllocateFromPagedLookasideList para asignar un búfer de la lista y ExFreeToPagedLookasideList para devolver un búfer a la lista.

Los controladores siempre deben liberar explícitamente las listas de búsqueda que creen antes de descargarse. Es un error de programación grave para hacerlo de lo contrario. Use ExDeletePagedLookasideList para liberar la lista.

Los controladores también pueden usar listas de búsqueda para el grupo no paginado. A partir de Windows 2000, una estructura de NPAGED_LOOKASIDE_LIST describe una lista de búsqueda que contiene búferes no paginados. A partir de Windows Vista, una estructura de LOOKASIDE_LIST_EX puede describir una lista de aspecto que contiene búferes paginados o no paginados. Para obtener más información, consulte Uso de lookaside Listas.

En las plataformas de 64 bits, esta estructura debe estar alineada con 16 bytes.

Se admite a partir de Windows 2000.

Encabezado: Wdm.h. Incluye: Wdm.h, Ntddk.h, Ntifs.h.

RTL_BITMAP

La estructura RTL_BITMAP es una estructura opaca que describe un mapa de bits.

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

No acceda directamente a los miembros de esta estructura. Los controladores que tienen dependencias en ubicaciones de miembros o que acceden directamente a valores de miembro podrían no seguir siendo compatibles con versiones futuras del sistema operativo Windows.

La estructura RTL_BITMAP actúa como encabezado para un mapa de bits unidimensional de uso general de longitud arbitraria. Un controlador puede usar este tipo de mapa de bits como una manera económica de realizar un seguimiento de un conjunto de elementos reutilizables. Por ejemplo, un sistema de archivos puede usar mapas de bits para realizar un seguimiento de los clústeres y sectores de un disco duro que ya se han asignado para contener los datos de archivo.

Para obtener una lista de las rutinas RtlXxx que usan estructuras RTL_BITMAP , consulte la sección Artículos relacionados . El autor de la llamada de estas rutinas RtlXxx es responsable de asignar el almacenamiento para la estructura RTL_BITMAP y para el búfer que contiene el mapa de bits. Este búfer debe comenzar en un límite de cuatro bytes en la memoria y debe ser un múltiplo de cuatro bytes de longitud. El mapa de bits comienza al principio del búfer, pero puede contener cualquier número de bits que caben en el búfer asignado.

Antes de proporcionar una estructura de RTL_BITMAP como parámetro a una rutina RtlXxx , llame a la rutina RtlInitializeBitMap para inicializar la estructura. Los parámetros de entrada de esta rutina son un puntero a un búfer que contiene el mapa de bits y el tamaño, en bits, del mapa de bits. RtlInitializeBitMap no cambia el contenido de este búfer.

Si el autor de la llamada asigna el almacenamiento para la estructura de RTL_BITMAP y el mapa de bits en la memoria paginada, el autor de la llamada debe ejecutarse en IRQL <= APC_LEVEL cuando pasa un puntero a esta estructura como parámetro a cualquiera de las rutinas RtlXxx enumeradas en la sección Artículos relacionados . Si el autor de la llamada asigna el almacenamiento de memoria no paginada (o, de forma equivalente, desde la memoria paginada bloqueada), el autor de la llamada se puede ejecutar en cualquier IRQL cuando llama a la rutina RtlXxx .

Compatible con Windows 2000 y versiones posteriores de Windows.

Encabezado: Wdm.h. Incluye: Wdm.h, Ntddk.h, Ntifs.h.

RTL_RUN_ONCE

La estructura RTL_RUN_ONCE es una estructura opaca que almacena la información de una inicialización única.

Los controladores deben inicializar esta estructura llamando a la rutina RtlRunOnceInitialize antes de pasarla a cualquier otra rutina RtlRunOnceXxx .

Disponible en Windows Vista y versiones posteriores del sistema operativo Windows.

Encabezado: Ntddk.h. Incluye: Ntddk.h.

SECURITY_SUBJECT_CONTEXT

La estructura SECURITY_SUBJECT_CONTEXT es una estructura opaca que representa el contexto de seguridad en el que se está llevando a cabo una operación determinada. Los controladores no deben modificar ni intentar acceder directamente a ningún miembro de esta estructura para tomar decisiones de seguridad. En su lugar, para evitar problemas de seguridad en la autorización, pase esta estructura opaca en llamadas a SeAccessCheck o SePrivilegeCheck.

Encabezado: Wdm.h. Incluye: Wdm.h, Ntddk.h, Ntifs.h.

SLIST_HEADER

Una estructura SLIST_HEADER es una estructura opaca que actúa como encabezado para una lista vinculada secuenciadamente. Para obtener más información, consulte Singly and Duplicay Linked Listas.

En las plataformas de 64 bits, las estructuras de SLIST_HEADER deben estar alineadas con 16 bytes.

Encabezado: Wdm.h. Incluye: Wdm.h, Ntddk.h, Ntifs.h.

XSTATE_SAVE

La estructura de XSTATE_SAVE es una estructura opaca que describe la información de estado del procesador extendida que un controlador en modo kernel guarda y restaura.

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

Todos los miembros son opacos.

Las rutinas KeSaveExtendedProcessorState y KeRestoreExtendedProcessorState usan esta estructura.

Compatible con Windows 7 y versiones posteriores del sistema operativo Windows.

Encabezado: Wdm.h. Incluye: 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

Lectura de datos de devolución de llamada de comprobación de errores

RtlRunOnceBeginInitialize

RtlRunOnceComplete

RtlRunOnceExecuteOnce

RtlRunOnceInitialize

RunOnceInitialization

Protección contra desaprotección

SeAccessCheck

SeAssignSecurity

SeAssignSecurityEx