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

1.3. Отримання імені привілею для відображення

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

BOOL LookupPrivilegeDisplayName(

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

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

LPSTR lpDisplayName, // ім'я привілею для відображення

LPDWORD cbDisplayName, // довжина імені привілею для відображення

LPDWORD lpLanguageld // ідентифікатор мови

);

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

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

Параметр lpName повинен указувати ім'я привілею, для якого визначається зручне для відображення ім'я.

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

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

Параметр lpLanguageId повинен указувати на змінну типа DWORD, в яку функція запише ідентифікатор мови, використовуваної при написанні імені привілею, зручного для відображення.

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

2. Робота з маркерами доступу

2.1. Відкриття маркера доступу процесу

Перш ніж з маркером доступу можна буде проводити які-небудь дії, його потрібно відкрити. Для відкриття маркера доступу процесу використовується функція OpenProcessToken, яка має наступний прототип:

BOOL OpenProcessToken(

HANDLE ProcessHandle, // дескриптор процесу

DWORD DesiredAccess, // режими доступу до маркера доступу процесу

PHANDLE TokenHandle // адреса маркера доступу процесу

);

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

Параметр ProcessHandle повинен містити дескриптор процесу, маркер доступу якого відкривається.

У параметрі DesiredAccess мають бути встановлені прапори, що позначають потрібні права доступу до маркера доступу процесу. Нижче перераховані прапори, які можна встановити в цьому полі маркера доступу. Специфічні для маркера доступу права доступу встановлюються наступним прапорами:

- token_assign_primary — право приєднати первинний маркер доступу до процесу;

- token_duplicate — право дублювати маркер доступу;

- token_impersonate — право заміщати маркер доступу процесу;

- token_query — право отримувати інформацію з маркера доступу;

- token_query_source — право отримати інформацію про джерело маркера доступу;

- token_adjust_privileges — право налаштовувати привілеї маркера доступу;

- token_adjust_groups — право налаштовувати властивості груп в маркері доступу;

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

- token_adjust_sessionid — право налаштовувати ідентифікатор сесії в маркері доступу.

Для стандартних прав доступу можна встановити наступні прапори:

- read_control — право читати інформацію з маркера доступу, за винятком інформації із списку SACL;

- write_dac — право модифікувати список DACL в маркері доступу;

- write_owner — право змінити власника маркера доступу;

- delete — право видаляти маркер доступу.

Крім того, можна використовувати наступні символічні константи, вживані для позначення комбінації декількох різних прапорів доступу:

- token_all_access — включає всі права доступу до маркера доступу;

- token_read — включає права доступу standard_rights_read і token_query;

- token_write — включає права standard_rights_write, TOKEN_ADJUST_PRIVILEGES, TOKEN_ADJUST_GROUPS і token_adjust_default;

- token_execute — включати право standard_rights_execute.

Для доступу до списку управління доступом SACL маркера доступу потрібно встановити прапор access_system_security — доступ до списку управління доступом SACL.

Тепер перейдемо до останнього параметра функції OpenProcessToken — TokenHandle. Цей параметр повинен вказувати на змінну типу HANDLE, в яку функція запише дескриптор маркера доступу процесу. Оскільки цей дескриптор є звичайним дескриптором, що описує об'єкт ядра операційної системи, то після завершення роботи з маркером доступу цей дескриптор потрібно закрити за допомогою функції CloseHandle.

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