Содержание
- Как работает контроль учетных записей в системе Windows
- Как работает контроль учетных записей
- Токены и процессы контроля учетных записей
- Информация, отображаемая в окне контроля учетных записей Windows
- UAC, давай дружить!
- User Account Control: как включить и отключить в Windows?
- Что такое User Account Control в Windows?
- Для чего нужны ограничения на действия в системе?
- Предпочитаемые настройки
- Как отключить User Account Control простейшим способом?
- Настройка локальных политик
- Редактирование записей реестра

Для начала рассмотрим самый простой и некрасивый, по моему мнению, вариант — редактирование манифеста. Чем он плох? Тем, что подходит только для тех приложений, которым всегда нужно иметь привелегии администратора. Как это будет выглядеть? Пользователь при запуске вашего приложения получить знакомое окошко, в котором ему нужно будет подтвердить разрешение на выполнение программой действий с привилегиями администратора. И так каждый раз при запуске программы.
В принципе, вариант приемлим для программ, которые запускаются нечасто и в одном экземпляре.
Как работает контроль учетных записей в системе Windows
Контроль учетных записей пользователей Windows является функцией , которая позволяет предотвращать и блокировать несанкционированные изменения в компьютере. Также известна как UAC, она интегрирован во все операционные системы Microsoft, начиная с Windows Vista.
UAC позволяет вам контролировать компьютер путём запроса разрешения, прежде чем вносить изменения, требующие административного доступа.
Контроль учётных записей включен по умолчанию (→ как отключить UAC) для предотвращения запуска вредоносных программ обычными пользователями Windows или изменения настроек, которые влияют на других пользователей компьютера.
Давайте попробуем понять, что такое контроль учетных записей Windows, объяснив, как он работает.
Как работает контроль учетных записей
Когда пользователь Windows пытается выполнить операцию, требующую прав администратора, появляется окно контроля учетных записей. Действия, требующие административного разрешения, обозначены маленьким сине-желтым щитом рядом с заголовком.
Для продолжения требуется подтверждение в окне контроля учетных записей. Если пользователь, который хочет выполнить операцию, имеет учетную запись администратора, он может продолжить. Если у пользователя стандартная учетная запись, он может продолжить, только если введёт пароль пользователя-администратора.
После ввода пароля права администратора будут временно присвоены стандартной учетной записи. Это позволит вам завершить операцию. По окончании операции права обычного пользователя будут восстановлены.
Окно контроля учетных записей Windows также может появиться, если программа пытается внести изменения без какого-либо запроса от пользователя.
Если вы не совершали каких-либо действий и появляется окно UAC, то должны тщательно проверить отображаемую информацию, прежде чем выбирать, разрешать или не разрешать изменение, чтобы не допустить того, что вредоносное ПО или другое программное обеспечение нарушит безопасность компьютера.
Токены и процессы контроля учетных записей
Чтобы лучше понять, как работает контроль учетных записей Windows, нам нужно объяснить, что такое токен доступа и как работает процесс, который регулирует UAC.
Токен доступа – это объект операционной системы, который содержит различную информацию. Он используется для определения типа пользователя, его привилегий и группы, к которой он принадлежит. В Windows токен связан с процессом, выполняемым пользователем. Система анализирует токен, чтобы определить, есть ли у пользователя необходимые привилегии для запуска процесса.
Если у пользователя нет необходимых привилегий, вмешивается контроль учетных записей.
Если контроль учетных записей пользователей включен, Windows запросит согласие или учетные данные действительной учетной записи администратора, прежде чем приступить к выполнению задачи или программы, для которых требуется токен доступа администратора. Этот запрос сделан для предотвращения установки стандартных невидимых вредоносных программ.
Информация, отображаемая в окне контроля учетных записей Windows
Окно контроля учетных записей Windows может отображать разные сообщения, но всегда содержит информацию, касающуюся названия программы, автора (её разработчика) и источника файла (откуда он). В зависимости от типа запрашиваемой авторизации, UAC отобразит сообщение с вопросом, хотим ли мы разрешить программе или приложению вносить изменения или нет.
Если окно контроля учетной записи пользователя отображается без запроса пользователя, стоит обратить пристальное внимание на информацию, относящуюся к автору программы.
Если автор подтвержден, соответствующая программа имеет цифровую подпись. Цифровая подпись является своего рода «знаком качества», который подтверждает оригинальность программного обеспечения. Благодаря этому вы всегда можете проверить производителя приложения или программы.
Программа с неизвестным автором не обязательно означает, что это вредоносное ПО, но это означает, что программа могла быть изменена и может быть менее безопасной. Кроме того, старое программное обеспечение почти всегда не подписано.
Контроль учетных записей Windows может помочь нам защитить ваш компьютер, но не забывайте всегда внимательно следить за программами, которые запускаете. Используйте только те приложения и программное обеспечение, которые поступают из надежных источников или с сайта производителя.
UAC, давай дружить!
Технология UAC — не лишний компонент безопасности ОС Windows последних версий и пользователи приходят к этой мысли, борясь с malware и вирусами. Программистам, в свою очередь, стоит грамотно подходить к написанию приложений и принимать во внимание наличие такого «обстоятельства».

