Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2011.03.20;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2011.03.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.007 c
11-1232530908
Dy1
2009-01-21 12:41
2011.03.20
консоль


2-1293142515
vitge
2010-12-24 01:15
2011.03.20
Установка ширины ячейки в StringGrid.


15-1291296907
TP
2010-12-02 16:35
2011.03.20
Turbo Pascl & реестр


8-1208898067
Музыкант
2008-04-23 01:01
2011.03.20
Циклическое проигрывание midi-файла без разрывов в звучании


11-1227810366
Jon
2008-11-27 21:26
2011.03.20
Activemovie





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский