Абсолютные и Self-Relative дескрипторы безопасности

Дескриптор безопасности может быть либо в абсолютном, либо в само относительном формате. В абсолютном формате дескриптор безопасности содержит указатели на его сведения, а не на саму информацию. В автономном формате дескриптор безопасности хранит структуру SECURITY_DESCRIPTOR и связанные сведения о безопасности в непрерывном блоке памяти. Чтобы определить, является ли дескриптор безопасности само относительным или абсолютным, вызовите функцию GetSecurityDescriptorControl и проверка флаг SE_SELF_RELATIVE параметра SECURITY_DESCRIPTOR_CONTROL. Для преобразования между этими двумя форматами можно использовать функции MakeSelfRelativeSD и MakeAbsoluteSD .

Абсолютный формат полезен при создании дескриптора безопасности и наличии указателей на все компоненты, например, когда доступны параметры по умолчанию для владельца, группы и списка управления доступом на дискреционных условиях. В этом случае можно вызвать функцию InitializeSecurityDescriptor для инициализации структуры SECURITY_DESCRIPTOR , а затем вызвать такие функции, как SetSecurityDescriptorDacl , для назначения указателей ACL и SID на дескриптор безопасности.

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

За исключением MakeAbsoluteSD, все функции, возвращающие дескриптор безопасности, делают это с помощью само относительного формата. Дескрипторы безопасности, передаваемые в качестве аргументов в функцию, могут иметь как само относительную, так и абсолютную форму. Дополнительные сведения см. в документации по функции .