На хабре и вообще в сети много статей на тему «Как отключить UAC», «Как обойти UAC» и др. Но зачем отключать, функция ведь полезная? Зачем обходить, мы ведь не злоумышленники?
Ниже я расскажу как это делать в Вашем приложении.
Манифест
Для начала рассмотрим самый простой и некрасивый, по моему мнению, вариант — редактирование манифеста. Чем он плох? Тем, что подходит только для тех приложений, которым всегда нужно иметь привелегии администратора. Как это будет выглядеть?
Пользователь при запуске вашего приложения получить знакомое окошко, в котором ему нужно будет подтвердить разрешение на выполнение программой действий с привилегиями администратора. И так каждый раз при запуске программы. В принципе, вариант приемлим для программ, которые запускаются нечасто и в одном экземпляре.
Сразу нужно сказать, что в автозапуск (не уверен, что всеми способами, но по крайней мере, через реестр) такие приложения помещать нельзя. Windows их просто прихлопнет на старте, не показав никакого окна UAC. Может быть, в этом случае есть смысл использовать технологии служб Windows.
Итак, реализация (взято отсюда)
- asInvoker — уровень прав текущего пользователя (процесса-родителя). Этот вариант устанавливается по-умолчанию.
- highestAvailable — наивысший уровень прав для текущего пользователя. Т.е. администратор получит полные права после подтверждения юзером кнопкой в окошке, обычный же пользователь ничего не получит.
- requireAdministrator — самый интересный вариант. Всегда запрашивает разрешение или ввод авторизационных данных администратора.
Другие решения
Проверка на наличе прав
В первую очередь после запуска приложения или в тех местах, где это требуется, нужно проверить не запущены ли мы уже с правами администратора (вдруг юзер уже отключил UAC). Если это так, то большинства последующих манипуляций можно будет избежать. Проверка делается просто (да, кстати, код здесь и дальше на C#):
public static bool IsAdmin()
Запуск процесса с запросом прав
Допустим, нет у нас прав. Что же дальше? Приложение, запущенное с какими-либо правами, не может их изменить в процессе своей работы.
Для выполнения действий с повышенными привилегиями необходимо запускать новый процесс с запросом прав. Как вообще это сделать:
public static void RunAsAdmin(string aFileName, string anArguments) < System.Diagnostics.ProcessStartInfo processInfo = new System.Diagnostics.ProcessStartInfo(); processInfo.FileName = aFileName; processInfo.Arguments = anArguments; processInfo.UseShellExecute = true; processInfo.Verb = "runas"; // здесь вся соль System.Diagnostics.Process.Start(processInfo); >
Но какое же приложение запускать? Здесь могут быть варианты:
1. Запуск системного приложения с параметрами. Например, вам нужно стартануть службу или изменить значение в реестре. Можно воспользоватся WinAPI или его оберткой в классах .NET, но если ваше приложение не имеет привилегий, то ничего не получится. Для запуска службы DHCP Client, к примеру, можно воспользоватся командной строкой
sc.exe start dhcp
Это самый простой и приятный вариант для выполнения служебных действий с системой, но не всегда все так просто.
2. Запуск собственного дополнительного приложения с параметрами. Допустим, вам ну очень нравится использовать WinAPI и не хочется разбиратся с системными утилитами или ваша задача не столь банальна, как приведенная выше. В таком случае вы можете написать маленькую консольную утилиту, которая будет выполнять нужные вам действия. Но это и лишние затраты времени, и необходимость поддержки дополнительной утилиты, интерфейсов взаимодействия и т.д.
2а. Дополнительное приложение может запускатся только один раз и продолжать висеть в памяти. Организовав общение с ним из основного приложения, вы можете выполнять нужные вам административные задачи без последующих запросов прав. Но это еще более сложный вариант. Опять же таки, в этом случае есть смысл посмотреть в сторону служб Windows в качетсве дополнительного приложения, которые по-умолчанию запускаются с привилегиями администратора.
3. Запуск еще одного экземпляра основного приложения с параметрами. Допустим, у вас есть пять простых действий, которые нужно выполнять с правами администратора. Забейте для них параметры командной строки вашего же приложения и на запуске проверяйте их наличие. Получив какой-либо из этих параметров, выполните соответствующее действие и завершите работу.
Данный вариант, судя по StackOverflow является самым распространенным, по скольку код остается в рамках одного приложения, да и реализуется все просто.
4. Введение двух режимов работы приложения. Если приложению права администратора необходимы редко, то стоит ввести два режима работы: обычный и привилегированый. В обычном режиме (а мы это определяем с помощью указанной выше функции IsAdmin()) операции, требующие права администратора, остаются заблокированными, но у пользователя появляется возможность перезапустить приложение с правами админа и получить доступ к забокированному функционалу. В привилегированном режиме (IsAdmin() возвращает true) мы не блокируем функционал.
Таким образом, запрос появляется перед пользователем только один раз и в процессе подальшей работы с приложением больше не будет отвлекать. Если же пользователь отключил UAC, то об «обычном» режиме он даже не узнает.
Данный подход требует немного усилий на начальном этапе, но дальше позволяет писать приложение без каких-либо ограничений и вынесений кода в другие программы и блоки. Небольшой пример будет рассмотрен ниже.
Оформление приложений
Всем нам хочется писать стильные и красивые оконные приложения и в вопросах использования UAC без фирменного щитка на контролах ну никак не обойтись.

Такой щит размещается на кнопках, link-label’ах или других элементах управления, после нажатия на которые пользователь увидит запрос от UAC. К счастью, нам не придется таскать повсюду картинку, поскольку в системе, как ни странно, она уже есть и ее можно получить.
Для WinForms-приложений можно указать системе разместить иконку щита на кнопке.
[DllImport("user32.dll", CharSet = CharSet.Unicode)] public static extern IntPtr SendMessage(HandleRef hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam); public static void SetButtonShield(Button btn, bool showShield) < // BCM_SETSHIELD = 0x0000160C btn.FlatStyle = FlatStyle.System; SendMessage(new HandleRef(btn, btn.Handle), 0x160C, IntPtr.Zero, showShield ? new IntPtr(1) : IntPtr.Zero); >
Для тех, кто уже отказался от WinForms и перешел к разработке приложений с помощью WPF, также есть решение. Для того, чтобы получить ImageSource иконки и указать ее в каком-либо контроле, можно использовать следующий код.
System.Drawing.Icon img = System.Drawing.SystemIcons.Shield; System.Drawing.Bitmap bitmap = img.ToBitmap(); IntPtr hBitmap = bitmap.GetHbitmap(); ImageSource wpfBitmap = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap( hBitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
Пример
Рассмотрим теперь маленький пример, реализующий изложенные выше принципы.
В приложении имеется кнопка, которая должна выполнять действия с правами администратора (у меня она просто отображает MessageBox). Если приложение уже запущено с правами, то мы оставляем ее доступной. Если же нет, кнопку блокируем и отображаем панельку с предупреждением и другой кнопкой, позволяющей перезапустить приложение в привилегированном режиме. На кнопке отображаем православную иконку щита.

Кроме того, окно приложения после перезапуска отображается в том же месте и с теми же размерами благодаря передаче контекста через командную строку.

Windows UAC Evolution! (+ Sounds)
Конечно, пример простейший, но он в общих чертах демонстрирует самый близкий мне подход к решению проблемы взаимодействия с UAC. Код примера на github.
Буду рад услышать ваши замечания, коментарии и пожелания.
User Account Control: как включить и отключить в Windows?
Наверняка многие пользователи сталкивались с ситуацией, когда при попытке запуска файла установки какого-то программного обеспечения или при открытии исполняемого компонента уже установленных приложений на экране появляется запрос от службы контроля учетных записей пользователей по поводу выдачи разрешения на изменения, которые будут выполнены на данном компьютере. Это происходит потому, что в самой операционной системе имеется специальный компонент, называемый в английском варианте User Account Control (UAC), который находится в активном состоянии и является одной из составляющих всей системы безопасности последних версий Windows. Что это за служба, как ее настроить, и насколько целесообразно держать ее включенной, далее и будет разъяснено.
Что такое User Account Control в Windows?
Первым делом давайте рассмотрим, что это за элемент безопасности, и как он работает, а только потом будем принимать решение по поводу того, стоит ли его отключать или все-таки нет. То, что это действительно один из элементов защиты самой системы, сомневаться не приходиться.

Правда, в отличие от других подобных компонентов вроде SmartScreen, выполнение определенных действий или запуск программ, которые могут изменить системную конфигурацию или установленные параметры, он не блокирует, а всего лишь выдает запрос на согласие пользователя на предоставление программе прав для выполнения той или иной операции, то есть снимает с себя ответственность за пользовательские действия в случае согласия. По сути, несмотря на громкое название (User Account Control – это именно служба контроля действий, производимых при использовании зарегистрированного аккаунта или учетной записи администратора/суперадминистратора), все назначение этого компонента и сводится к тому, чтобы напомнить пользователю, что предоставление разрешений стороннему ПО на внесение изменений может негативно сказаться на работе операционной системы.
Для чего нужны ограничения на действия в системе?
Что же касается необходимости иметь такого «уведомителя» под рукой, многие считают, что эта служба столь же полезна, насколько и абсолютно не нужна. Единственное разумное объяснение присутствию этого компонента защиты в Windows — постоянное напоминание пользователю о появлении возможных критических последствий его необдуманных действий. Но так кажется только на первый взгляд.
How to Fix User Account Control (UAC) Yes Button Missing or Grayed Out in Windows 10
На самом деле, особенно если взять в расчет тот факт, что многие компьютерные вирусы способны перехватывать использование зарегистрированных в системе пользовательских аккаунтов и воздействовать якобы от их имени, инструмент User Account Control просто необходим для предотвращения выполнения на компьютере сомнительных апплетов, когда пользователь какую-то программу самостоятельно не запускал. Таким образом, нетрудно сделать вывод, что полностью отключать защиту, осуществляемую при помощи этого компонента, полностью не стоит (в этом случае уведомления для тех же вирусных апплетов, работающих в фоновом режиме, при их самопроизвольном срабатывании выдаваться не будут).
Предпочитаемые настройки
Что же касается самих настроек инструментария контроля (User Account Control Settings), вариантов выдачи уведомлений всего четыре:
- для запуска любой программы (наивысшая безопасность);
- уведомление с затемнением экрана при запуске приложений самим пользователем;
- уведомление без затемнения экрана;
- полное отключение (отсутствие уведомлений вообще).
Второй и третий варианты установки параметров по степени безопасности абсолютно равнозначны, но различаются только наличием затемнения на мониторе. Правда, если компьютерная конфигурация достаточно слабая, а затемнение влечет за собой долгое ожидание (или просто раздражает), можно оставить третий вариант. Но устанавливать такой уровень рекомендуется только в тех случаях, когда вы полностью доверяете запускаемому программному обеспечению и твердо уверены в том, что на компьютере нет вирусов или шпионских приложений.
Как отключить User Account Control простейшим способом?
Теперь несколько слов непосредственно о выставлении нужных параметров. Получить к ним доступ можно через «Панель управления» в разделе пользовательских учетных записей, выбрав пункт изменения контроля.

В окне настроек слева будет показан специальный фейдер (ползунок), которым и выставляется необходимый уровень защиты. Как уже понятно, установка его в самое нижнее положение и отключает выдачу уведомлений службой User Account Control.
Примечание: в последних системах, где в меню пуска отображается логотип пользователя, перейти к изменению параметров контроля можно через него. Еще быстрее получить доступ можно путем ввода в поисковом поле сокращения UAC. «Панель управления» в системах восьмой версии и выше лучше всего вызывать через консоль «Выполнить» путем ввода команды control.
Настройка локальных политик
Это был самый простой вариант предпочитаемых действий, применяемых для настройки или отключения службы User Account Control. Однако можно воспользоваться и некоторыми другими системными инструментами. В частности, довольно просто необходимые параметры можно выставить в локальных политиках (secpol.msc).

Здесь нужно перейти к одноименному разделу, вызвать в нем подраздел безопасности и найти тот пункт контроля, в котором обозначено, что все администраторы работают в режиме одобрения. Двойным кликом вызовите редактирование параметра и на вкладке безопасности, которая откроется по умолчанию, выставьте отключенное значение. По завершении действий и после сохранения установленных опций выйдите из редактора и произведите полную перезагрузку компьютера.
Редактирование записей реестра
Аналогичные действия по настройке параметров службы контроля можно выполнить и в системном реестре (regedit). Только в этом случае, чтобы долго не переходить по веткам и подразделам, лучше сразу воспользоваться поиском, а в соответствующем поле ввести значение «EnableLUA» (без кавычек).

Опять же, через двойной клик следует войти в изменение параметра и для отключения службы сначала выставить ноль, сохранить изменения, а после этого, как и в прошлом примере, потребуется выполнить полный рестарт системы.

Примечание: произвести деактивацию контроля можно и через командную строку, но вводимая команда слишком велика и сложна для понимания рядовым пользователем и, по большому счету, просто дублирует действия в реестре относительно локальных политик, в значение ключа которого вносятся необходимые изменения. Включение службы во всех случаях производится путем применения обратных действий.
Похожие статьи
-
Windows 10 контроль учетных записей
Содержание Как включить контроль учетных записей в Windows 10 Как включить контроль учетных записей? Есть другой способ включения контроля учетных…
-
Windows uac контроль учетных записей
Содержание UAC – функция контроля учётных записей Windows Что такое UAC Как отключить UAC Что делать, если в окошке UAC Windows 11 отсутствует кнопка…
-
Windows 10 создать пользователя из командной строки
Содержание Четыре способа как стать Администратором в Windows 10 Способ первый – использование Параметров Windows 10 Способ второй – использование…