Програмування на delphi


Програмування на delphi

Знайшовся в мережі один цікавий модуль - RunAsSystem. призначений для запуску програми з правами NT AUTHORITY. А що, який користувач не мріє підняти свої права до рівня системних. І як то мимохідь подумалося - запускати інші програми з системними правами звичайно добре, а як би з додатком самому запуститися від імені системи? Чи не писати ж, справді, завантажувач для своєї програми, несерйозно це як то. Ось перше рішення, яке прийшло в голову (всі зміни виробляються в файлі проекту):








Все, що робить додаток в момент запуску - створює свою копію з правами NT AUTHORITY. Параметр '/ system' (можна назвати його і по-іншому) потрібен для того, щоб не потрапити в нескінченний цикл.

Це рішення, хоч і цілком працездатний, має невеликий недолік. Думаю, самі уважні вже здогадалися про що йде мова - якщо в момент запуску програми в командному рядку буде параметр '/ system', додаток запуститься з правами облікового запису, під якою працює користувач, що зовсім не логічно (і для нас неприпустимо).







Виправляється це досить просто - виявивши в командному рядку параметр '/ system' потрібно перевірити, з-під якої облікового запису нас запустили. Можна було б просто перевірити ім'я користувача, що запустив додаток.


Отримане ім'я можна було б порівняти з ім'ям 'system', але заковика тут полягає в тому, що функція GetUserName повертає ім'я системного користувача з урахуванням локалізації операційної системи. Тобто в системі з англійської локалізацією ми отримаємо 'system', а з російської 'система'. Цей метод не підходить через відсутність в ньому універсальності. Але що ж тоді порівнювати? Ідентифікатори безпеки (SID) облікових записів! Функція отримання SID'а облікового запису виглядає наступним чином:


Після перебору параметрів командного рядка додаємо ще одну перевірку:


Остаточний код завантажити програму виглядає наступним чином:


Звичайно, щоб все це запрацювало, необхідно щоб в групу "Адміністратори" входив користувач з системними правами. Це дещо обмежує можливості застосування даного коду, але все ж іноді (хоча б на домашньому комп'ютері) це може бути дуже корисно.

На цьому все, успіхів у програмуванні!







Схожі статті