Estruturas opacas do kernel do Windows

Este artigo lista e descreve estruturas opacas do kernel do Windows. Para muitas dessas estruturas, os drivers não devem acessar ou alterar nenhum membro, mas devem usar rotinas fornecidas pelo sistema para acessar as informações. Consulte cada estrutura para obter detalhes.

EPROCESS

A estrutura EPROCESS é uma estrutura opaca que serve como objeto de processo para um processo.

Algumas rotinas, como PsGetProcessCreateTimeQuadPart, usam o EPROCESS para identificar o processo no qual operar. Os drivers podem usar a rotina PsGetCurrentProcess para obter um ponteiro para o objeto de processo para o processo atual e podem usar a rotina ObReferenceObjectByHandle para obter um ponteiro para o objeto de processo associado ao identificador especificado. A variável global PsInitialSystemProcess aponta para o objeto de processo para o processo do sistema.

Um objeto de processo é um objeto do Gerenciador de Objetos. Os drivers devem usar rotinas do Gerenciador de Objetos, como ObReferenceObject e ObDereferenceObject , para manter a contagem de referência do objeto.

Cabeçalho: Wdm.h. Inclua: Wdm.h, Ntddk.h, Ntifs.h.

ETHREAD

A estrutura ETHREAD é uma estrutura opaca que serve como objeto de thread para um thread.

Algumas rotinas, como PsIsSystemThread, usam ETHREAD para identificar o thread no qual operar. Os drivers podem usar a rotina PsGetCurrentThread para obter um ponteiro para o objeto thread do thread atual e podem usar a rotina ObReferenceObjectByHandle para obter um ponteiro para o objeto thread associado ao identificador especificado.

Um objeto thread é um objeto do Gerenciador de Objetos. Os drivers devem usar rotinas do Gerenciador de Objetos, como ObReferenceObject e ObDereferenceObject , para manter a contagem de referência do objeto.

Cabeçalho: Wdm.h. Inclua: Wdm.h, Ntddk.h, Ntifs.h.

EX_RUNDOWN_REF

A estrutura EX_RUNDOWN_REF é uma estrutura de sistema opaca que contém informações sobre o status de proteção de execução para um objeto compartilhado associado.

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

As rotinas de proteção de execução listadas na parte inferior desta página levam um ponteiro para uma estrutura EX_RUNDOWN_REF como seu primeiro parâmetro.

Para obter mais informações, consulte Proteção contra run-down. Cabeçalho: Wdm.h. Inclua Wdm.h.

EX_TIMER

A estrutura EX_TIMER é uma estrutura opaca que o sistema operacional usa para representar um objeto de temporizador EX_TIMER .

typedef struct _EX_TIMER *PEX_TIMER;

Todos os membros dessa estrutura são opacos aos drivers.

As seguintes rotinas de Temporizador ExXxx exigem um ponteiro para uma estrutura de EX_TIMER alocada pelo sistema como um parâmetro de entrada:

O sistema operacional cria objetos de temporizador baseados em EX_TIMER. Para obter esse objeto de temporizador, o driver chama a rotina ExAllocateTimer . Quando esse objeto não é mais necessário, o driver é responsável por excluir o objeto chamando ExDeleteTimer.

Para obter mais informações, consulte ExXxxTimer Routines and EX_TIMER Objects.

Cabeçalho: Wdm.h. Inclua: Wdm.h, Ntddk.h, Ntifs.h.

FAST_MUTEX

Uma estrutura FAST_MUTEX é uma estrutura de dados opaca que representa um mutex rápido. A rotina ExInitializeFastMutex inicializa essa estrutura.

Para obter mais informações sobre mutexes rápidos, consulte Mutexes rápidos e mutexes protegidos.

Cabeçalho: Wdm.h. Inclua: Wdm.h, Ntddk.h, Ntifs.h.

IO_CSQ

