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

2.4. Отримання інформації з маркера доступу

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

BOOL GetTokenInformation(

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

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

LPVOID TokenInformation, // покажчик на буфер для інформації

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

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

);

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

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

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

typedef enum _TOKEN_INFORMATION_CLASS {

TokenUser = 1, // інформація про користувача

TokenGroups, // інформація про групи, пов'язані з маркером доступу

TokenPrivileges, // інформація про привілеї

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

TokenPrimaryGroup, // інформація про первинну групу власника

// об'єкту за умовчанням

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

TokenSource, // джерело маркера доступу

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

TokenImpersonationLevel, // рівень заміщення маркера доступу

TokenStatistics, // статистика

TokenRestrictedSids, // список обмежуючих ідентифікаторів

// безпеці

TokenSessionId // ідентифікатор сесії

} TOKEN_INFORMATION_CLASS * PTOKEN_INFORMATION_CLASS ;

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

  • TokenUser — tokenuser;

  • TokenGroups — token_groups;

  • TokenPrivileges — token_privileges;

  • TokenOwner — token_owner;

  • TokenPrimaryGroup — token_primary_group;

  • TokenDefaultDacl — token_default_dacl;

  • TokenSource — token_source;

  • TokenType — token_type;

  • TokenlmpersonationLevel — security_impersonation_level;

  • TokenStatistics — token_statistics;

  • TokenRestrictedSids — token_groups;

  • TokenSessionld — dword.

У параметрі TokenInformation може бути також встановлене значення NULL. В цьому випадку функція запише за адресою, заданою останнім параметром, необхідну довжину буфера.

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

У параметрі ReturnLength має бути встановлена адреса подвійного слова, в яке функція поверне необхідну довжину буфера, якщо в параметрі TokenInformation встановлено значення NULL або задана довжина буфера недостатня для запису необхідної інформації.

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

Програма в якій функція GetTokenInformation використовується для визначення всіх привілеїв маркера доступу приведена в лістингу 7.3.5. (Додаток А).

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