
- •Навчальні та виховні цілі:
- •1. Функції для роботи з привілеями
- •1.1. Ініціалізація локального ідентифікатора
- •1.2. Отримання локального ідентифікатора і імені привілею
- •1.3. Отримання імені привілею для відображення
- •2. Робота з маркерами доступу
- •2.1. Відкриття маркера доступу процесу
- •2.3. Структури, використовувані для роботи з маркером доступу
- •2.4. Отримання інформації з маркера доступу
- •2.5. Зміна інформації в маркері доступу
- •2.6. Налаштування привілеїв
- •2.7. Налаштування груп
- •2.8. Створення маркера обмеженого доступу
2.7. Налаштування груп
Під налаштуванням груп в маркері доступу розуміємо установку або скидання прапора se_group_enabled для кожної групи, пов'язаної із заданим маркером доступу. При цьому відзначимо, що цей прапор не може бути встановлений для групи зі встановленим прапором se_group_use_for_deny_only. Крім того, відмітимо, що прапор se_group_enabled не може бути скинутий для групи зі встановленим прапором se_group_mandatory.
Для налаштування груп використовується функція AdjustTokenGroups, яка має наступний прототип:
BOOL AdjustTokenGroups(
HANDLE TokenHandle, // дескриптор маркера доступу
BOOL ResetToDefault, // скинути в стан за умовчанням
PTOKEN_GROUPS NewState, // новий стан груп
DWORD BufferLength, // довжина буфера PreviousState
PTOKEN_GROUPS PreviousState, // попередній стан груп
PDWORD ReturnLength // необхідна довжина буфера PreviousState
);
В разі успішного завершення функція поверне ненульове значення, а в разі невдачі — FALSE. Код помилки в разі невдалого завершення функції можна отримати за допомогою виклику функції GetLastError. Параметри функції AdjustTokenPrivileges мають наступне призначення.
Параметр TokenHandle повинен містити дескриптор маркера доступу, в якому налаштовуються групи. Причому маркер доступу має бути відкритий в режимі token_adjust_groups.
У параметрі ResetToDefault має бути встановлене одне із значень: FALSE або TRUE. Якщо встановлено значення FALSE, то функція налаштовує групи відповідно до інформації, заданої параметром NewState. Якщо ж в цьому параметрі встановлено значення TRUE, то функція переводить всі групи в стани, які були задані за умовчанням.
Параметр NewState повинен вказувати на структуру типу token_groups, яка містить групи і нові прапори стану se_group_enabled для кожної з перерахованих груп. Якщо для групи встановлений прапор se_group_enabled, то цей прапор буде також встановлений і для відповідної групи в маркері доступу, інакше цей прапор буде скинутий для відповідної групи в маркері доступу.
Параметр BufferLength повинен містити розмір буфера пам'яті, на який вказує параметр PreviousState. Якщо в параметрі PreviousState встановлено значення NULL, то в цьому параметрі може бути встановлене значення 0.
Параметр PreviousState повинен вказувати на буфер, в який функція запише структуру типу TOKEN_GROUPS. Ця структура міститиме попередній стан груп, пов'язаних з маркером доступу. У цьому параметрі може бути встановлене значення NULL. В цьому випадку функція не поверне попередній стан груп з маркера доступу. Якщо довжина буфера недостатня для запису попереднього стану груп, то функція закінчиться невдачею, а необхідна довжина буфера буде записана в змінну, на яку указує параметр ReturnLength. При цьому попередній стан груп використовується для відновлення стану груп в початковий стан.
Параметр ReturnLength повинен указувати на змінну типу PDWORD, в яку функція запише необхідну довжину буфера для попереднього стану груп маркера доступу, якщо довжина задана параметром BufferLength менше необхідної. Якщо в параметрі PreviousState встановлено значення NULL, то в цьому параметрі також може бути встановлене значення NULL.