A estrutura IO_CSQ é uma estrutura opaca usada para especificar as rotinas de fila IRP cancel-safe do driver. Não defina os membros dessa estrutura diretamente. Use IoCsqInitialize ou IoCsqInitializeEx para inicializar essa estrutura.

Para obter uma visão geral de como usar filas IRP cancel-safe, consulte Filas IRP cancel-safe.

Disponível no Microsoft Windows XP e versões posteriores do sistema operacional Windows.

Cabeçalho: Wdm.h. Inclua: Wdm.h, Ntddk.h, Ntifs.h.

IO_CSQ_IRP_CONTEXT

A estrutura IO_CSQ_IRP_CONTEXT é uma estrutura de dados opaca usada para especificar o contexto IRP para um IRP na fila irp cancel-safe do driver. As rotinas IoCsqInsertIrp, IoCsqInsertIrpEx e IoCsqRemoveIrp usam essa estrutura como uma chave para identificar DETERMINADOs IRPs na fila.

Para obter uma visão geral de como usar filas IRP cancel-safe, consulte Filas IRP cancel-safe.

Disponível no Microsoft Windows XP e versões posteriores do sistema operacional Windows.

Cabeçalho: Wdm.h. Inclua: Wdm.h, Ntddk.h, Ntifs.h.

IO_WORKITEM

A estrutura IO_WORKITEM é uma estrutura opaca que descreve um item de trabalho para um thread de trabalho do sistema.

Um driver pode alocar um item de trabalho chamando IoAllocateWorkItem. Como alternativa, um driver pode alocar seu próprio buffer e, em seguida, chamar IoInitializeWorkItem para inicializar esse buffer como um item de trabalho.

Qualquer item de trabalho alocado por IoAllocateWorkItem deve ser liberado por IoFreeWorkItem. Qualquer memória inicializada por IoInitializeWorkItem deve ser não inicializada por IoUninitializeWorkItem antes de ser liberada.

Para obter mais informações sobre itens de trabalho, consulte System Worker Threads.

Cabeçalho: Wdm.h. Inclua: Wdm.h, Ntddk.h, Ntifs.h.

KBUGCHECK_CALLBACK_RECORD

A estrutura KBUGCHECK_CALLBACK_RECORD é uma estrutura opaca que as rotinas KeRegisterBugCheckCallback e KeDeregisterBugCheckCallback usam.

A estrutura KBUGCHECK_CALLBACK_RECORD é usada pelas rotinas KeRegisterBugCheckReasonCallback e KeDeregisterBugCheckReasonCallback para contabilidade.

A estrutura deve ser alocada na memória residente, como pool nãopagado. Use a rotina KeInitializeCallbackRecord para inicializar a estrutura antes de usá-la.

Cabeçalho: Ntddk.h. Inclua: Ntddk.h.

KBUGCHECK_REASON_CALLBACK_RECORD

A estrutura KBUGCHECK_REASON_CALLBACK_RECORD é uma estrutura opaca que as rotinas KeRegisterBugCheckReasonCallback e KeDeregisterBugCheckReasonCallback usam.

A estrutura KBUGCHECK_REASON_CALLBACK_RECORD é usada pelas rotinas KeRegisterBugCheckReasonCallback e KeDeregisterBugCheckReasonCallback para contabilidade.

A estrutura deve ser alocada na memória residente, como pool nãopagado. Use a rotina KeInitializeCallbackRecord para inicializar a estrutura antes de usá-la.

Disponível no Microsoft Windows XP com Service Pack 1 (SP1), Windows Server 2003 e versões posteriores do sistema operacional Windows.

Cabeçalho: Ntddk.h. Inclua: Ntddk.h.

KDPC

A estrutura KDPC é uma estrutura opaca que representa um objeto DPC. Não defina os membros dessa estrutura diretamente. Consulte DPC Objects and DPCs(Objetos DPC e DPCs).

Cabeçalho: Wdm.h. Inclua: Wdm.h, Ntddk.h, Ntifs.h.

KFLOATING_SAVE

A estrutura KFLOATING_SAVE é uma estrutura opaca que descreve o estado de ponto flutuante que a rotina KeSaveFloatingPointState salvou.

Use KeRestoreFloatingPointState para restaurar o estado de ponto flutuante.

Cabeçalho: Wdm.h. Inclua: Wdm.h, Ntddk.h, Ntifs.h.

KGUARDED_MUTEX

A estrutura KGUARDED_MUTEX é uma estrutura opaca que representa um mutex protegido.

Use KeInitializeGuardedMutex para inicializar uma estrutura KGUARDED_MUTEX como um mutex protegido.

Os mutexes protegidos devem ser alocados do pool não paginado.

Para obter mais informações sobre mutexes protegidos, consulte Mutexes rápidos e mutexes protegidos.

Cabeçalho: Wdm.h. Inclua: Wdm.h, Ntddk.h, Ntifs.h.

KINTERRUPT

Uma estrutura KINTERRUPT é uma estrutura opaca que representa uma interrupção no sistema.

IoConnectInterruptEx fornece um ponteiro para a estrutura KINTERRUPT para a interrupção quando o driver registra uma rotina InterruptService ou InterruptMessageService . O driver usa esse ponteiro ao adquirir ou liberar o bloqueio de rotação de interrupção para a interrupção. O driver também usa esse ponteiro ao cancelar o registro de uma rotina InterruptService .

Cabeçalho: Wdm.h. Inclua: Wdm.h, Ntddk.h, Ntifs.h.

KLOCK_QUEUE_HANDLE

A estrutura KLOCK_QUEUE_HANDLE é uma estrutura opaca que descreve um bloqueio de rotação enfileirado. O driver aloca a estrutura KLOCK_QUEUE_HANDLE e a passa para KeAcquireInStackQueuedSpinLock e KeAcquireInStackQueuedSpinLockAtDpcLevel para adquirir o bloqueio de rotação enfileirado. Essas rotinas inicializam a estrutura para representar o bloqueio de rotação enfileirado. O driver passa a estrutura para KeReleaseInStackQueuedSpinLock e KeReleaseInStackQueuedSpinLockFromDpcLevel ao liberar o bloqueio de rotação.

Para obter mais informações, consulte Bloqueios de rotação enfileirados.

Cabeçalho: Wdm.h. Inclua: Wdm.h, Ntddk.h, Ntifs.h.

KTIMER

A estrutura KTIMER é uma estrutura opaca que representa um objeto de temporizador. Não defina os membros dessa estrutura diretamente. Para obter mais informações, consulte Objetos de temporizador e DPCs.

Cabeçalho: Wdm.h. Inclua: Wdm.h, Ntddk.h, Ntifs.h.

LOOKASIDE_LIST_EX

A estrutura LOOKASIDE_LIST_EX descreve uma lista lookaside.

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

Uma lista lookaside é um pool de buffers de tamanho fixo que o driver pode gerenciar localmente para reduzir o número de chamadas para rotinas de alocação do sistema, o que melhora o desempenho. Os buffers são de tamanho uniforme e são armazenados como entradas na lista lookaside.

Os drivers devem tratar a estrutura LOOKASIDE_LIST_EX como opaca. Os drivers que acessam membros da estrutura ou que têm dependências nos locais desses membros podem não permanecer portáteis e interoperáveis com outros drivers.

A seção Artigos relacionados contém uma lista das rotinas que usam essa estrutura.

Para obter mais informações sobre listas lookaside, consulte Using Lookaside Listas.

Em plataformas de 64 bits, essa estrutura deve estar alinhada a 16 bytes.

Com suporte a partir do Windows Vista.

Cabeçalho: Wdm.h. Inclua: Wdm.h, Ntddk.h, Ntifs.h.

NPAGED_LOOKASIDE_LIST

A estrutura NPAGED_LOOKASIDE_LIST é uma estrutura opaca que descreve uma lista lookaside de buffers de tamanho fixo alocados do pool nãopagado. O sistema cria novas entradas e destrói entradas não usadas na lista conforme necessário. Para buffers de tamanho fixo, usar uma lista lookaside é mais rápido do que alocar memória diretamente.

Use ExInitializeNPagedLookasideList para inicializar a lista lookaside. Use ExAllocateFromNPagedLookasideList para alocar um buffer da lista e ExFreeToNPagedLookasideList para retornar um buffer à lista.

Os drivers sempre devem liberar explicitamente todas as listas lookaside criadas antes de descarregar. É um erro grave de programação fazer o contrário. Use ExDeleteNPagedLookasideList para liberar a lista.

Os drivers também podem usar listas lookaside para pool paginado. A partir do Windows 2000, uma estrutura PAGED_LOOKASIDE_LIST descreve uma lista lookaside que contém buffers paginado. A partir do Windows Vista, uma estrutura de LOOKASIDE_LIST_EX pode descrever uma lista lookaside que contém buffers paginados ou não paginados. Para obter mais informações, consulte Usando Listas Lookaside.

Em plataformas de 64 bits, essa estrutura deve estar alinhada a 16 bytes.

Com suporte a partir do Windows 2000.

Cabeçalho: Wdm.h. Inclua: Wdm.h, Ntddk.h, Ntifs.h.

Object_Type

OBJECT_TYPE é uma estrutura opaca que especifica o tipo de objeto de um identificador. Para obter mais informações, consulte ObReferenceObjectByHandle.

Cabeçalho: Wdm.h. Inclua: Wdm.h, Ntddk.h, Ntifs.h.

PAGED_LOOKASIDE_LIST

A estrutura PAGED_LOOKASIDE_LIST é uma estrutura opaca que descreve uma lista lookaside de buffers de tamanho fixo alocados do pool paginado. O sistema cria novas entradas e destrói entradas não usadas na lista conforme necessário. Para buffers de tamanho fixo, usar uma lista lookaside é mais rápido do que alocar memória diretamente.

Use ExInitializePagedLookasideList para inicializar a lista lookaside. Use ExAllocateFromPagedLookasideList para alocar um buffer da lista e ExFreeToPagedLookasideList para retornar um buffer à lista.

Os drivers sempre devem liberar explicitamente todas as listas lookaside criadas antes de descarregar. É um erro grave de programação fazer o contrário. Use ExDeletePagedLookasideList para liberar a lista.

Os drivers também podem usar listas lookaside para pool nãopaged. A partir do Windows 2000, uma estrutura NPAGED_LOOKASIDE_LIST descreve uma lista lookaside que contém buffers nãopagados. A partir do Windows Vista, uma estrutura LOOKASIDE_LIST_EX pode descrever uma lista lookaside que contém buffers paginados ou não paginados. Para obter mais informações, consulte Usando Listas Lookaside.

Em plataformas de 64 bits, essa estrutura deve estar alinhada a 16 bytes.

Com suporte a partir do Windows 2000.

Cabeçalho: Wdm.h. Inclua: Wdm.h, Ntddk.h, Ntifs.h.

RTL_BITMAP

A estrutura RTL_BITMAP é uma estrutura opaca que descreve um bitmap.

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

Não acesse diretamente os membros dessa estrutura. Os drivers que têm dependências em locais de membro ou que acessam valores de membro diretamente podem não permanecer compatíveis com versões futuras do sistema operacional Windows.

A estrutura RTL_BITMAP serve como um cabeçalho para um bitmap unidimensional de uso geral de comprimento arbitrário. Um driver pode usar um bitmap como uma maneira econômica de acompanhar um conjunto de itens reutilizáveis. Por exemplo, um sistema de arquivos pode usar bitmaps para rastrear quais clusters e setores em um disco rígido já foram alocados para armazenar dados de arquivo.

