Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab_drsp_07.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
247.81 Кб
Скачать

2.5. Зміна інформації в маркері доступу

Для зміни в маркері доступу інформації, використовуваної в алгоритмі для задавання за умовчанням атрибутів безпеки нового об'єкту, застосовується функція SetTokenInformation, яка має наступний прототип:

BOOL SetTokenInformation(

HANDLE TokenHandle, // дескриптор маркера доступу

TOKEN_INFORMATION_CLASS TokenInformationClass, // тип інформації

LPVOID TokenInformation, // покажчик на буфер з інформацією

DWORD TokenInformationLength // довжина буфера з інформацією

);

В разі вдалого завершення функція поверне ненульове значення, а в разі невдачі — FALSE. Код помилки в разі невдалого завершення функції можна отримати за допомогою виклику функції GetLastError. Параметри функції SetTokenInformation мають наступне призначення.

Параметр TokenHandle повинен містити дескриптор маркера доступу, з якого витягується інформація. Причому цей маркер доступу має бути відкритий в режимі token_adjust_default.

Параметр TokenInformationClass повинен містити одне із значень переліку типу token_information_class, яке вказує, яку інформацію в маркері доступу змінює функція. При використанні функції SetTokenInformation в цьому параметрі можуть бути встановлені тільки наступні константи:

- TokenOwner — інформація про власника об'єкту за умовчанням;

- TokenPrimaryGroup — інформація про первинну групу власника об'єкту за умовчанням;

- TokenDefaultDacl — інформація про список DACL об'єкту за умовчанням.

Параметр TokenInformation повинен указувати на буфер з інформацією, яка буде встановлена в маркер доступу. Залежно від значення, заданого параметром TokenInformationClass, інформація в буфері повинна зберігатися в структурі одного з наступних типів:

- TokenPrimaryGroup — TOKEN_PRIMARY_GROUP;

- TokenDefaultDacl — TOKEN_DEFAULT_DACL;

- TokenSource — TOKEN_SOURCE.

Параметр TokenInformationLength повинен містити довжину буфера, на який вказує параметр TokenInformation.

У лістингу 7.3.6 (Додаток А) приведена програма, в якій функція SetTokenInformation змінює ідентифікатор безпеки власника об'єкту, який використовується в алгоритмі установки власника нового об'єкту за умовчанням.

2.6. Налаштування привілеїв

Тепер розглянемо, як налаштовувати привілеї в маркері доступу. Взагалі привілеї даються користувачеві при реєстрації цього користувача в системі. Кожен користувач має свій набір привілеїв, деякі з яких можуть бути встановлені або дійсні, а деякі — скинуті або відмінені. Маркер доступу отримує свій набір привілеїв з облікового запису користувача, який є джерелом створення даного маркера доступу. Додати нові або видалити існуючі привілеї в маркері доступу неможливо. Можна тільки зробити привілей дійсним або відміненим. Тобто, іншими словами, встановити або скинути привілей відповідно. Назвемо таку роботу з привілеями налаштуванням привілеїв в маркері доступу.

Для налаштування привілеїв, доступних в маркері доступу, використовується функція AdjustTokenPrivileges, яка має наступний прототип:

BOOL AdjustTokenPrivileges(

HANDLE TokenHandle, // дескриптор маркера доступу

BOOL DisableAllPrivileges, // прапор скидання всіх привілеїв

PTOKEN_PRIVILEGES NewState, // новий стан привілеїв

DWORD BufferLength, // довжина буфера PreviousState

PTOKEN_PRIVILEGES PreviousState, // старий стан привілеїв

PDWORD ReturnLength // необхідна довжина буфера PreviousState

);

В разі вдалого завершення функція поверне ненульове значення, а в разі невдачі — FALSE. Код помилки в разі невдалого завершення функції можна отримати за допомогою виклику функції GetLastError. Параметри функції AdjustTokenPrivileges мають наступне призначення.

Параметр TokenHandle повинен містити дескриптор маркера доступу, в якому налаштовуються привілеї. Причому маркер доступу має бути відкритий в режимі token_adjust_privileges.

У параметрі DisabieAiiPriviieges має бути встановлене одне із значень: FALSE або TRUE. Якщо встановлено значення FALSE, то функція налаштовує привілеї відповідно до інформації, заданої параметром NewState. Якщо ж в цьому параметрі встановлено значення TRUE, то функція відміняє всі привілеї в заданому маркері доступу.

Параметр NewState повинен вказувати на структуру типу token_privileges, яка містить привілеї і нові стани для кожного з перерахованих привілеїв. Якщо для привілею встановлений прапор se_privilege_enabled, то привілей стає дійсним, інакше — привілей відміняється.

Параметр BufferLength повинен містити розмір буфера пам'яті, на який вказує параметр PreviousState. Якщо в PreviousState встановлено значення NULL, то в цьому параметрі може бути встановлене значення 0.

Параметр PreviousState повинен вказувати на буфер, в який функція запише структуру типа token_privileges. Ця структура міститиме попередній стан привілеїв маркера доступу. У цьому параметрі може бути встановлене значення NULL. В цьому випадку функція не поверне попередній стан привілеїв маркера доступу. Якщо довжина буфера недостатня для запису попереднього стану привілеїв, то функція закінчиться невдачею, а необхідна довжина буфера буде записана в змінну, на яку указує параметр ReturnLength. При цьому відмітимо, що попередній стан привілеїв маркера доступу використовується для відновлення привілеїв в первинний стан.

Параметр ReturnLength повинен вказувати на змінну типу PDWORD, в яку функція запише необхідний розмір буфера для попереднього стану привілеїв маркера доступу, якщо розмір, заданий параметром BufferLength, менше за необхідний. Якщо в параметрі PreviousState встановлено значення NULL, то в цьому параметрі також може бути встановлене значення NULL.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]