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

Вниз

Запуск приложения из сервиса   Найти похожие ветки 

 
Ученик   (2002-07-18 12:46) [0]

Есть интерактивный сервис, работающий по "Local system account" необходимо что бы сервис запустил приложение с именем пользователя, который сейчас зарегистрирован в системе, пароль пользователя неизвестен, т.е использовать CreateProcessAsUser нельзя, думаю использовать CreateRemoteThread, который будет создаваться для текущего работающего Shell-процесса и запускать требуемое приложение, может есть пути попроще ?


 
ZZ   (2002-07-18 16:03) [1]

ImpersonateLoggedOnUser для того-же процесса :)


 
Ученик   (2002-07-18 16:18) [2]

>ZZ
В какой момент, и откуда его брать ?


 
ZZ   (2002-07-18 16:27) [3]

Берем процесс
OpenProcess -> OpenProcessToken -> ImpersonateLoggedOnUser ->CreateProcess
-> CreateProcessAsUser

Какой процесс брать я думаю ты знаешь? Ты же хотел делать CreateRemoteThread. Можно, например, найти процесс explorer.exe


 
Ученик   (2002-07-19 10:34) [4]

>ZZ
С ImpersonateLoggedOnUser не получилось, приложение запускалось под SYSTEM, это была работающая последовательность или предполагаемая ? Что должно происходить после вызова ImpersonateLoggedOnUser, описание я читал, но так и понял.

Удалось решить через CreateRemoteThread, работает как надо.


 
ZZ   (2002-07-19 16:11) [5]

Как бы это по проще... После вызова ImpersonateLoggedOnUser поток работает под аккаунтом юзера, токен которого был передан в функцию...

За 100% работоспособность примера не ручаюсь, писал его давно и вроде работал, а 2 раз проверять не хочется :))

procedure TForm1.Button1Click(Sender: TObject);
var
hProc : THandle;
hToken : THandle;

User : array [0..100] of Char;
cbUser : Cardinal;
begin
hProc:=OPenProcess(PROCESS_ALL_ACCESS,false,dwPid);
if hProc = 0 then
ShowMessage("OPenProcess"+#13#10+SysErrorMessage(GetLastError()));

if not OpenProcessToken(hProc,TOKEN_DUPLICATE or TOKEN_QUERY ,hToken)
then
ShowMessage("OpenProcessToken"+#13#10+SysErrorMessage(GetLastError()));

if not ImpersonateLoggedOnUser(hToken)
then
ShowMessage("ImpersonateLoggedOnUser"+#13#10+SysErrorMessage(GetLastError())
);

// Это проверка под кем мы работаем сейчас
cbUser:=100;
GetUserName(User,cbUser);
ShowMessage(User);

RevertToSelf;

cbUser:=100;
GetUserName(User,cbUser);
ShowMessage(User);
end;


 
Ученик   (2002-07-19 17:05) [6]

GetUserName(User,cbUser);
ShowMessage(User);

показывает то что требуется, а запущенное приложение через CreateProcess или WinExec в Task Manager под SYSTEM.


 
ZZ   (2002-07-19 18:37) [7]

RevertToSelf; "возвращает" старую учетную запись
т.е. теоретически код от ImpersonateLoggedOnUser до RevertToSelf под юзером. Остальное - под системой



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

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

Наверх





Память: 0.46 MB
Время: 0.007 c
1-98037
JSX
2002-09-18 23:27
2002.09.30
Компоненты


14-98343
Игорь Шевченко
2002-09-05 15:22
2002.09.30
К вопросу о пиратстве


1-98159
X-Vizitor
2002-09-17 21:49
2002.09.30
Как проверить кем закрывается приложение


3-97976
Bishop
2002-09-07 16:23
2002.09.30
Экспорт в Excel


14-98327
NeyroSpace
2002-09-05 13:35
2002.09.30
---|Ветка была без названия|---





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский