Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2017.01.15;
Скачать: CL | DM;

Вниз

Запустить с обычными правами из под проги с админ. правами   Найти похожие ветки 

 
Кто б сомневался ©   (2016-02-02 14:50) [0]

Привет.

Подскажите где искать.

Есть программа, у нее админ. права (<requestedExecutionLevel level="requireAdministrator").
Нужно чтобы она запустила другую прогу, со стандартными правами (default security settings), без повышения до админа.


 
Кто б сомневался ©   (2016-02-02 15:06) [1]

Как это сделать программно из программы с админ правами?


 
Кто б сомневался ©   (2016-02-02 15:26) [2]

Поикал.
Данный функционал не поддерживается в Win. Но возможно это сделать через хак, копируя token шела, сделать его дубликат и запускать с этим токеном нужным процесс.
Есть ньюансы.

http://blogs.msdn.com/b/aaron_margosis/archive/2009/06/06/faq-how-do-i-start-a-program-as-the-desktop-user-from-an-elevated-app.aspx


 
Кто б сомневался ©   (2016-02-02 15:33) [3]

Проще наверное и правильнее сделать через второй процесс:
Обычный non-elevated процесс, запускает admin процесс, и ожидает команд от него. Затем запускает все что нужно без повышения до админа.


 
sniknik ©   (2016-02-02 15:45) [4]

ShellExecuteEx
+
https://www.google.ru/search?q=_RunWithReducedPrivileges&ie=utf-8&oe=utf-8&gws_rd=cr&ei=oaSwVpeuEMqkygOCvYTICw


 
sniknik ©   (2016-02-02 15:51) [5]

вот еще нашел, думаю ближе к теме
CreateProcessAsUser
https://msdn.microsoft.com/en-us/library/windows/desktop/ms682429%28v=vs.85%29.aspx


 
sniknik ©   (2016-02-02 15:53) [6]

http://delphimaster.net/view/4-1304337418/


 
Кто б сомневался ©   (2016-02-02 15:56) [7]


> sniknik ©   (02.02.16 15:45) [4]

Там та же идея с токеном из Explorer.exe + CreateProcessWithTokenW что в [2].

А ShellExecuteEx - из под админа запустит также с админ. правами, я уже проверял.


 
Кто б сомневался ©   (2016-02-02 16:45) [8]

CreateProcessAsUser - там тоже нужен чужой токен.
Вобщем там же идея что и Explorer.exe + CreateProcessWithTokenW .

За помощь спасибо.


 
Eraser ©   (2016-02-02 21:17) [9]

 // Запрещаем вызов UAC диалога, запускаем с теми правами, какие есть.
 if not SetEnvironmentVariable("__COMPAT_LAYER", "RunAsInvoker") then
 begin
   Exit;
 end;

 try
   ZeroMemory(@PI, SizeOf(TProcessInformation));
   ZeroMemory(@SI, SizeOf(TStartupInfo));
   SI.cb := SizeOf(TStartupInfo);
   SI.wShowWindow := SW_NORMAL;

   bRet := CreateProcess(
     nil,
     PChar(sFile),
     nil,
     nil,
     False,
     NORMAL_PRIORITY_CLASS,
     nil,
     nil,
     SI,
     PI
   );

   if bRet then
   begin
     // Дожидаемся завершения процесса и выходим.
     WaitForSingleObject(PI.hProcess, INFINITE);

     CloseHandle(PI.hProcess);
     CloseHandle(PI.hThread);
   end;
 finally
   SetEnvironmentVariable("__COMPAT_LAYER", nil);
 end;


 
Eraser ©   (2016-02-02 21:54) [10]

Наверное, все таки, [9] не то. Но все зависит от целей, для которых нужен сабж.


 
han_malign ©   (2016-02-03 13:44) [11]


> CreateProcessAsUser - там тоже нужен чужой токен.

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



Страницы: 1 вся ветка

Текущий архив: 2017.01.15;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.02 c
2-1425461509
Asher
2015-03-04 12:31
2017.01.15
Сортировка дат в TStringList


15-1457194325
MsGuns
2016-03-05 19:12
2017.01.15
Нужна ли видеокарта ?


15-1452881433
xayam
2016-01-15 21:10
2017.01.15
Приглашаю на шахматный турнир Delphi Masters 4 (2016)


2-1424793636
TYMON
2015-02-24 19:00
2017.01.15
Intraweb Подключение к базе через ADO


15-1454623843
KilkennyCat
2016-02-05 01:10
2017.01.15
Задачка про сеть.