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) |