234
Про те, як це зробити, буде розказано далі. Проте формувати спи-
сок привілеїв можна тільки за допомогою LSA API.
Завдання переліку привілеїв облікового запису
Перше завдання – перелік привілеїв даного облікового запису
– виконується за допомогою функції LsaEnumerateAccountRights.
Ця функція перераховує привілеї користувача із заданим іденти-
фікатором безпеки Sid відносно системи з об’єктом політики
PolicyHandle, які передаються їй як параметри.
Зазвичай обліковий запис, якщо не вживати спеціальних захо-
дів, не має привілеїв. Привілеями володіє група, до якої належить
даний користувач. Тому не потрібно дивуватися, якщо кількість
привілеїв, якими володіє конкретний користувач, у тому числі й
адміністратор системи, виявиться таким, що дорівнює 0. Навпа-
ки, набір привілеїв у маркері є сукупністю привілеїв користувача
і груп, до яких приписаний даний користувач. З іншого боку, як-
що додати привілей користувачу і викликати функцію
LsaEnumerateAccountRights, то знов доданий привілей відразу ж
буде відмічений, тоді як в маркері доступу процесів даного корис-
тувача її не опиниться. Це пов’язано з тим, що такий маркер фо-
рмується на етапі входу користувача в систему, тому іноді для
того, щоб новий привілей користувача потрапив у його маркер
доступу, доцільно здійснити повторний вхід у систему.
Дослідження роботи програми переліку привілеїв корис-
тувача
Як приклад складіть програму, завдання якої – виведення спи-
ску привілеїв поточного користувача.
Дана програма повинна одержувати маркер доступу поточного
процесу, витягувати з нього Sid користувача, за допомогою фун-
кції LsaOpenPolicy відкривати об’єкт політики безпеки і виклика-
ти функцію LsaEnumerateAccountRights для отримання списку
привілеїв. Функція LookupPrivilegeDisplayName перетворить про-
грамне ім’я привілею в дружнє ім’я. Для виведення імені приві-
лею на екран російською мовою використовується функція
CharToOem. Якщо кількість привілеїв дорівнює нулю, то з ураху-
ванням зауваження, зробленого вище, рекомендується додати ко-