информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Страшный баг в WindowsАтака на InternetСетевые кракеры и правда о деле Левина
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[Win32] Ответ никак :( Винда сама их не знает. Но... 30.11.03 03:56  Число просмотров: 1397
Автор: Disappear Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Мне все-же удалось добиться интерактивности, для этого пришлось еще воспользоваться OpenWindowStation и OpenDesktop,
но все же новый процесс запускается как SYSTEM и поэтому он не может взаимодействовать с клиенским реестром и прочее...
Как же всетаки сделать так чтобы процесс запускался под текущим юзером.
<programming>
[Win32] CreateProcess из System Service? 29.11.03 17:40  
Автор: Disappear Статус: Незарегистрированный пользователь
<"чистая" ссылка>
У меня есть программка, которая запущена и работает как системный сервис WindowsNT
Как известно системные сервисы не имеют интерактивности, то есть очереди сообщений и окон.

Дело такое: мне нужно запустить чужую программу из моего сервиса,
для этого я использую

CreateProcess(ProgPathName, NULL, NULL, NULL, FALSE, CREATE_NEW_CONSOLE | NORMAL_PRIORITY_CLASS, NULL, NULL, &StartInfo, &ProcInfo);

программа запускается, но она запускается тоже как системный процесс :( и поэтому глупо сидит в памяти и взаимодействавать с ней невозможно. Тоесть, не создается никаких окон, программа себя никак не проявляет.

Как запустить программу независимо от моего системного сервиса???
[Win32] CreateProcess из System Service? 30.11.03 00:00  
Автор: Killer{R} <Dmitry> Статус: Elderman
Отредактировано 30.11.03 00:03  Количество правок: 1
<"чистая" ссылка>
> Как известно системные сервисы не имеют интерактивности, то
> есть очереди сообщений и окон.
Почему это? Сервис может быть интерактивным для чего надо его создавать с флагом SERVICE_INTERACTIVE_PROCESS. Ну или галку выставить соответствующую в его настройках. А вообще если тебе нельзя указать этот флаг то можешь попробовать запускать процесс через CreateProcess установив перед запуском
STARTUPINFO si;si.lpDesktop="Default";
[win32] ту дело в system и user процессах 30.11.03 01:46  
Автор: Disappear Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> > Как известно системные сервисы не имеют
> интерактивности, то
> > есть очереди сообщений и окон.
> Почему это? Сервис может быть интерактивным для чего надо
> его создавать с флагом SERVICE_INTERACTIVE_PROCESS. Ну или
> галку выставить соответствующую в его настройках. А вообще
> если тебе нельзя указать этот флаг то можешь попробовать
> запускать процесс через CreateProcess установив перед
> запуском
> STARTUPINFO si;si.lpDesktop="Default";
Это все не помогает.
Дело в том, что новый процесс создается как системный, хотя обыкновенные программы запускаются под правами текущего пользователе ( в моем случае админа).
В TaskManagere видно, что запущены системные и юзерские процессы.

Я так понял, что проблема решится если использовать функцию
CreateProcessWithLogonW(
LPCWSTR lpUsername,
LPCWSTR lpDomain,
LPCWSTR lpPassword,
...);

но чтобы вызвать функцию, нужно знать имя, домен и пароль текущего пользователя. А вот как это узнать????
А какая разница system там или user? 30.11.03 04:56  
Автор: Killer{R} <Dmitry> Статус: Elderman
<"чистая" ссылка>
Система тоже юзер. Делай интерактивный сервис и не мучайся. Вот я пишу прогу с окошками и прочим - работает сервисом и даже иконку в трее показывает по даблклику на которой она открывается.
[Win32] Ответ никак :( Винда сама их не знает. Но... 30.11.03 03:56  
Автор: Disappear Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Мне все-же удалось добиться интерактивности, для этого пришлось еще воспользоваться OpenWindowStation и OpenDesktop,
но все же новый процесс запускается как SYSTEM и поэтому он не может взаимодействовать с клиенским реестром и прочее...
Как же всетаки сделать так чтобы процесс запускался под текущим юзером.
[Win32] Ответ никак :( Винда сама их не знает. Но... 30.11.03 05:03  
Автор: Killer{R} <Dmitry> Статус: Elderman
<"чистая" ссылка>
> но все же новый процесс запускается как SYSTEM и поэтому он
> не может взаимодействовать с клиенским реестром и прочее...
> Как же всетаки сделать так чтобы процесс запускался под
> текущим юзером.
Для этого надо получить token текущего юзера и создать процесс через CreateProcessAsUser. Я лично ничего более умного чем открытие процесса шелла и делания OpenProcessToken не придумал. Если ктото знает как получить token от имени текущего залогиненого юзера а не заюзать с уже запущенного процесса буду очень рад узнать Ж).
[Win32] ?? CoImpersonateClient 30.11.03 15:51  
Автор: Disappear Статус: Незарегистрированный пользователь
<"чистая" ссылка>
На сколько я понял, чтобы "внедриться", а именно получить права текущего логона. Нужно вызвать CoImpersonateClient в моем COM сервере. И это вроде работает. Затем я запрашиваю токентекушегопроцесса, которые теперь имперсонирован (какое дебильное слово).
OpenThreadToken(GetCurrentThread(), ...)
Я получил, ура! Но в MSDN сказано что это имперсональный токен, а мне нужно получить из него primary токен чобы я мог вызывать CreateProcessAsUser.
И получить я его должен с помощью функции DuplicateTokenEx.
Я вызвал DuplicateTokenEx,
DuplicateTokenEx(ImpToken, TOKEN_ALL_ACCESS, NULL, SecurityImpersonation, TokenPrimary, &PrimToken)
в ответ получил FALSE, ... вот до сих пор с этим и борюсь.

Кто знает, как получить primary из impersonate токена???
Ниженаписанный код запускает из сервиса процесс с правами... 01.12.03 23:35  
Автор: Killer{R} <Dmitry> Статус: Elderman
<"чистая" ссылка>
Ниженаписанный код запускает из сервиса процесс с правами запущенного шелла:
HWND taskwnd=FindWindow("Progman","Program Manager");
if(taskwnd)
{
DWORD pid=0;GetWindowThreadProcessId(taskwnd,&pid);
HANDLE prc=OpenProcess(PROCESS_ALL_ACCESS,0,pid);
if(prc)
{
HANDLE tk=0;
if(OpenProcessToken(prc,TOKEN_ALL_ACCESS,&tk))
{
PROCESS_INFORMATION pi;STARTUPINFO si;
memset(&si,0,sizeof(si));si.cb=sizeof(si);
CreateProcessAsUser(tk,"C:\\program files\\far\\far.exe",0,0,0,0,CREATE_DEFAULT_ERROR_MODE,0,0,&si,&pi);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
CloseHandle(tk);
}
CloseHandle(prc);
}
}else MessageBox(0,"No shell window found","Error",MB_ICONERROR);
Недостаток понятен - нету стандартного шелла - ниче не запустится. Можно описать в доке к программе что это фича. Можно положить в автозапуск свою прогу которая создает окно вместо шелла Ж). Можео вообще положить в автозапуск процесс-хелпер и запускать проги через него каким нибудь макаром (например подавая команды через трубы, а то и простым PostMessage())
[Win32] А зачем тебе это, собственно, надо? 01.12.03 04:24  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
Если тебе нужно сделать оболочку для сервиса, которая сохраняла бы настройки в пользовательском профиле - пропиши ее в автозапуск. И пусть она оттуда в свернутом виде стартует.
[Win32] Это должен быть сервис, однозначно 01.12.03 17:59  
Автор: Disappear Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Я не могу из-за такой фигни пускать весть сервис на процесс юзера.
Да и авторан - уже не модно.
[Win32] Почему "Весь"? Суп - отдельно, мухи - отдельно. 02.12.03 04:56  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
Сервис - консольное приложение - сервер, графическая оболочка под текущим юзером - клиент. И вообще, лучше, если сервис - sys-драйвер, а клиент к нему через DeviceIoControl обращается.
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach