Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АОПИ. Старое / АОПИ. Глава 2. Конспекты (02_04_19).rtf
Скачиваний:
65
Добавлен:
10.09.2019
Размер:
363.46 Кб
Скачать

Дескриптор защиты (структура)

typedef struct _SECURITY_DESCRIPTOR {

BYTE Revision; /// Ревизия структуры

BYTE Sbz1; /// Биты менеджера ресурсов

SECURITY_DESCRIPTOR_CONTROL Control; /// Битовые флаги управления доступом

PSID Owner; /// SID владельца

PSID Group; /// SID группы

PACL Sacl; /// SACL

PACL Dacl; /// DACL

} SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR;

Краткое описание.

Объекты, к которым могут получать доступ процессы, имеют специальный атрибут — дескриптор защиты (security descriptor), содержащий информацию обо всех пользователях, которым разрешен или запрещен доступ к объекту.

Параметры и описание:

(1) Revision — определяет 8-битное значение без знака, указывающее ревизию структуры SECURITY_DESCRIPTOR. Это поле должно быть установлено в единицу.

(2) Sbz1 — определяет 8-битное значение без знака, если только бит Control RM не установлен в 0x1. Если бит Control RM установлен в 0x1, Sbz1 интерпретируется как управляющие биты менеджера ресурсов.

(3) Control — определяет 16-битное поле без знака, которое задает битовые флаги управления доступом.

(4) Owner — определяет идентификатор безопасности владельца (SID владельца).

(5) Group — определяет идентификатор безопасности основной группы (SID первичной группы).

(6) Sacl — определяет системный список управления доступом (system access-control list, SACL). Указывает, какие операции и каких пользователей должны регистрироваться в журнале аудита безопасности.

(7) Dacl — определяет список избирательного управления доступом (discretionary access-control list, DACL). Указывает, кто может получать доступ к объекту и какие виды доступа.

Создание собственного дескриптора безопасности вряд ли когда-либо Вам пригодится. Поэтому здесь нет примера, однако приведена ссылка на пример от Microsoft (английский язык, C++). URL:

docs.microsoft.com/en-us/windows/desktop/secauthz/creating-a-security-descriptor-for-a-new-object-in-c--

§3. Синхронизация задач с помощью объектов ядра «семафор» (Semaphore).

Семафор — объект, ограничивающий количество потоков, которые могут войти в заданный участок кода.

Поток получает доступ к ресурсу, вызывая одну из wаit-функций и передавая ей дескриптор семафора, охраняющего этот ресурс. Wаit-функция проверяет у семафора значение счетчика текущего числа ресурсов. Если оно больше нуля и семафор свободен, то значение счетчика уменьшается на единицу, а вызывающий поток продолжает выполнение. Очень важно, что эта операция выполняется для семафора на уровне атомарного доступа. Иначе говоря, пока wаit-функция не вернет управление, операционная система не позволит прервать эту операцию никакому другому потоку.

Если wаit-функция определяет, что счетчик текущего числа ресурсов равен нулю (семафор занят), то система переводит вызывающий поток в состояние ожидания.

Когда другой поток увеличит значение этого счетчика, система вспомнит о ждущем потоке и снова начнет выделять ему процессорное время. А он, захватив ресурс, уменьшит значение счетчика на единицу.

Если семафор может принимать только значения 0 или 1, то его называют двоичным семафором.

При создании семафора для него задается максимальное число его счетчика.

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

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