Função RtlSelfRelativeToAbsoluteSD (ntifs.h)

A rotina RtlSelfRelativeToAbsoluteSD cria um novo descritor de segurança em formato absoluto usando um descritor de segurança em formato auto-relativo como modelo.

Sintaxe

NTSYSAPI NTSTATUS RtlSelfRelativeToAbsoluteSD(
  [in]      PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor,
  [out]     PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor,
  [in, out] PULONG               AbsoluteSecurityDescriptorSize,
  [out]     PACL                 Dacl,
  [in, out] PULONG               DaclSize,
  [out]     PACL                 Sacl,
  [in, out] PULONG               SaclSize,
  [out]     PSID                 Owner,
  [in, out] PULONG               OwnerSize,
  [out]     PSID                 PrimaryGroup,
  [in, out] PULONG               PrimaryGroupSize
);

Parâmetros

[in] SelfRelativeSecurityDescriptor

Ponteiro para um buffer alocado pelo chamador que contém uma estrutura SECURITY_DESCRIPTOR no formato auto-relativo. RtlSelfRelativeToAbsoluteSD cria uma versão desse descritor de segurança em formato absoluto sem modificar o original.

[out] AbsoluteSecurityDescriptor

Ponteiro para um buffer alocado pelo chamador que recebe o corpo main de um descritor de segurança de formato absoluto. Essas informações são formatadas como uma estrutura SECURITY_DESCRIPTOR.

[in, out] AbsoluteSecurityDescriptorSize

Ponteiro para uma variável alocada pelo chamador que especifica o tamanho, em bytes, do buffer apontado pelo parâmetro AbsoluteSecurityDescriptor . Se o buffer não for grande o suficiente para manter o descritor de segurança, RtlSelfRelativeToAbsoluteSD retornará STATUS_BUFFER_TOO_SMALL e definirá essa variável com o tamanho mínimo necessário.

[out] Dacl

Ponteiro para um buffer alocado pelo chamador que recebe a DACL do descritor de segurança de formato absoluto. O corpo main do descritor de segurança de formato absoluto faz referência a esse ponteiro.

[in, out] DaclSize

Ponteiro para uma variável alocada pelo chamador que especifica o tamanho, em bytes, do buffer apontado pelo parâmetro Dacl . Se o buffer não for grande o suficiente para manter a DACL, RtlSelfRelativeToAbsoluteSD retornará STATUS_BUFFER_TOO_SMALL e definirá essa variável com o tamanho mínimo necessário.

[out] Sacl

Ponteiro para um buffer alocado pelo chamador que recebe a SACL do descritor de segurança de formato absoluto. O corpo main do descritor de segurança de formato absoluto faz referência a esse ponteiro.

[in, out] SaclSize

Ponteiro para uma variável alocada pelo chamador que especifica o tamanho, em bytes, do buffer apontado pelo parâmetro Sacl . Se o buffer não for grande o suficiente para manter a SACL, RtlSelfRelativeToAbsoluteSD retornará STATUS_BUFFER_TOO_SMALL e definirá essa variável com o tamanho mínimo necessário.

[out] Owner

Ponteiro para um buffer alocado pelo chamador que recebe o SID do proprietário do descritor de segurança de formato absoluto. O corpo main do descritor de segurança de formato absoluto faz referência a esse ponteiro.

[in, out] OwnerSize

Ponteiro para uma variável alocada pelo chamador que especifica o tamanho, em bytes, do buffer apontado pelo parâmetro Owner . Se o buffer não for grande o suficiente para manter o SID, RtlSelfRelativeToAbsoluteSD retornará STATUS_BUFFER_TOO_SMALL e definirá essa variável com o tamanho mínimo necessário.

[out] PrimaryGroup

Ponteiro para um buffer alocado pelo chamador que recebe o SID do grupo primário do descritor de segurança de formato absoluto. O corpo main do descritor de segurança de formato absoluto faz referência a esse ponteiro.

[in, out] PrimaryGroupSize

Ponteiro para uma variável alocada pelo chamador que especifica o tamanho, em bytes, do buffer apontado pelo parâmetro PrimaryGroup . Se o buffer não for grande o suficiente para manter o SID, RtlSelfRelativeToAbsoluteSD retornará STATUS_BUFFER_TOO_SMALL e definirá essa variável com o tamanho mínimo necessário.

Retornar valor

RtlSelfRelativeToAbsoluteSD retorna STATUS_SUCCESS ou um valor NTSTATUS apropriado, como um dos seguintes:

Código de retorno Descrição
STATUS_BAD_DESCRIPTOR_FORMAT
O buffer apontado pelo parâmetro AbsoluteSecurityDescriptor não continha uma estrutura SECURITY_DESCRIPTOR em formato absoluto. STATUS_BAD_DESCRIPTOR_FORMAT é um código de erro.
STATUS_BUFFER_TOO_SMALL
O buffer apontado pelo parâmetro AbsoluteSecurityDescriptor , Dacl, Sacl, Owner ou PrimaryGroup era muito pequeno. STATUS_BUFFER_TOO_SMALL é um código de erro.

Comentários

Um descritor de segurança em formato absoluto contém ponteiros para as informações, em vez de conter as informações em si. Um descritor de segurança em formato autorrelativo contém as informações em um bloco de memória contíguo. Em um descritor de segurança auto-relativo, uma estrutura SECURITY_DESCRIPTOR sempre inicia as informações, mas os outros componentes do descritor de segurança podem seguir a estrutura SECURITY_DESCRIPTOR em qualquer ordem. Em vez de usar endereços de memória, os componentes do descritor de segurança são identificados por deslocamentos desde o início do descritor de segurança. Esse formato é útil quando um descritor de segurança deve ser armazenado em um disquete ou transmitido por meio de um protocolo de comunicação.

Observe que o parâmetro AbsoluteSecurityDescriptor recebe apenas o corpo main do descritor de segurança absoluto. Todo o descritor de segurança absoluta consiste nesse corpo main, além de todos os componentes do descritor de segurança retornados nos buffers Dacl, Sacl, Owner e PrimaryGroup. Portanto, o chamador não pode liberar esses buffers depois de chamar RtlSelfRelativeToAbsoluteSD, pois isso invalidaria o descritor de segurança absoluto.

Para criar um novo descritor de segurança no formato auto-relativo usando um descritor de segurança em formato absoluto como modelo, use RtlAbsoluteToSelfRelativeSD.

Para obter mais informações sobre segurança e controle de acesso, consulte a documentação do SDK do Microsoft Windows.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows Server 2003 SP1
Plataforma de Destino Universal
Cabeçalho ntifs.h (inclua Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

Confira também

ACL

RtlAbsoluteToSelfRelativeSD

RtlCreateSecurityDescriptor

RtlLengthSecurityDescriptor

RtlSetDaclSecurityDescriptor

RtlSetOwnerSecurityDescriptor

RtlValidSecurityDescriptor