estrutura OBJECT_ATTRIBUTES (ntdef.h)

A estrutura OBJECT_ATTRIBUTES especifica atributos que podem ser aplicados a objetos ou identificadores de objeto por rotinas que criam objetos e/ou retornam identificadores a objetos.

Sintaxe

typedef struct _OBJECT_ATTRIBUTES {
  ULONG           Length;
  HANDLE          RootDirectory;
  PUNICODE_STRING ObjectName;
  ULONG           Attributes;
  PVOID           SecurityDescriptor;
  PVOID           SecurityQualityOfService;
} OBJECT_ATTRIBUTES;

Membros

Length

O número de bytes de dados contidos nessa estrutura. A macro InitializeObjectAttributes define esse membro como sizeof(OBJECT_ATTRIBUTES).

RootDirectory

Identificador opcional para o diretório do objeto raiz para o nome do caminho especificado pelo membro ObjectName . Se RootDirectory for NULL, ObjectName deverá apontar para um nome de objeto totalmente qualificado que inclua o caminho completo para o objeto de destino. Se RootDirectory nãoNULL for, ObjectName especificará um nome de objeto relativo ao diretório RootDirectory . O identificador RootDirectory pode se referir a um diretório do sistema de arquivos ou a um diretório de objetos no namespace do gerenciador de objetos.

ObjectName

Ponteiro para uma cadeia de caracteres Unicode que contém o nome do objeto para o qual um identificador deve ser aberto. Deve ser um nome de objeto totalmente qualificado ou um nome de caminho relativo para o diretório especificado pelo membro RootDirectory .

Attributes

Máscara de bits de sinalizadores que especificam atributos de identificador de objeto. Esse membro pode conter um ou mais dos sinalizadores na tabela a seguir.

Sinalizador Significado
OBJ_INHERIT Esse identificador pode ser herdado por processos filho do processo atual.
OBJ_PERMANENT Esse sinalizador só se aplica a objetos nomeados dentro do gerenciador de objetos. Por padrão, esses objetos são excluídos quando todos os identificadores abertos para eles são fechados. Se esse sinalizador for especificado, o objeto não será excluído quando todos os identificadores abertos forem fechados. Os drivers podem usar a rotina ZwMakeTemporaryObject para tornar um objeto permanente não permanente.
OBJ_EXCLUSIVE Se esse sinalizador for definido e a estrutura OBJECT_ATTRIBUTES for passada para uma rotina que cria um objeto, o objeto poderá ser acessado exclusivamente. Ou seja, quando um processo abre esse identificador para o objeto, nenhum outro processo pode abrir identificadores para esse objeto.

Se esse sinalizador for definido e a estrutura OBJECT_ATTRIBUTES for passada para uma rotina que cria um identificador de objeto, o chamador solicitará acesso exclusivo ao objeto para o contexto de processo no qual o identificador foi criado. Essa solicitação só poderá ser concedida se o sinalizador OBJ_EXCLUSIVE tiver sido definido quando o objeto foi criado.
OBJ_CASE_INSENSITIVE Se esse sinalizador for especificado, uma comparação que não diferencia maiúsculas de minúsculas será usada ao corresponder o nome apontado pelo membro ObjectName com os nomes dos objetos existentes. Caso contrário, os nomes de objeto são comparados usando as configurações padrão do sistema.
OBJ_OPENIF Se esse sinalizador for especificado, usando o identificador de objeto, para uma rotina que cria objetos e, se esse objeto já existir, a rotina deverá abrir esse objeto. Caso contrário, a rotina de criação do objeto retorna um código NTSTATUS de STATUS_OBJECT_NAME_COLLISION.
OBJ_OPENLINK Se um identificador de objeto, com esse conjunto de sinalizadores, for passado para uma rotina que abre objetos e, se o objeto for um objeto de link simbólico, a rotina deverá abrir o objeto de link simbólico em si, em vez do objeto ao qual o link simbólico se refere (que é o comportamento padrão).
OBJ_KERNEL_HANDLE O identificador é criado no contexto do processo do sistema e só pode ser acessado no modo kernel.
OBJ_FORCE_ACCESS_CHECK A rotina que abre o identificador deve impor todas as verificações de acesso para o objeto, mesmo que o identificador esteja sendo aberto no modo kernel.
OBJ_DONT_REPARSE Se esse sinalizador estiver definido, nenhum ponto de nova análise será seguido ao analisar o nome do objeto associado. Se houver novas análises, a tentativa falhará e retornará um resultado STATUS_REPARSE_POINT_ENCOUNTERED . Isso pode ser usado para determinar se há pontos de nova análise no caminho do objeto, em cenários de segurança.
OBJ_IGNORE_IMPERSONATED_DEVICEMAP Um mapa de dispositivo é um mapeamento entre os nomes de dispositivo dos DOS e os dispositivos no sistema e é usado ao resolver nomes dos DOS. Existem mapas de dispositivo separados para cada usuário no sistema e os usuários podem gerenciar seus próprios mapas de dispositivo. Normalmente, durante a representação, o mapa do dispositivo do usuário representado seria usado. No entanto, quando esse sinalizador é definido, o mapa do dispositivo do usuário do processo é usado.
OBJ_VALID_ATTRIBUTES Reservado.

SecurityDescriptor

Especifica um descritor de segurança (SECURITY_DESCRIPTOR) para o objeto quando o objeto é criado. Se SecurityDescriptor for NULL, o objeto receberá as configurações de segurança padrão. Consulte DACL para um novo objeto.

SecurityQualityOfService

Qualidade opcional de serviço a ser aplicada ao objeto quando ele é criado. Usado para indicar o nível de representação de segurança e o modo de acompanhamento de contexto (dinâmico ou estático). Atualmente, a macro InitializeObjectAttributes define esse membro como NULL.

Comentários

Use a macro InitializeObjectAttributes para inicializar os membros da estrutura OBJECT_ATTRIBUTES . Observe que InitializeObjectAttributes inicializa o membro SecurityQualityOfService para NULL. Se você precisar especificar um valor diferenteNULL , defina o membro SecurityQualityOfService após a inicialização.

Para aplicar os atributos contidos nessa estrutura a um objeto ou identificador de objeto, passe um ponteiro para essa estrutura para uma rotina que acessa objetos ou retorna identificadores de objeto, como ZwCreateFile ou ZwCreateDirectoryObject.

Todos os membros dessa estrutura são somente leitura. Se um membro dessa estrutura for um ponteiro, o objeto para o qual esse membro aponta também será somente leitura. Os membros e objetos somente leitura podem ser usados para adquirir informações relevantes, mas não devem ser modificados. Para definir os membros dessa estrutura, use a macro InitializeObjectAttributes .

As rotinas de driver executadas em um contexto de processo diferente do processo do sistema devem definir o sinalizador OBJ_KERNEL_HANDLE para o membro Attributes (usando a macro InitializeObjectAttributes ). Isso restringe o uso de um identificador aberto para esse objeto a processos em execução somente no modo kernel. Caso contrário, o identificador pode ser acessado pelo processo em cujo contexto o driver está em execução.

Requisitos

Requisito Valor
Cabeçalho ntdef.h (incluem D3dkmthk.h, Ntdef.h, Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h)

Confira também

FltCreateCommunicationPort

FltCreateFile

FltCreateFileEx

FltCreateFileEx2

InitializeObjectAttributes

IoCreateFile

IoCreateFileEx

IoCreateFileSpecifyDeviceObjectHint

ZwCreateDirectoryObject

ZwCreateFile

DACL para um novo objeto