Використання Vista UAC в Delphi: Частина 1, Різне, Програмування, статті

Автор: Олександр Божко, Delphi2010

Нарешті сталося те, чого я так боявся. Зараз мені доведеться адаптувати додаток для роботи в Windows Vista. Перша і головна проблема тут, це UAC. Тому я вирішив почитати матчастину. Можливо, комусь стане в нагоді моя спроба перекладу.

В даний час сотні технічних блогів і статей, згадують про можливості User Account Control в Vista. На жаль, багато авторів применшують корисність цієї функції.


Я кажу “на жаль”, тому, що мені подобається ця функція. І я вважаю, невірним применшувати її значимість. Я також вважаю неправильним те, що багато технічних on-line джерела та журнали з роздратуванням описують UAC і навіть надають своїм читачам інструкції щодо його відключення. Я думаю, що подібне ставлення може згодом “обернуться боком”.

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

Але це не те, про що я хочу поговорити. У світлі моїх думок, я хочу показати вам, як використовувати функції UAC в ваших Delphi додатках. Так би мовити, навчити вас ігратькрасіво, …

Повний опис логіки роботи UAC виходить за рамки цієї статті. Тут я збираюся тільки позначити кілька відносяться до справи моментів.

По суті, UAC це все про рівні привілеїв. За замовчуванням, звичайне Windows додаток не вимагає адміністраторських привілеїв. Ось чому під Vista, навіть адміністративні акаунти, не використовують повний доступ за замовчуванням. Мета нормального UAC-програми – запуск з доступом визначаються поточним аккаунтом, і лише за реальної необхідності запитувати підвищені права доступу. Сам процес запиту підвищення прав називається підвищення привілеїв (privilege elevation), і він вимагає, що б користувач підтвердив чинність, перед тим, як цю дію буде виконано. Запит на підвищення може бути представлений або у формі простого діалогу Продовжити / Скасувати (режим схвалення Адміном), або повноцінного діалогу логіна (користувачі повинні явним чином ввести свої повноваження), в залежності від типу поточного аккаунта і налаштувань безпеки. Існує ще пара варіацій запиту в залежності від того чи використовується виконуваним файлом цифровий підпис чи ні.

Слід пам’ятати, що Vista заохочує використання цифрових підписів, показуючи більш доброзичливий запит на підвищення привілеїв (далі elevation діалог) для підписаних виконуваних файлів.

Існують різні способи дати можливість вашому додатком ініціювати elevation діалог. Більшість з них, хоча і прості для реалізації, однак не дають отримати максимальну користь. Я навіть не знаю наскільки можна їх застосовувати, тому що вони спираються на функції зворотної сумісності Vista. У цій частині я коротко опишу три з них.

Використання евристики Vista.

Windows Vista має безліч вбудованих прийомів для полегшення можливості підтримки UAC. Один з них фактично грунтується на тому, що інсталлер і апдейтер, як правило, змушені писати в захищену директорію Programm Files і / або гілку реєстру HKLM. Vista розпізнає такі додатки за допомогою евристичного методу визначення і автоматично виводить elevation діалог, в той момент, коли користувач намагається виконати їх.

Є цілий ряд речей, які при цьому перевіряються, але я хотів би зазначити, єдину річ, яку досить легко реалізувати і перевірити – elevation діалог викликається, якщо ім’я виконуваного файлу або інформація про його версією містять такі рядки, як, наприклад, “settings”, “install” або “update”.



В результаті, такий підхід є досить корисним для автоматичного оновлення програм, які, як правило, самостійно викачують нову версію, а потім запускають зовнішні утиліти для заміни старих файлів додатків. Якщо ця утиліта названа приблизно так: “MyAppUpdater.exe” (і забезпечена цифровим підписом), то додатки можуть ініціювати виклик красивого elevation діалогу і запускати її (утиліту) з повними правами доступу.

Очевидно, що такий підхід застосовується до будь-якої програми, незалежно від мови, на якому воно було розроблено. Вам тільки потрібно вибрати правильну назву для виконуваного файлу і все! Отримайте elevation діалог!

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

Виконання від імені адміністратора.

Іншим способом досягнення того ж результату є вибір опції “Виконувати цю програму від імені адміністратора” (Run this program as an administrator) на вкладці “Сумісність” у властивостях програми. Зворотний бік медалі буде та ж, що і попереднього підходу, додаток завжди буде виконуватися із завищеними правами.

Маніфест програми.

Кілька більш складний варіант попереднього підходу полягає в тому, щоб вставити наступний маніфест в виконуваний файл свого застосування:


Ключовий інформацією тут виявляється значення атрибута requestedExecutionLevel. Якщо атрибут прийме значення “requireAdministrator”, то це послужить сигналом для Vista відобразити elevation діалог в момент запуску програми.

Попередньо, маніфест може бути пов’язаний з виконуваним файлом, вам необхідно скомпілювати його в RES форматі, використовуючи наступний RC файл (я припускаю, що ви досить знаєте про файлах ресурсів і знаєте що таке RC і RES файли):



1 24 “UAC.manifest”


Де 1 – індекс ресурсу, 24 – тип ресурсу (RT_MANIFEST), і “UAC.manifest” – актуальне ім’я файлу маніфесту, який буде скомпільований. Зауважу, що ви можете використовувати інший індекс ресурсу, переконавшись при цьому, що відсутні збіги з індексами інших ресурсів, наприклад XP маніфестом.


Нарешті, ви повинні зв’язати отриманий RES файл з виконуваним файлом, використовуючи директиву компілятора Delphi $ R.

Такий підхід має точно ті ж недоліки, сто і попередні. Він збільшує права заздалегідь, а не в разі потреби.

OK, це був короткий огляд основ UAC сумісності. Тепер ми готові рухатися в правильному напрямку …

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*