Compartilhar via


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. Veja cada estrutura para detalhes.

PROCESSO ELETRÔNICO

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

Algumas rotinas, como PsGetProcessCreateTimeQuadPart, usam EPROCESS para identificar o processo a ser operado. 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. Incluem: Wdm.h, Ntddk.h, Ntifs.h.

ETHLER

A estrutura ETHREAD é uma estrutura opaca que serve como o objeto 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 para o 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 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. Incluem: 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 da proteção de execução para um objeto compartilhado associado.

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

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

Para obter mais informações, consulte Proteção de desaceleração. 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 para os drivers.

As seguintes rotinas de temporizador ExXxxexigem 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. Incluem: 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. Incluem: Wdm.h, Ntddk.h, Ntifs.h.

IO_CSQ

A estrutura IO_CSQ é uma estrutura opaca usada para especificar as rotinas de fila IRP à prova de cancelamento 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 seguras para cancelamento, consulte Filas IRP seguras para cancelamento.

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

Cabeçalho: Wdm.h. Incluem: 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 segura para cancelamento do driver. As rotinas IoCsqInsertIrp, IoCsqInsertIrpEx e IoCsqRemoveIrp usam essa estrutura como uma chave para identificar IRPs específicos na fila.

Para obter uma visão geral de como usar filas IRP seguras para cancelamento, consulte Filas IRP seguras para cancelamento.

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

Cabeçalho: Wdm.h. Incluem: 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 Threads de trabalho do sistema.

Cabeçalho: Wdm.h. Incluem: 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 um pool não paginado. Use a rotina KeInitializeCallbackRecord para inicializar a estrutura antes de usá-la.

Cabeçalho: Ntddk.h. Incluir: 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 um pool não paginado. 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. Incluir: Ntddk.h.

KDPC

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

Cabeçalho: Wdm.h. Incluem: 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. Incluem: 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. Incluem: Wdm.h, Ntddk.h, Ntifs.h.

KINTERROMPER

Uma estrutura KINTERRUPT é uma estrutura opaca que representa uma interrupção para o 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. Incluem: 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. Incluem: 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. Incluem: 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 Usando listas lookaside.

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

Cabeçalho: Wdm.h. Incluem: 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ão paginado. O sistema cria novas entradas e destrói as entradas não utilizadas 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 para a lista.

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

Os drivers também podem usar listas lookaside para pool paginado. Uma estrutura PAGED_LOOKASIDE_LIST descreve uma lista lookaside que contém buffers paginados. 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 ser alinhada a 16 bytes.

Cabeçalho: Wdm.h. Incluem: 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. Incluem: 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 as entradas não utilizadas 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 para a lista.

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

Os drivers também podem usar listas lookaside para pool não paginado. Uma estrutura NPAGED_LOOKASIDE_LIST descreve uma lista lookaside que contém buffers não paginados. 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 ser alinhada a 16 bytes.

Cabeçalho: Wdm.h. Incluem: 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 membros ou que acessam valores de membros 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 esse 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 4 bytes na memória e deve ser um múltiplo de 4 bytes de comprimento. O bitmap começa no início do buffer, mas pode conter qualquer número de bits que caibam no 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ão paginada (ou, equivalentemente, da memória paginada bloqueada), o chamador poderá estar em execução em qualquer IRQL quando chamar a rotina RtlXxx .

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

Cabeçalho: Ntddk.h. Incluir: 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 ou tentar acessar diretamente nenhum membro 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. Incluem: Wdm.h, Ntddk.h, Ntifs.h.

SLIST_HEADER

Uma estrutura SLIST_HEADER é uma estrutura opaca que serve como cabeçalho para uma lista encadeada sequenciada simples. Para obter mais informações, consulte Listas vinculadas simples e duplamente.

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

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

XSTATE_SAVE

A estrutura XSTATE_SAVE é uma estrutura opaca que descreve as informações de estado do processador estendido 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.

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

ExAcquireFastMutex

ExAcquireFastMutexUnsafe

ExAllocateFromLookasideListEx

ExAllocateFromNPagedLookasideList

ExAllocateFromPagedLookasideList

Exalocar Temporizador

ExDeletePagedLookasideList

ExFreeToPagedLookasideList

ExInitializePagedLookasideList

ExCancelTimer

ExDeleteLookasideListEx

ExDeleteNPagedLookasideList

ExDeleteTimer

ExFlushLookasideListEx

ExFreeToLookasideListEx

ExFreeToNPagedLookasideList

ExInitializeLookasideListEx

ExInitializeNPagedLookasideList

ExInitializeSListHead

ExInterlockedFlushSList

ExInterlockedPopEntrySList

ExInterlockedPushEntrySList

ExQueryDepthSList

ExReleaseFastMutex

ExReleaseFastMutexUnsafe

ExSetTimer

ExTryToAcquireFastMutex

ExTimerRetorno de chamada

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 contra Run-Down

SeAccessCheck

SeAssignSecurity

SeAssignSecurityEx