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

Вниз

запуск процесса из-под сервиса...   Найти похожие ветки 

 
istok20 ©   (2009-06-30 14:30) [0]

Данный код используется для запуска exe из-под сервиса в сессиях пользователей. Exe запустится под учеткой SYSTEM. А как сделать так, чтобы он запустился под юзером данной сессии? Я б например взял токен окна program manager, но не могу его найти в другой сессии...


function RunProcessInSession(FileName: String; SessionId: DWord): Boolean;
var
 hToken, hNewToken: Cardinal;
 si: TStartupInfo;
 pi: TProcessInformation;
 error: integer;
begin

 Result := False;

 if (SessionId = 0) and IsVistaOrLonghorn then
 begin
   Exit;
 end;

 if not OpenProcessToken(GetCurrentProcess, TOKEN_QUERY or TOKEN_DUPLICATE, hToken) then
 begin
   WriteLog8("not OpenProcessToken");
   Exit;
 end;

 if not DuplicateTokenEx(hToken, MAXIMUM_ALLOWED, nil, SecurityIdentification,
   TokenPrimary, hNewToken) then
 begin
   WriteLog8("not DuplicateTokenEx");
   Exit;
 end;

 //in Windows 2000 Professional and Windows NT SessionId value in this function is not supported
 //TTokenInformationClass(12) - value from MSDN
 if not SetTokenInformation(hNewToken,
   TTokenInformationClass(12), @SessionId, SizeOf(Cardinal)) then
   Exit;

 try
   FillChar(si,SizeOf(si),0);
   with Si do begin
     cb := SizeOf(Si);
     dwFlags := startf_UseShowWindow;
     wShowWindow := SW_NORMAL;
     lpDesktop := PChar("winsta0\default");
   end;

   Result := CreateProcessAsUser(hNewToken, PChar(FileName), nil, nil, nil,
     false, CREATE_DEFAULT_ERROR_MODE, nil, nil, si, pi);

 finally
   CloseHandle(hToken);
   CloseHandle(hNewToken);
 end;
end;


 
clickmaker ©   (2009-06-30 14:36) [1]

> для запуска exe из-под сервиса в сессиях пользователей

то есть как? сервис работает в своей сессии, пользователи - в своих. Какой именно пользователь интересует? Консольный, терминальный?


 
istok20 ©   (2009-06-30 15:55) [2]


> Какой именно пользователь интересует? Консольный, терминальный?


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


 
istok20 ©   (2009-07-01 14:59) [3]

пока только есть идея запустить в сессии свой exe под system, который уже в свою очередь увидит рабочий стол, возьмет его токен и запустит программу под user.  а попрямее есть варианты?


 
Leonid Troyanovsky ©   (2009-07-01 15:28) [4]


> istok20 ©   (01.07.09 14:59) [3]

> варианты?

Включить требуемую программу в автозагрузку, планировщик и т.п.
Ну, или юзера попросить.

--
Regards, LVT.



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

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

Наверх




Память: 0.48 MB
Время: 0.015 c
2-1293391673
nza
2010-12-26 22:27
2011.03.20
Помогите с классами


10-1136992618
nastya
2006-01-11 18:16
2011.03.20
сделать activex


11-1232530908
Dy1
2009-01-21 12:41
2011.03.20
консоль


4-1246357819
istok20
2009-06-30 14:30
2011.03.20
запуск процесса из-под сервиса...


4-1221723822
mikaa
2008-09-18 11:43
2011.03.20
Shell_NotifyIcon в Windows 2003