Функция 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, например одно из следующих значений:
Код возврата | Описание |
---|---|
|
Буфер, на который указывает параметр AbsoluteSecurityDescriptor , не содержал SECURITY_DESCRIPTOR структуры в абсолютном формате. STATUS_BAD_DESCRIPTOR_FORMAT — это код ошибки. |
|
Буфер, на который указывает параметр 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 |