Сайт для программистов

суббота, 7 июня 2008 г.

Админ ли ты?

Продолжаю читать книжку Защищенный код для Windows Vista. Оказывается, если вы регистрировались в системе как Администратор, то все равно администратором по сути не являетесь. По умолчанию система дает вам права стандартного пользователя. Если вам необходимо выполнить административную задачу, то система предложит вам повысить свои права. Срабатывает механизм UAC (контроль учетных записей пользователей), который так раздражает многих пользователей. Автор книги рекомендует использовать системную функцию IsUserAnAdmin для проверки ваших текущих прав. К счастью, синтаксис этой функции очень прост и мне не составило труда написать объявление этой функции для C# через механизм P/Invoke:
[DllImport("shell32.dll")]
private static extern bool IsUserAnAdmin();

// Является ли пользователь администратором
Console.WriteLine("Вы админ?: {0}", IsUserAnAdmin().ToString());


Если запустите эту программу, то можете убедиться, что вы не являетесь администратором (False). Теперь найдите исполняемый файл проекта в Проводнике, щелкните правой кнопкой для вызова контекстного меню и выберите команду Запуск от имени администратора. Теперь программа будет выводить значение True. Вы повысили себе права до уровня администратора ручным способом.
Существует и другой аспект. Предположим, вы сами хотите реализовать возможность повышения уровня привилегий в своей программе. В таком случае воспользуйтесь следующим кодом:

Process p = new Process();
ProcessStartInfo psi = new ProcessStartInfo(@"cmd.exe");
psi.UseShellExecute = true;
psi.Verb = "runas";
p.StartInfo = psi;
p.Start();


В приведенном примере показано, как можно запускать новый процесс с повышенными привилегиями.

Итак, после прочтения очередных страниц книги, мы познакомились с новой функцией Windows API IsUserAnAdmin, которую я сразу же поместил в свой справочник по функциям Windows API и узнали, как программно повышать права при вызове нового процесса.
Удачного вам программирования!
P.S. Чемпионат Европы по футболу стартовал. Удачного вам боления!

Комментариев нет: