Função ObReferenceObjectByHandle (wdm.h)

A rotina ObReferenceObjectByHandle fornece validação de acesso no identificador do objeto e, se o acesso puder ser concedido, retornará o ponteiro correspondente para o corpo do objeto.

Sintaxe

NTSTATUS ObReferenceObjectByHandle(
  [in]            HANDLE                     Handle,
  [in]            ACCESS_MASK                DesiredAccess,
  [in, optional]  POBJECT_TYPE               ObjectType,
  [in]            KPROCESSOR_MODE            AccessMode,
  [out]           PVOID                      *Object,
  [out, optional] POBJECT_HANDLE_INFORMATION HandleInformation
);

Parâmetros

[in] Handle

Especifica um identificador aberto para um objeto .

[in] DesiredAccess

Especifica os tipos de acesso solicitados ao objeto . A interpretação desse campo depende do tipo de objeto. Não use nenhum direito de acesso genérico. Para obter mais informações, consulte ACCESS_MASK.

[in, optional] ObjectType

Ponteiro para o tipo de objeto. ObjectType pode ser *ExEventObjectType, *ExSemaphoreObjectType, *IoFileObjectType, *PsProcessType, *PsThreadType, *SeTokenObjectType, *TmEnlistmentObjectType, *TmResourceManagerObjectType, *TmTransactionManagerObjectType ou *TmTransactionObjectType.

Se ObjectType não for NULL, o sistema operacional verificará se o tipo de objeto fornecido corresponde ao tipo de objeto do objeto especificado por Handle .

[in] AccessMode

Especifica o modo de acesso a ser usado para o marcar de acesso. Ele deve ser UserMode ou KernelMode. Os drivers sempre devem especificar UserMode para identificadores recebidos do espaço de endereço do usuário.

[out] Object

Ponteiro para uma variável que recebe um ponteiro para o corpo do objeto. A tabela a seguir contém os tipos de ponteiro.

Parâmetro ObjectType Tipo de ponteiro de objeto
*ExEventObjectType PKEVENT
*ExSemaphoreObjectType PKSEMAPHORE
*IoFileObjectType PFILE_OBJECT
*PsProcessType PEPROCESS ou PKPROCESS
*PsThreadType PETHREAD ou PKTHREAD
*SeTokenObjectType PACCESS_TOKEN
*TmEnlistmentObjectType PKENLISTMENT
*TmResourceManagerObjectType PKRESOURCEMANAGER
*TmTransactionManagerObjectType PKTM
*TmTransactionObjectType PKTRANSACTION

As estruturas que os tipos de ponteiro referenciam são opacas e os drivers não podem acessar os membros da estrutura. Como as estruturas são opacas, PEPROCESS é equivalente a PKPROCESS e PETHREAD é equivalente a PKTHREAD.

[out, optional] HandleInformation

Os drivers definem isso como NULL.

Retornar valor

ObReferenceObjectByHandle retornará STATUS_SUCCESS se a chamada for bem-sucedida. Os possíveis valores retornados incluem os seguintes códigos de erro:

Código de retorno Descrição
STATUS_OBJECT_TYPE_MISMATCH O parâmetro ObjectType especifica o tipo de objeto incorreto para o objeto identificado pelo parâmetro Handle .
STATUS_ACCESS_DENIED O chamador não pode receber os direitos de acesso solicitados ao objeto .
STATUS_INVALID_HANDLE O parâmetro Handle não é um identificador de objeto válido.

Comentários

Um ponteiro para o corpo do objeto é recuperado da entrada da tabela de objetos e retornado ao chamador por meio do parâmetro Object .

Se AccessMode for UserMode, o acesso solicitado será comparado ao acesso concedido para o objeto. Se AccessMode for KernelMode, o identificador deverá ter origem no espaço de endereço do kernel.

A partir do Windows 7, se AccessMode for KernelMode e o identificador for recebido do espaço de endereço do usuário, o Verificador de Driver emitirá a verificação de bugs C4, subcodifique F6.

Se a chamada for bem-sucedida, um ponteiro para o corpo do objeto será retornado ao chamador e a contagem de referência do ponteiro será incrementada. Incrementar essa contagem impede que o objeto seja excluído enquanto o ponteiro está sendo referenciado. O chamador deve diminuir a contagem de referência com ObDereferenceObject assim que for feito com o objeto .

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível a partir do Windows 2000.
Plataforma de Destino Universal
Cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Regras de conformidade da DDI HwStorPortProhibitedDIs(storport), IrqlObPassive(wdm), TargetRelationNeedsRef(wdm)

Confira também

ACCESS_MASK

ObDereferenceObject

ObReferenceObject

ObReferenceObjectByPointer