-
Есть программа запущенная с правами админа (UAC), как из нее запустить другую программу от этого же юзера но без прав админа?
и еще вдогонку, как записать из под того же (UAC) приложения файл, у которого будет доступ на запись обычному пользователю?
-
Единственное что приходит на ум взять токен своего процесса OpenProcessToken, установить ему IntegrityLevel в MEDIUM_INTEGRITY_SID - SetTokenInformation, а дальше запускать процесс - CreateProcessWithToken, и у процесса по идее будут ограниченные права
-
Да точняк так и есть, вот тебе исходник под XE2 чуть переделанный www.smalldonkey.net/delphi/vcl/run-as-system.zip
Если с включенным UAC из своего процесса запускаю notepad.exe c IntegrityLevel ниже HIGH_INTEGRITY_SID, то в папку C:\ файлы писать уже не может, выше или HIGH_INTEGRITY_SID то могу
-
В оригинале это делается немного по другому. Изначальная программа запускается без повышения привилегий и стартует копию себя с поднятием оных (так работают все инсталяторы). При необходимости запуска чего-то под учеткой пользователя, процесс с расширенными правами просто отправляет сигнал своему родителю, откуда выполняется банальный ShellExecute. С запуском из под админа посредством понижения привилегий может возникнуть целая череда проблем (некорректный доступ к реестру/системным папкам/виртуализация)
-
> так работают все инсталяторы
слишком жирный вывод у 9 из 10 изначально админский манифест, либо "автощиток" по названию от винды
> С запуском из под админа посредством понижения привилегий > может возникнуть целая череда проблем (некорректный доступ > к реестру/системным папкам/виртуализация)
я хочу страдать, дай мне этот шанс
-
> слишком жирный вывод > у 9 из 10 изначально админский манифест, либо "автощиток" > по названию от винды
Да ну брось - кто эти 9 из 10 инсталяторов? :)
-
> Да ну брось - кто эти 9 из 10 инсталяторов? :)
ну я залез в свой склад пиратского софта и посмотрел, без щитков в основном SFX архивы, аля "доунлоад эдишн", в которых уже "админизированые" инсталяторы
-
> QAZ (24.12.14 20:59) [6]
Пфф, давай так (раз уж мы с инсталяторов начали). Скачай исходники InnoSetup и проследи по ним что и как фунциклирует... Да впрочем даже будет достаточно утилиты от Руссиновича - просто стартани инсталятор (любой) и посмотри по манагеру процессов, что от чего пляшет и кто является родительским процессом (оть тут смотри на привилегии процесса) :)
-
> Rouse_ © (24.12.14 21:06) [7]
у InnoSetup изначально вшит манифест (сейчас только посмотрел)
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="asInvoker" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo>
не перезапускает он себя, запрос на повышение сразу при старте появляется.
-
> Rouse_ © (24.12.14 21:06) [7]
когда я пишу "склад пиратского софта", я имею ввиду не поделки аля "смени иконку папке", а серьезный коммерческий софт, который сам знаешь где видал InnoSetup и все что описано в [4][6] я не придумал а всякие порождения процессов во всяких Русиновичах, это всего лишь копирование\извлечение во временую папку и запуск себя оттуда, на случай многодискового дистрибутива аля "вставте диск №2" или сетевой
-
> не перезапускает он себя, запрос на повышение сразу при > старте появляется.
Да щаз :) Во первых asInvoker не вызывает появления окна с поднятием (это как раз сделано для того чтобы небыло его автоматического полнятия из-за имени процесса SETUP) А во вторых открой процмон от руссиновича и посмотри как он себя не перезапускает (я думю два процесса один с админскими правами, висящий чайлдом у первого, запущенного от пользователя прояснит картину) :)
> и все что описано в [4][6] я не придумал
Подозреваю, но правильное решение я написал еще в [3] :)
-
Удалено модератором
-
Удалено модератором
-
> DVM © (25.12.14 11:07) [8]
Ну до кучи, сейчас сам уже открыл исходники, чтобы показать фишку. Смотри модуль SpawnServer, где сразу увидишь: NeedToRespawnSelfElevated + RespawnSelfElevated Данный комментрарий, думаю не требует перевода:
-
Удалено модератором
-
Смысл то чем? зачем нужен этот процесс с ограниченными правами?
-
-
> Смысл то чем? зачем нужен этот процесс с ограниченными правами?
планирую сделать супер\пупер блокнот, со встроенным каркулятором и возможностью подчеркивать вэб-адреса
> качай, изучай :)
ооокей, поставлю в своем списке печальный смайлик, напротив твоего ника :(
-
> Rouse_ © (25.12.14 17:33) [10]
> Во первых asInvoker не вызывает появления окна с поднятием
а ну да, я стормозил, почему то решил что там requireAdministrator
|