Функция 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
Указатель на выделенный вызывающим буфером, который получает основной текст дескриптора безопасности абсолютного формата. Эти сведения форматируются как структура SECURITY_DESCRIPTOR.
[in, out] AbsoluteSecurityDescriptorSize
Указатель на выделенную вызывающим переменную, указывающую размер буфера в байтах, на который указывает параметр AbsoluteSecurityDescriptor. Если буфер недостаточно велик для хранения дескриптора безопасности, RtlSelfRelativeToAbsoluteSD возвращает STATUS_BUFFER_TOO_SMALL и задает эту переменную минимальному требуемому размеру.
[out] Dacl
Указатель на выделенный вызывающим буфером, который получает DACL дескриптора безопасности абсолютного формата. Основной текст дескриптора безопасности абсолютного формата ссылается на этот указатель.
[in, out] DaclSize
Указатель на выделенную вызывающим переменную, указывающую размер буфера в байтах, на который указывает параметр Dacl. Если буфер недостаточно велик для хранения DACL, RtlSelfRelativeToAbsoluteSD возвращает STATUS_BUFFER_TOO_SMALL и задает эту переменную минимальному требуемому размеру.
[out] Sacl
Указатель на выделенный вызывающим буфером, который получает SACL дескриптора безопасности абсолютного формата. Основной текст дескриптора безопасности абсолютного формата ссылается на этот указатель.
[in, out] SaclSize
Указатель на выделенную вызывающим переменную, указывающую размер буфера в байтах, на который указывает параметр Sacl. Если буфер недостаточно велик для хранения SACL, RtlSelfRelativeToAbsoluteSD возвращает STATUS_BUFFER_TOO_SMALL и задает для этой переменной минимальный требуемый размер.
[out] Owner
Указатель на выделенный вызывающим буфером, который получает идентификатор безопасности владельца дескриптора безопасности абсолютного формата. Основной текст дескриптора безопасности абсолютного формата ссылается на этот указатель.
[in, out] OwnerSize
Указатель на выделенную вызывающим переменную, указывающую размер буфера в байтах, на который указывает параметр владельца. Если буфер недостаточно велик для хранения идентификатора безопасности, RtlSelfRelativeToAbsoluteSD возвращает STATUS_BUFFER_TOO_SMALL и задает для этой переменной минимальный требуемый размер.
[out] PrimaryGroup
Указатель на выделенный вызывающим буфером, который получает идентификатор безопасности основной группы дескриптора безопасности абсолютного формата. Основной текст дескриптора безопасности абсолютного формата ссылается на этот указатель.
[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 primaryGroup слишком мал. STATUS_BUFFER_TOO_SMALL — это код ошибки. |
Замечания
Дескриптор безопасности в абсолютном формате содержит указатели на информацию, а не саму информацию. Дескриптор безопасности в автономном формате содержит сведения в непрерывном блоке памяти. В дескрипторе безопасности SECURITY_DESCRIPTOR структура всегда запускает информацию, но другие компоненты дескриптора безопасности могут следовать SECURITY_DESCRIPTOR структуре в любом порядке. Вместо использования адресов памяти компоненты дескриптора безопасности определяются смещениями с начала дескриптора безопасности. Этот формат полезен, если дескриптор безопасности должен храниться на диске floppy или передаваться с помощью протокола связи.
Обратите внимание, что параметр AbsoluteSecurityDescriptor получает только основной текст абсолютного дескриптора безопасности. Весь дескриптор абсолютной безопасности состоит из этого основного тела, а также всех компонентов дескриптора безопасности, возвращаемых в Dacl, Sacl, Ownerи буферов primaryGroup. Таким образом, вызывающий объект не может освободить эти буферы после вызова RtlSelfRelativeToAbsoluteSD, так как это приведет к недопустимости абсолютного дескриптора безопасности.
Чтобы создать дескриптор безопасности в автономном формате с помощью дескриптора безопасности в абсолютном формате в качестве шаблона, используйте RtlAbsoluteToSelfRelativeSD.
Дополнительные сведения о безопасности и управлении доступом см. в документации по пакету SDK для Microsoft Windows.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows Server 2003 с пакетом обновления 1 (SP1) |
целевая платформа | Всеобщий |
заголовка | ntifs.h (include Ntifs.h) |
библиотеки | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |