Compartir a través de


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 a ningún miembro ni cambiarlos, 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. Include: 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 del Administrador de objetos. Los controladores deben usar rutinas del Administrador de objetos como ObReferenceObject y ObDereferenceObject para mantener el recuento de referencias del objeto.

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

EX_RUNDOWN_REF

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

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

Las rutinas de protección de degradació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 de reducción de ejecución. Encabezado: Wdm.h. Incluya Wdm.h.

EX_TIMER

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

typedef struct _EX_TIMER *PEX_TIMER;

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

Las siguientes rutinas de temporizador ExXxxrequieren 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 llamando a ExDeleteTimer.

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

Encabezado: Wdm.h. Include: 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, consulte Exclusión mutua rápida y Exclusión mutua protegida.

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

IO_CSQ

La estructura 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. Include: 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. Include: 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. Cualquier memoria inicializada por IoInitializeWorkItem debe no inicializarse mediante IoUninitializeWorkItem antes de que se pueda liberar.

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

Encabezado: Wdm.h. Include: 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 de KBUGCHECK_CALLBACK_RECORD se usa en 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.

Encabezado: Ntddk.h. Include: 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 se usa en 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. Include: Ntddk.h.

KDPC

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

Encabezado: Wdm.h. Include: 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. Include: 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 exclusiones mutuas protegidas deben asignarse desde un grupo no paginado.

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

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

KINTERRUPT

Una estructura KINTERRUPT es una estructura opaca que representa una interrupción del 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. Include: 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 giro en cola. Esas rutinas inicializan la estructura para representar el bloqueo de giro en cola. El controlador pasa la estructura a KeReleaseInStackQueuedSpinLock y KeReleaseInStackQueuedSpinLockFromDpcLevel al liberar el bloqueo de giro.

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

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

Los controladores deben tratar la estructura LOOKASIDE_LIST_EX como opaca. Los controladores que acceden a miembros de 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, vea Usar listas de lookaside.

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

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

NPAGED_LOOKASIDE_LIST

La estructura NPAGED_LOOKASIDE_LIST es una estructura opaca que describe una lista de lookaside de búferes de tamaño fijo asignados desde un grupo no paginado. El sistema crea nuevas entradas y destruye entradas sin usar en 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 lookaside que creen antes de descargar. De lo contrario, es un error de programación grave. Use ExDeleteNPagedLookasideList para liberar la lista.

Los controladores también pueden usar listas de búsqueda para el grupo paginado. Una estructura PAGED_LOOKASIDE_LIST describe una lista de aspecto que contiene búferes paginados. Una estructura 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 listas de lookaside.

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

Encabezado: Wdm.h. Include: 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. Include: Wdm.h, Ntddk.h, Ntifs.h.

PAGED_LOOKASIDE_LIST

La estructura PAGED_LOOKASIDE_LIST es una estructura opaca que describe una lista de lookaside de búferes de tamaño fijo asignados desde el grupo paginado. El sistema crea nuevas entradas y destruye entradas sin usar en 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 lookaside. 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 lookaside que creen antes de descargar. De lo contrario, es un error de programación grave. Use ExDeletePagedLookasideList para liberar la lista.

Los controladores también pueden usar listas de búsqueda para el grupo no paginado. Una estructura NPAGED_LOOKASIDE_LIST describe una lista de aspecto que contiene búferes no paginados. Una estructura 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 listas de lookaside.

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

Encabezado: Wdm.h. Include: 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. Es posible que los controladores que tengan dependencias en ubicaciones de miembro o que accedan directamente a valores de miembro no sean 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 datos de archivo.

Para obtener una lista de las rutinas RtlXxx que usan estructuras de 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 de RTL_BITMAP y para el búfer que contiene el mapa de bits. Este búfer debe comenzar en un límite de 4 bytes en la memoria y debe tener un múltiplo de 4 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 .

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

Encabezado: Ntddk.h. Include: 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. Include: Wdm.h, Ntddk.h, Ntifs.h.

SLIST_HEADER

Una estructura SLIST_HEADER es una estructura opaca que actúa como encabezado de una lista vinculada secuenciada. Para obtener más información, vea Singly and Duplicay Linked Lists.

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

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

XSTATE_SAVE

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

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

Todos los miembros son opacos.

Las rutinas KeSaveExtendedProcessorState y KeRestoreExtendedProcessorState usan esta estructura.

Encabezado: 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

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