Операционные системы. Учебное пособие. Марапулец Ю.В. - 154 стр.

UptoLike

Составители: 

Функция InitializeSecurityDescriptor инициализирует указанный вами дескриптор
таким образом, что в нем отсутствует DAСL, SACL, владелец и основная группа вла-
дельца, а все управляющие флаги установлены в значение FALSE. При этом дескриптор
имеет абсолютный формат. Что это значит? Дескриптор в абсолютном (absolute) форма-
те содержит лишь указатели на информацию, связанную с защитой объекта. В отличие
от этого дескриптор в относительном (self-relative) формате включает в себя всю необ-
ходимую информацию, которая располагается в памяти последовательно поле за полем.
Таким образом, абсолютный дескриптор нельзя записать на диск (так как при после-
дующем чтении его с диска все указатели потеряют смысл), а относительный дескрип-
тор - можно.
Windows позволяет преобразовывать абсолютный дескриптор в относительную
форму и обратно. Обычно это требуется лишь в случае, если вы записываете дескриптор
на диск и считываете дескриптор с диска. Системные вызовы, требующие передачи ука-
зателя на дескриптор безопасности, работают только с дескрипторами в абсолютном
формате.
Преобразование осуществляется при помощи функций MakeSelfRelativeSD и Ma-
keAbsoluteSD. Преобразовать абсолютную форму в относительную несложно. Однако
обратное преобразование (из относительной в абсолютную) обычно выполняется в не-
сколько этапов. Дело в том, что при этом необходимо подготовить несколько буферов в
памяти и передать указатели на них в функцию MakeAbsoluteSD.
Для работы с идентификаторами SID используются две основные функции: Looku-
pAccountName и LookupAccountSid. Эти функции позволяют преобразовать идентифи-
катор SID в имя учетной записи, и наоборот, имя учетной записи в идентификатор SID.
Если программа работает в сетевой среде, она может обратиться к этим функциям
с удаленного компьютера. Эта возможность может пригодиться, например, при разра-
ботке сервера, который обслуживает удаленных клиентов. При обращении к любой из
этих функций в качестве имени компьютера можно указать NULL, и тогда вы сможете
получить интересующие вас сведения относительно локальных пользователей.
Помимо имени или идентификатора SID каждая из этих функций также сообщает
значение перечисляемого типа, указывающее, какому классу объектов соответствует
этот SID (табл. 7.2). Переменная типа SID_NAME_USE содержит класс идентификатора
SID, с которым вы имеете дело.
Таблица 7.2
Имя Описание
SidTypeUser Обычный пользователь
SidTypeGroup Обычная группа
SidTypeDomain Доменное имя
SidTypeAlias Псевдоним
SidTypeWellKnownGroup Хорошо известная группа
SidTypeDeletedAccount Старая учетная запись
SidTypeUnknown Неизвестный объект
Чтобы получить имя текущего пользователя, следует использовать функцию GetU-
serName. Получив имя, вы можете определить соответствующий SID при помощи функ-
ции LookupAccountSid.
Не всем идентификаторам SID соответствуют имена. Например, в процессе под-
ключения к системе пользователю присваивается произвольный SID, идентифицирую-
щий текущий рабочий сеанс. Этот SID не обладает соответствующим ему именем. К
функциям, которые могут оказаться полезными при работе с SID, можно отнести: Ano-
cateAndInitializeSid, InitializeSid, FreeSid, CopySid, IsValidSid, GetLengthSid и EqualSid.
Элемент управления доступом (Access Control Element, АСЕ) - это запись, которая
указывает на то, что некоторый пользователь (или группа) обладает определенным пра-
156
      Функция InitializeSecurityDescriptor инициализирует указанный вами дескриптор
таким образом, что в нем отсутствует DAСL, SACL, владелец и основная группа вла-
дельца, а все управляющие флаги установлены в значение FALSE. При этом дескриптор
имеет абсолютный формат. Что это значит? Дескриптор в абсолютном (absolute) форма-
те содержит лишь указатели на информацию, связанную с защитой объекта. В отличие
от этого дескриптор в относительном (self-relative) формате включает в себя всю необ-
ходимую информацию, которая располагается в памяти последовательно поле за полем.
Таким образом, абсолютный дескриптор нельзя записать на диск (так как при после-
дующем чтении его с диска все указатели потеряют смысл), а относительный дескрип-
тор - можно.
      Windows позволяет преобразовывать абсолютный дескриптор в относительную
форму и обратно. Обычно это требуется лишь в случае, если вы записываете дескриптор
на диск и считываете дескриптор с диска. Системные вызовы, требующие передачи ука-
зателя на дескриптор безопасности, работают только с дескрипторами в абсолютном
формате.
      Преобразование осуществляется при помощи функций MakeSelfRelativeSD и Ma-
keAbsoluteSD. Преобразовать абсолютную форму в относительную несложно. Однако
обратное преобразование (из относительной в абсолютную) обычно выполняется в не-
сколько этапов. Дело в том, что при этом необходимо подготовить несколько буферов в
памяти и передать указатели на них в функцию MakeAbsoluteSD.
      Для работы с идентификаторами SID используются две основные функции: Looku-
pAccountName и LookupAccountSid. Эти функции позволяют преобразовать идентифи-
катор SID в имя учетной записи, и наоборот, имя учетной записи в идентификатор SID.
      Если программа работает в сетевой среде, она может обратиться к этим функциям
с удаленного компьютера. Эта возможность может пригодиться, например, при разра-
ботке сервера, который обслуживает удаленных клиентов. При обращении к любой из
этих функций в качестве имени компьютера можно указать NULL, и тогда вы сможете
получить интересующие вас сведения относительно локальных пользователей.
      Помимо имени или идентификатора SID каждая из этих функций также сообщает
значение перечисляемого типа, указывающее, какому классу объектов соответствует
этот SID (табл. 7.2). Переменная типа SID_NAME_USE содержит класс идентификатора
SID, с которым вы имеете дело.
                                                                                  Таблица 7.2
            Имя                                           Описание
 SidTypeUser                    Обычный пользователь
 SidTypeGroup                   Обычная группа
 SidTypeDomain                  Доменное имя
 SidTypeAlias                   Псевдоним
 SidTypeWellKnownGroup Хорошо известная группа
 SidTypeDeletedAccount          Старая учетная запись
 SidTypeUnknown                 Неизвестный объект
      Чтобы получить имя текущего пользователя, следует использовать функцию GetU-
serName. Получив имя, вы можете определить соответствующий SID при помощи функ-
ции LookupAccountSid.
      Не всем идентификаторам SID соответствуют имена. Например, в процессе под-
ключения к системе пользователю присваивается произвольный SID, идентифицирую-
щий текущий рабочий сеанс. Этот SID не обладает соответствующим ему именем. К
функциям, которые могут оказаться полезными при работе с SID, можно отнести: Ano-
cateAndInitializeSid, InitializeSid, FreeSid, CopySid, IsValidSid, GetLengthSid и EqualSid.
      Элемент управления доступом (Access Control Element, АСЕ) - это запись, которая
указывает на то, что некоторый пользователь (или группа) обладает определенным пра-

                                            156