Функция RtlSelfRelativeToAbsoluteSD (ntifs.h)

Подпрограмма RtlSelfRelativeToAbsoluteSD создает новый дескриптор безопасности в абсолютном формате, используя в качестве шаблона дескриптор безопасности в относительном формате.

Синтаксис

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

Параметры

[in] SelfRelativeSecurityDescriptor

Указатель на буфер, выделенный вызывающим объектом, который содержит структуру SECURITY_DESCRIPTOR в автономном формате. RtlSelfRelativeToAbsoluteSD создает версию этого дескриптора безопасности в абсолютном формате без изменения исходного.

[out] AbsoluteSecurityDescriptor

Указатель на буфер, выделенный вызывающим объектом, который получает main тело дескриптора безопасности абсолютного формата. Эти сведения форматируются в виде структуры SECURITY_DESCRIPTOR.

[in, out] AbsoluteSecurityDescriptorSize

Указатель на переменную, выделенную вызывающим объектом, которая указывает размер буфера в байтах, на который указывает параметр AbsoluteSecurityDescriptor . Если буфер недостаточно велик для хранения дескриптора безопасности, функция RtlSelfRelativeToAbsoluteSD возвращает STATUS_BUFFER_TOO_SMALL и задает для этой переменной минимальный требуемый размер.

[out] Dacl

Указатель на буфер, выделенный вызывающим объектом, который получает DACL дескриптора безопасности абсолютного формата. Текст main дескриптора безопасности абсолютного формата ссылается на этот указатель.

[in, out] DaclSize

Указатель на переменную, выделенную вызывающим объектом, которая указывает размер буфера в байтах, на который указывает параметр Dacl . Если буфер недостаточно велик для хранения DACL, RtlSelfRelativeToAbsoluteSD возвращает STATUS_BUFFER_TOO_SMALL и задает для этой переменной минимальный требуемый размер.

[out] Sacl

Указатель на буфер, выделенный вызывающим объектом, который получает saCL дескриптора безопасности абсолютного формата. Текст main дескриптора безопасности абсолютного формата ссылается на этот указатель.

[in, out] SaclSize

Указатель на переменную, выделенную вызывающим объектом, которая указывает размер буфера в байтах, на который указывает параметр Sacl . Если буфер недостаточно велик для хранения SACL, RtlSelfRelativeToAbsoluteSD возвращает STATUS_BUFFER_TOO_SMALL и задает для этой переменной минимальный требуемый размер.

[out] Owner

Указатель на буфер, выделенный вызывающим объектом, который получает идентификатор безопасности владельца дескриптора безопасности абсолютного формата. Текст main дескриптора безопасности абсолютного формата ссылается на этот указатель.

[in, out] OwnerSize

Указатель на переменную, выделенную вызывающим объектом, которая указывает размер буфера в байтах, на который указывает параметр Owner . Если буфер недостаточно велик для хранения идентификатора безопасности, RtlSelfRelativeToAbsoluteSD возвращает STATUS_BUFFER_TOO_SMALL и задает для этой переменной минимальный требуемый размер.

[out] PrimaryGroup

Указатель на буфер, выделенный вызывающим объектом, который получает идентификатор безопасности основной группы дескриптора безопасности абсолютного формата. Текст main дескриптора безопасности абсолютного формата ссылается на этот указатель.

[in, out] PrimaryGroupSize

Указатель на переменную, выделенную вызывающим объектом, которая указывает размер (в байтах) буфера, на который указывает параметр PrimaryGroup . Если буфер недостаточно велик для хранения идентификатора безопасности, RtlSelfRelativeToAbsoluteSD возвращает STATUS_BUFFER_TOO_SMALL и задает для этой переменной минимальный требуемый размер.

Возвращаемое значение

RtlSelfRelativeToAbsoluteSD возвращает STATUS_SUCCESS или соответствующее значение NTSTATUS, например одно из следующих значений:

Код возврата Описание
STATUS_BAD_DESCRIPTOR_FORMAT
Буфер, на который указывает параметр AbsoluteSecurityDescriptor , не содержал SECURITY_DESCRIPTOR структуры в абсолютном формате. STATUS_BAD_DESCRIPTOR_FORMAT — это код ошибки.
STATUS_BUFFER_TOO_SMALL
Буфер, на который указывает параметр AbsoluteSecurityDescriptor , Dacl, Sacl, Owner или PrimaryGroup , был слишком мал. STATUS_BUFFER_TOO_SMALL — это код ошибки.

Комментарии

Дескриптор безопасности в абсолютном формате содержит указатели на информацию, а не саму информацию. Дескриптор безопасности в автономном формате содержит сведения в непрерывном блоке памяти. В самостоятельном дескрипторе безопасности SECURITY_DESCRIPTOR структура всегда запускает сведения, но другие компоненты дескриптора безопасности могут следовать за структурой SECURITY_DESCRIPTOR в любом порядке. Вместо использования адресов памяти компоненты дескриптора безопасности идентифицируются по смещениям от начала дескриптора безопасности. Этот формат удобен, когда дескриптор безопасности должен храниться на диске или передаваться по протоколу связи.

Обратите внимание, что параметр AbsoluteSecurityDescriptor получает только main тело абсолютного дескриптора безопасности. Весь абсолютный дескриптор безопасности состоит из этого main тела, а также всех компонентов дескриптора безопасности, возвращенных в буферах Dacl, Sacl, Owner и PrimaryGroup. Таким образом, вызывающий объект не может освободить эти буферы после вызова RtlSelfRelativeToAbsoluteSD, так как это приведет к аннулированию абсолютного дескриптора безопасности.

Чтобы создать новый дескриптор безопасности в относительном формате с помощью дескриптора безопасности в абсолютном формате в качестве шаблона, используйте RtlAbsoluteToSelfRelativeSD.

Дополнительные сведения о безопасности и управлении доступом см. в документации по Microsoft Windows SDK.

Требования

Требование Значение
Минимальная версия клиента Windows Server 2003 с пакетом обновления 1 (SP1)
Целевая платформа Универсальное
Верхняя часть ntifs.h (включая Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

См. также раздел

ACL

RtlAbsoluteToSelfRelativeSD

RtlCreateSecurityDescriptor

RtlLengthSecurityDescriptor

RtlSetDaclSecurityDescriptor

RtlSetOwnerSecurityDescriptor

RtlValidSecurityDescriptor