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

Лабораторна робота7

Функції роботи з привілеями та маркером доступу

Навчальні та виховні цілі:

1. Ознайоммлення із застосуванням функцій для роботи з привілеями та маркерами доступу.

2. Отримання практичних навичок роботи із функціями для роботи з привілеями та маркерами доступу.

Літератvра:

  1. Побегайло А. П. Системное программирование в Windows. – СПб.: БХВ-Петербург, 2006. – 1056 с. (с. 683-693, 885-986)

  2. Харт Д.М. Системное программирование в среде Windows, 3-е издание. – М: Изд. Дом «Вильямс», 2005. – 592 с.

Завдання для виконання

  1. Написати та відлагодити програму , яка створює новий локальний ідентифікатор за допомогою виклику функції AllocateLocallyUniqueId. (п.1.1).

  2. Написати та відлагодити програму, яка спочатку визначає локальний ідентифікатор привілею, використовуючи для цього функцію LookupPrivilegeValue, а потім визначає ім'я привілею по її локальному ідентифікатору, використовуючи для цього функцію LookupPrivilegeName. (п. 1.2).

  3. Написати та відлагодити програму, яка визначає зручне для відображення ім'я привілею по її внутрішньому імені, використовуючи для цього функцію LookupPrivilegeDisplayName. (п.1.3).

  4. Написати та відлагодити програму, в якій функція GetTokenInformation використовується для визначення джерела маркера доступу. (п.2.4).

  5. Написати та відлагодити програму, в якій функція GetTokenInformation використовується для визначення всіх привілеїв маркера доступу. (п.2.4).

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

  7. Написати та відлагодити програму, в якій за допомогою функції CreateRestrictedToken створюється і перевіряється маркер обмеженого доступу. (п.2.8)

Теоретична частина

1. Функції для роботи з привілеями

1.1. Ініціалізація локального ідентифікатора

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

BOOL AllocateLocallyUniqueId(

PLUID Luid // покажчик на локальний ідентифікатор

);

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

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

1.2. Отримання локального ідентифікатора і імені привілею

Для отримання локального ідентифікатора привілею за іменем привілею використовується функція LookupPrivilegeValue, яка має наступний прототип:

BOOL LookupPrivilegeValue(

LPCWSTR lpSystemName, // ім'я системи

LPCWSTR lpName, // ім'я привілею

PLUID lpLuid // адреса локального ідентифікатора

);

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

Параметр lpSystemName повинен указувати на ім’я комп'ютера, на якому шукається локальний ідентифікатор привілею. Якщо в цьому параметрі встановлено значення NULL, то локальний ідентифікатор привілею шукається на локальному комп'ютері.

Параметр lpName повинен указувати на ім’я привілею, для якого шукається локальний ідентифікатор.

Параметр lpLuid повинен указувати на структуру типа LUID, в яку функція помістить локальний ідентифікатор привілею.

Програма, в якій локальний ідентифікатор привілею визначається за допомогою виклику функції LookupPrivilegeValue, приведена в лістингу 42.2.

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

BOOL LookupPrivilegeName(

LPCWSTR lpSystemName, // ім'я системи

PLUID IpLuid, // адреса локального ідентифікатора

LPWSTR lpName, // ім'я привілею

LPDWORD cbName // довжина імені привілею

);

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

Параметри функції мають наступне призначення.

Параметр lpSystemName повинен указувати на ім’я комп'ютера, на якому шукається ім'я привілею, відповідного локальному ідентифікатору, на який указує параметр lpLuid. Якщо в цьому параметрі встановлено значення NULL, то ім'я привілею шукається на локальному комп'ютері.

Параметр lpLuid повинен указувати на структуру типа LUID, яка містить локальний ідентифікатор привілею, ім'я якого визначається.

Параметр lpName повинен указувати на буфер пам'яті, в який функція запише ім'я привілею.

Параметр cbName повинен указувати на змінну типа DWORD, яка містить довжину буфера для імені привілею. Якщо ця довжина менше необхідною, то функція закінчиться невдачею і в цю змінну буде записана необхідна довжина буфера для імені привілею.

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

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