Однажды посреди жаркого августовского дня я получил письмо от Холмса – он срочно просил меня приехать на Бейкер-стрит. Когда я вошел в кабинет, там уже сидела на краешке стула девушка, одетая скромно, но с большим вкусом.
«Знакомьтесь, это мисс Уинсли», — сказал Холмс, указав на нее рукой. «Она расскажет свою историю, которая должна вас заинтересовать», — слегка прищурившись, добавил он.
История мисс Уинсли
Девушка начала свой рассказ, собираясь с силами через каждые две-три фразы и не переставая нервно теребить в руках платочек. Отец ее умер, когда она была еще крохой, и мать вышла замуж повторно за некого мистера Гейтса. Тот был весьма богат, но особых щедрот падчерице не перепадало.
Три года назад ее мать умерла, а недавно этот мир покинул и отчим. Почти все свое состояние он завещал фонду по борьбе с пиратскими сборками Windows. Девушке причиталась лишь малая толика, которой, впрочем, ей бы хватило на годы безбедного существования. Однако, то ли из вредности, то ли просто в шутку, мистер Гейтс включил в завещание особый пункт.
Чтобы получить свою долю наследства, мисс Уинсли должна была найти способ запустить проводник Windows 7 с правами администратора, не отключая контроль учетных записей. Причем на поиски решения ей отводилось ровно неделя.
За предыдущие шесть дней девушка сбилась с ног, пытаясь найти решение. Она обращалась к самым известным детективам, но все они говорили ей, что это невозможно.
Мисс Уинсли тяжело вздохнула и подняла на нас глаза, полные мольбы:
— Джентльмены, вы – моя последняя надежда! Если до вечера вы не подберете ключ к загадке, я обречена на нищенское существование.
Холмс задумчиво посмотрел на нее:
— Обычно, я избегаю дел, которые нужно решить к определенному сроку. Но поскольку все ваши карты уже биты, я возьмусь за это дело. Думаю, доктор Ватсон мне в этом поможет.
Когда девушка ушла, Холмс не спеша раскурил трубку и, наконец, обратился ко мне:
— Ватсон, вы сияете как бляха того усатого «бобби», что стоит сейчас на углу. Вам что, известно решение?
В тупике
Я всегда считал, что Холмс не слишком разбирается в современных технологиях – именно поэтому он меня и позвал! Компьютер он использовал разве что для чтения криминальной хроники, да скачивания нот для своих скрипичных упражнений.
Ни слова не говоря, я раскрыл ноутбук, который верой и правдой служил мне еще с иракской кампании. Запустив диспетчер задач с полными правами, я быстро завершил процесс explorer.exe, открыл Файл – Новая задача, ввел там explorer /separate и нажал Enter.
Не скрывая торжества, я подвинул Холмсу ноутбук с открывшимся окном проводника.
— У explorer.exe есть недокументированный ключ /separate, запускающий проводник в отдельном процессе. Запуск такой команды с полными правами — это и есть ключ к разгадке, Холмс!
— Ватсон, во-первых, есть более гуманные способы завершения проводника…
Длинные пальцы Холмса быстро забегали по клавиатуре, открывая доселе неведомые мне возможности оболочки Windows. «А во-вторых…», — он щелкнул в адресной строке проводника, ввел cmd, нажал Enter и ткнул мундштуком трубки в заголовок окна командной строки. К моему стыду, там не было написано «Администратор».
— Друг мой, надеюсь, вы понимаете, что окно проводника все-таки было открыто с обычными правами?
— Гм… погодите Холмс, но этот способ точно работал в Windows XP!
Я начал догадываться, почему за шесть дней никто не смог помочь мисс Уинсли. Вид у меня был, наверное, не слишком радостный.
О чем рассказал Process Explorer
Холмс с сожалением взглянул на меня через кольцо дыма:
— Windows XP… У вас есть Process Explorer? Хочу показать вам одну любопытную вещь.
Я, как и любой опытный врач, всегда таскаю в саквояже инструменты компании Sysinternals.
— Ватсон, когда вы запустили проводник в отдельном процессе, повышения прав не произошло, и у процесса остался средний уровень целостности. Но посмотрите внимательнее.
— Process Explorer показывает, что отдельный процесс проводника запущен из-под процесса svchost.exe командой:
explorer.exe /factory,{75dff2b7-6936-4c06-a8bb-676a7b00b24b} –Embedding
Холмс навел курсор на процесс svchost.exe, и я увидел, что это служба запуска процессов DCOM-сервера. Он подвинул мне ноутбук, откинулся на спинку кресла и загадочно улыбнулся. Было непонятно, знает ли он точное решение, но направление для поисков он мне показал.
Поиски в реестре
Я открыл редактор реестра и запустил поиск по идентификатору {75dff2b7-6936-4c06-a8bb-676a7b00b24b}, который используется в командной строке проводника. Он привел меня в один из подразделов HKEY_CLASSES_ROOT\CLSID. Исходя из названия параметра по умолчанию, подраздел отвечал за запуск нескольких процессов проводника одновременно.
В параметре AppID содержался другой идентификатор, очевидно, относящийся к приложению «Проводник». Дальнейший поиск по нему в реестре привел меня в раздел
HKEY_CLASSES_ROOT\AppID\{CDCBCFCA-3CDC-436f-A4E2-0E02075250C2}
В параметре по умолчанию там было указано Elevated-Unelevated Explorer Factory, что явно намекало на связь с запуском проводника с полными и обычными правами.
— Холмс, параметр RunAs со значением Interactive User, очевидно, указывает на тип учетной записи для запуска процесса. Возможно, есть другие допустимые значения!
Я открыл браузер, намереваясь поискать в Интернете, но Холмс внезапно остановил меня:
— Минутку, Ватсон! Иногда полезно подумать самому, пока Гугл не отучил вас от этого достойного занятия. Вы слышали про оснастку «Службы компонентов»?
Секретные службы [компонентов]
Холмс нашел оснастку поиском в меню «Пуск» (впоследствии я узнал, что можно еще запустить исполняемый файл dcomcnfg.exe).
— Ее основным назначением является настройка объектов DCOM, и вот вам компонент Elevated-Unelevated Explorer Factory. Это не случайное совпадение!
Холмс открыл свойства компонента, и я увидел, что на вкладке «Удостоверение» предусмотрен выбор учетной записи для запуска процессов проводника.
«Параметр Текущий пользователь (Interactive User) соответствует значению параметра RunAs в реестре», — с авторитетным видом пояснил Холмс.
Увидев и другие варианты, я предположил, что этот параметр ограничивает запуск проводника текущими правами учетной записи, которые даже у администратора являются обычными.
— Получается, нужно попробовать установить параметр «Запускающий пользователь». Однако почему все опции заблокированы, Холмс?
— Это же элементарно, Ватсон!
Смена типа учетной записи для запуска проводника
Холмс переключился в редактор реестра.
— Поскольку в оснастке невозможно изменить тип учетной записи, у вас нет прав на внесение изменений в раздел реестра. Это происходит в случае, если его владельцем является системная учетная запись TrustedInstaller.
Он ловко получил доступ к разделу реестра и перезапустил оснастку. Чудесным образом в свойствах компонента Elevated-Unelevated Explorer Factory появилась возможность изменить тип учетной записи!
Затем Холмс снова вернулся в раздел HKEY_CLASSES_ROOT\AppID\{CDCBCFCA-3CDC-436f-A4E2-0E02075250C2} и продемонстрировал мне, что параметр RunAs исчез после изменения в оснастке.
Невозмутимо попыхивая трубкой, Холмс вернул исходные права и владельца раздела реестра на свои места, пояснив при этом:
— Как видите, изменение типа учетной записи для запуска проводника возможно двумя способами – в оснастке «Службы компонентов» и прямо в реестре. Впрочем, Ватсон, я не рекомендую вам удалять параметр реестра, т.к. достаточно переименовать его, например, в xRunAs.
Он подвинул мне ноутбук, давая понять, что проблема мисс Уинсли решена, и ехидно добавил:
— Кстати, Ватсон, теперь вовсе необязательно завершать все процессы проводника. Просто используйте ваш недокументированный ключ.
Запуск проводника с полными правами
Я открыл командую строку с полными правами и выполнил explorer.exe /separate. Теперь запущенный процесс проводника (PID 5948) имел высокой уровень целостности.
— Значит, «Текущий пользователь» (Interactive User) соответствует маркеру безопасности с обычными правами, который по умолчанию выдается даже администратору?
— Абсолютно верно, Ватсон! Вспомните историю про два билета на спектакль. Когда команда выполняется от имени администратора, «Запускающий пользователь» уже соответствует маркеру безопасности администратора. Поэтому теперь у проводника высокий уровень целостности, а его права полноценно повысились.
Я ввел в адресной строке проводника cmd, и командная строка открылась с полными правами (PID 2612).
— Можно вызывать мисс Уинсли?
— Конечно, Ватсон! И думаю, девушке будет приятно, если вы добавите ей в контекстное меню пункт для запуска проводника от имени администратора. Это послужит наглядным объяснением для распорядителей последней воли мистера Гейтса.
Пункт контекстного меню для запуска проводника с полными правами
Едва переступив порог, мисс Уинсли воскликнула:
— Джентльмены, неужели вы смогли найти решение всего за час?
— Позвольте ваш нетбук, леди. Доктор Ватсон покажет вам решение.
Мисс Уинсли достала из объемной сумочки серебристый VAIO и протянула мне. Уже через пару минут я создал в контекстном меню пункт для открытия папки от имени администратора.
Windows Registry Editor Version 5.00 ;Контекстное меню папки [HKEY_CLASSES_ROOT\Directory\shell\ExplorerElevated] @="Открыть папку от имени администратора" ;Отображение пункта только при нажатой клавише SHIFT "Extended"="" "Icon"="imageres.dll,73" [HKEY_CLASSES_ROOT\Directory\shell\ExplorerElevated\command] @="nircmd.exe elevate explorer.exe /separate /root,\"%1\"" ;Контекстное меню фона папки и рабочего стола [HKEY_CLASSES_ROOT\Directory\Background\shell\ExplorerElevated] @="Открыть папку от имени администратора" ;Отображение пункта только при нажатой клавише SHIFT "Extended"="" "Icon"="imageres.dll,73" [HKEY_CLASSES_ROOT\Directory\Background\shell\ExplorerElevated\command] @="nircmd.exe elevate explorer.exe /separate /root,\"%V\""
— Мисс Уинсли, выбрав этот пункт и согласившись с запросом контроля учетных записей, вы откроете папку проводника с полными правами. Все программы, запущенные из этого окна проводника, тоже будут иметь права администратора. Перетаскивание файлов в программы с любыми правами также будет работать.
Впервые за время пребывания на Бейкер-стрит мисс Уинсли улыбнулась, и ее глаза засветились от счастья. Прижимая к груди нетбук, она осыпала меня словами благодарности, заставив даже покраснеть под ироничным взглядом Холмса.
Уже в дверях мисс Уинсли внезапно повернулась и спросила:
— Джентльмены, скажите, а это решение будет работать в Windows vNext? В завещании есть еще один пункт – я должна перейти на нее в день выхода RTM.
Я замер, но Холмс отреагировал моментально:
— Но ведь в завещании не сказано, что вы должны запускать проводник с полными правами в Windows vNext?
Девушка отрицательно покачала головой, подарила нам еще одну улыбку и скрылась за дверью.
А я не смог удержаться от вопроса:
— Откуда у вас такие глубокие познания в Windows, Холмс?
— Это элементарно, Ватсон! Я подписан на вестник «Think Outside the Box!», благодаря которому регулярно пополняю свой багаж знаний. Да и разобраться в Windows все-таки проще, чем научиться играть на скрипке!
Виталий
На ХР так из коробки. Можете переходить, так как поставив ползунок на минимум, вы снизили встроенный иммунитет семёрки до уровня ХР.
Dimonius
Превосходно!
Дмитрий
Восхитительно! Большое Вам спасибо, аж дышать стало легче с Win8. Не подскажите как можно запустить exploer.exe от имени администратора при старте Windows?
Vadim Sterkin
Дмитрий, этого можно достичь отключением UAC.
Виталий К. ©
Лучше его не отключать. Без уац винда7 тупее ХР становится. Проверенно.
Vadim Sterkin
Виталий, это вы мне рассказываете, что лучше его не отключать? :) Если человек все прочел, но тем не менее хочет работать суперадмином, пусть работает…
Ремарку про «тупее XP» поясните, кстати.
Виталий К. ©
Простой пример- сижу под ограниченным пользователем в ХР и семёрке. Щёлкаю на любой инсталятор приложения. ХР и семёрка с UAC закономерно предложат ввести данные администратора, потому что под ограниченным пользователем всё равно приложение не установишь. В семёрке же с выключенным UAC этого нет, ОС пытается установить приложение. Результат немного предсказуем. Как видите, механизм определения установщиков завязан на UAC. На него вообще много чего завязано из того, что в ХР работало самостоятельно. В итоге при отключении UAC семёрка становится тупее ХР.
Vadim Sterkin
Виталий, объяснение логичное, а вывод — странный. «Суперадмины» же отключают UAC не для того, чтобы работать с ограниченными правами :) Это и так происходит само по себе, даже когда вы работаете администратором.
Кроме того, поведение зависит от того, как отключен UAC. Как правило, его вырубают совсем (EnableLUA=0), но есть более гибкие настройки. Можно отключить запрос только для администраторов. А для описанного вами сценария, кстати, стандартно используется запрос UAC.
Виталий К. ©
Ну да. Но мало ли что ещё Майкрософт завязал на UAC?
Больно то окно с просьбой ввести данные администратора похоже на аналогичное в ХР и совсем не похоже на окно UAC.
Vadim Sterkin
Еще Microsoft завязала на UAC виртуализацию папок и реестра для обеспечения совместимости старых программ (объяснение в указанной выше статье).
А окно нормальное — поставьте под админом ползунок в самый верх, будет то же самое. Это я все к тому, что механизм повышения прав в новых Windows более гибкий, чем в XP, теперь есть вагон вариантов. И опцию автоматического отклонения для обычных пользователей тоже сделали специально, в статье указана подоплека.
Да, можно настроить UAC и так, что в каких-то сценариях будет менее удобно работать. Но эти сценарии должны быть реалистичными, а не выдуманными.
Виталий К. ©
Вот- вот. Зачем? Честно- не пойму, причём тут УАЦ. Я бы без него реализовал, отдельно, чтобы при его выключении ничего не ломалось.
Вообще- то не тоже самое:
Под ограниченным при запуске инсталятора:
https://www.dropbox.com/s/c15rp2krnse6t0t/%D0%9E%D0%B3%D1%80%D0%B0%D0%BD%D0%B8%D1%87%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9.png
Под админом:
https://www.dropbox.com/s/x0wy78ak6m0yhye/%D0%90%D0%B4%D0%BC%D0%B8%D0%BD.png
Или я что- то не так настроил?
Vadim Sterkin
Виталий, нет, я не туда послал :) Ползунок в верхнем положении будет показывать запрос в панели управления, например. Но политику для администраторов я вам уже указал выше. ConsentPromptBehaviorAdmin=dword:00000001
Виталий К. ©
Вот это да, выводит запрос на ввод учётных данных.
Вадим
Не уверен, что правильно выбрал ветку, но все-таки…
В диспетчере задач Windows 7 отображается несколько процессов explorer.exe. Открываю проводник — добавляется процесс в диспетчере задач. Закрываю проводник — процесс не исчезает… и т.д.
Происходит это, только в том случае, если ярлык, с помощью которого вызывается проводник, имеет параметры запуска, у меня например:
%SystemRoot%\explorer.exe /n,/e,D:
Если оставить только:
%SystemRoot%\explorer.exe
то все будет нормально.
Проблема не только у меня — и на компьютере жены то же самое, и в Google достаточно много вопросов на эту тему (вопросов много — ответов мало :) ). То есть я не уникален в этой проблеме.
Как с этим бороться, случайно не в курсе?
Vadim Sterkin
Вадим, это похоже на поведение, когда установлен флажок «Запускать окна с папками в отдельном процессе». Только в том случае все окна в одном процессе (и он остается после закрытия окон), а у вас — каждому окну свой процесс.
А зачем вам этот ключ? Новое окно и без него открывается, можно же ярлык на папку сделать. И зачем вообще бороться с таким поведением системы?
Вадим
Vadim Sterkin,
Спасибо за ответ, но нет, флажок не влияет. Сейчас попробовал и так — и так. Добавляется процесс (не зависимо от того, где стоит флажок) и не уходит при закрытии проводника.
Я понимаю, что это не смертельно, но хотелось бы от этого избавиться потому что каждый оставшийся в памяти процесс ест ресурсы.
Вот сейчас в диспетчере задач присутствует 3 explorer.exe, которые используют память:
31.392 Kb
7.068 Kb
5. 984 Kb
Vadim Sterkin
Вадим, я и не говорил, что флажок влияет. Я сказал, что в вашем случае достаточно создать обычный ярлык на папку или диск: потянуть мышью и бросить в нужном месте, удерживая Alt.
Вадим
Vadim,
спасибо. Работает!
Только если я потом этот ярлык перетаскиваю на панель задач, он превращается в ярлык не папки, а обычного эксплорера.
Но это не страшно — я его добавил в панель быстрого запуска, а на ней он нормально работает.
Ещё раз Спасибо!
Vadim Sterkin
Внезапно, если решать задачу самым простым способом, проблем не возникает :)
Лев Бондарев
Уважаемый Вадим Стеркин!
Я решил Вашу проблему в Windows 7 и Windows 8, простым способом, с UAC не просто включённым, а на максимуме.
Делаем ярлык на диспетчер задач. Запускаем его от Админа (Именно, именно диспетчер!!), потом отмечаем галочку, дальше, как Ватсон. Всё! Набирая cmd после нажатия F4, получаем нашу надпись в заголовке. Отключены Параметры ПК в Windows 8. Отключается UAC. Вот это я называю — Run As Admin.
Как видите, необязательно решать логарифмы — нужно знать, сколько будет 2+2.
Соль — в том, что диспетчер с пониженными правами запускает System Apps тоже на понижайке, даже если галочка отмечена. Значит, нужно поднять нижнюю планку, а не верхнюю.
Да, забыл — слова «отключается UAC» это следствие работы повышенного explorer, а вовсе не руководство к действию)) UAC всегда был на максимуме.
Да, и когда будем в восьмёрке перезапускать explorer обратно, увидим забавный баг, который я называю — Windows 9. Ну, сами увидите)) Диспетчер задач откроется поверх пуска. Этого же можно добиться при нажатии «Переключиться» на панели приложений.
Vadim Sterkin
Лев,
В статье рассматривается способ запуска диспетчера задач Windows 7 с повышенными правами, иначе на первом рисунке не будет флажка. Т.е. вы предлагаете делать то же самое, но у вас почему-то другой результат :) Так что покажите мне видео или psr.exe, только запускайте запись от имени администратора.
Кстати, в Windows 8 диспечтер задач запускается в административной учетной записи сразу с повышенными праваим, потому там есть флажок сразу. Читайте также про уровни целостности.
Лев Бондарев
Vadim Sterkin,
Уважаемый Вадим Стёркин!
Галочка в свойствах сделана не просто так. Если её не отметить, проводник как бы запускается от администратора, но не полностью))
Нужно отметить обе галочки. Тогда всё происходит корректно.
Уровни целостности тоже сделаны не просто так, и их не нужно лишний раз трогать. Есть способ делать такие вот вещи и без COM.
Просто уровнями управляет ядро. И ему совершенно всё равно. Если приложение запускается от администратора, то и все его вызовы будут идти от администратора. COM же вторичен.
Сейчас вставлю ссылку на файл:
http://atsral.com/atsral/qWuU-otpravka.zip
Vadim Sterkin
Лев,
1. Я не понял, о каких «обеих галочках» вы говорите, выражайтесь яснее, плиз :)
2. Ваши комментарии по поводу уровней целостности и COM весьма расплывчаты, т.е. не содержат конкретики.
3. Ссылка на файл битая, а это было самое главное…
4. В моей фамилии нет буквы Ё.
Roman
Вадим, спасибо за отличную статью.
Написал небольшую утилиту, которая делает тоже самое, что в Вашей статье, за пару кликов. Возможно кому-либо пригодится.
http://www.it-efforts.ru/utils#E-UEF_switcher.
Евгений
Вадим, здравствуйте!
Мне понадобилась возможность запускать Проводник с полными админ.правами в Windows 10. Не успев и подумать о версии ОС, я запулил Ваш код в реестр. Желанный пункт в меню появился, но по нажатию выскакивает окошко с ошибкой «Приложение не найдено».
Подскажите, как добиться желанного функционала?
Vadim Sterkin
Евгений, перед запуливанием кода в реестр надо прочесть рассказ и сделать то, что там написано.
Леонид Вадимович
А не объяснит ли уважаемый Холмс, что это за параметр «-embedding» в той хитрой командной строке? К своему изумлению, гугл с яндексом играют друг с другом в молчанку на эту тему, ВООБЩЕ тишина.
Vadim Sterkin
Возможно, запуск через OLE-embedding. Тут упоминается для IE https://msdn.microsoft.com/en-us/library/hh826025(v=vs.85).aspx
Джонни
А что если речь идет не о запуске проводника с полными правами, а о запуске с правами другого пользователя?
Например у меня есть папка с бэкапами, куда может писать только backup_user, остальные только наблюдают, включая админа. При этом админ является владельцем папки.
Иногда мне хочется почистить бэкапы или поменять структуру хранения.
При попытке что то удалить UAC уже не спрашивает пароль, а предлагает запросить разрешение у админа.
Соответственно удобно было бы запустить проводник от backup_user и навести порядок. Как это сделать?
Vadim Sterkin
Запустите notepad от имени backup_user → Ctrl+O и вперед!
P.S. В блокноте нельзя выделить несколько файлов/папок за раз, но в некоторых других программах можно — Word (Ctrl+F12).
Джонни
Спасибо, этот способ уже отыскал. Думал возможно есть что-то еще.
Вообще тема защиты от шифровальщиков достаточно злободневная, если у вас есть какие нибудь свои фишки — был бы рад почитать в новых статьях)
Vadim Sterkin
А при чем тут защита от шифровальщиков? Тут стандартные рецепты — контроль запускаемого кода с SRP или AppLocker.