Para obter uma lista das rotinas RtlXxx que usam estruturas RTL_BITMAP , consulte a seção Artigos relacionados . O chamador dessas rotinas RtlXxx é responsável por alocar o armazenamento para a estrutura RTL_BITMAP e para o buffer que contém o bitmap. Esse buffer deve começar em um limite de quatro bytes na memória e deve ter um múltiplo de quatro bytes de comprimento. O bitmap começa no início do buffer, mas pode conter qualquer número de bits que se ajustem ao buffer alocado.

Antes de fornecer uma estrutura RTL_BITMAP como um parâmetro para uma rotina RtlXxx , chame a rotina RtlInitializeBitMap para inicializar a estrutura. Os parâmetros de entrada para essa rotina são um ponteiro para um buffer que contém o bitmap e o tamanho, em bits, do bitmap. RtlInitializeBitMap não altera o conteúdo desse buffer.

Se o chamador alocar o armazenamento para a estrutura RTL_BITMAP e o bitmap na memória paginada, o chamador deverá estar em execução em IRQL <= APC_LEVEL quando passar um ponteiro para essa estrutura como um parâmetro para qualquer uma das rotinas RtlXxx listadas na seção Artigos relacionados . Se o chamador alocar o armazenamento da memória nãopagada (ou, equivalentemente, da memória paginada bloqueada), o chamador poderá estar em execução em qualquer IRQL quando chamar a rotina RtlXxx .

Com suporte no Windows 2000 e versões posteriores do Windows.

Cabeçalho: Wdm.h. Inclua: Wdm.h, Ntddk.h, Ntifs.h.

RTL_RUN_ONCE

A estrutura RTL_RUN_ONCE é uma estrutura opaca que armazena as informações para uma inicialização única.

Os drivers devem inicializar essa estrutura chamando a rotina RtlRunOnceInitialize antes de passá-la para qualquer outra rotina RtlRunOnceXxx .

Disponível no Windows Vista e versões posteriores do sistema operacional Windows.

Cabeçalho: Ntddk.h. Inclua: Ntddk.h.

SECURITY_SUBJECT_CONTEXT

A estrutura SECURITY_SUBJECT_CONTEXT é uma estrutura opaca que representa o contexto de segurança no qual uma operação específica está ocorrendo. Os drivers não devem modificar nem tentar acessar diretamente os membros dessa estrutura para tomar decisões de segurança. Em vez disso, para evitar problemas de segurança na autorização, passe essa estrutura opaca em chamadas para SeAccessCheck ou SePrivilegeCheck.

Cabeçalho: Wdm.h. Inclua: Wdm.h, Ntddk.h, Ntifs.h.

SLIST_HEADER

Uma estrutura SLIST_HEADER é uma estrutura opaca que serve como o cabeçalho para uma lista sequenciada vinculada. Para obter mais informações, consulte Singly e Doubly Linked Listas.

Em plataformas de 64 bits, SLIST_HEADER estruturas devem estar alinhadas a 16 bytes.

Cabeçalho: Wdm.h. Inclua: Wdm.h, Ntddk.h, Ntifs.h.

XSTATE_SAVE

A estrutura XSTATE_SAVE é uma estrutura opaca que descreve as informações de estado estendido do processador que um driver de modo kernel salva e restaura.

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

Todos os membros são opacos.

As rotinas KeSaveExtendedProcessorState e KeRestoreExtendedProcessorState usam essa estrutura.

Com suporte no Windows 7 e versões posteriores do sistema operacional Windows.

Cabeçalho: Wdm.h. Inclua: 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

Lendo dados de retorno de chamada de verificação de bugs

RtlRunOnceBeginInitialize

RtlRunOnceComplete

RtlRunOnceExecuteOnce

RtlRunOnceInitialize

RunOnceInitialization

Proteção de execução inativa

SeAccessCheck

SeAssignSecurity

SeAssignSecurityEx