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

Вниз

Запуск из сервиса на активном Desktop с правами администратора   Найти похожие ветки 

 
Denied   (2009-02-10 21:36) [0]

Имеется сервис (свой), работающий в Windows Vista.
Нужно получить доступ к активному десктопу, чтобы была возможность установки хука и заодно - работы с пользователем. (сразу скажу - пишу что-то вроде http://www.lanagent.ru/ , хоть такое здесь и не любят).

Что пробовал:
Сервис получает уведомления о смене пользователей в HandlerEx, принимая SessionID.
Далее WTSQueryUserToken>DuplicateTokenEx(..TokenPrimary..)>CreateProcessAsUser.
При этой последовательности мое приложение запускается, но имеет права обычного пользователя, соответственно - в процессы, запущенные "от администратора" хук не устанавливается.
GetTokenInformation(...TokenGroups...)"говорит", что для SID группы "Администраторы" установлен атрибут SE_GROUP_USE_FOR_DENY_ONLY (это же подтверждает и ProcessExplorer).
Попытка подмены атрибута на SE_GROUP_OWNER или SE_GROUP_ENABLED в SetTokenInformation(...TokenGroups...) дает ошибку "Неверный параметр".
Попытка SetTokenInformation(...TokenPrimaryGroup...) отрабатывает нормально, но результатов никаких не дает.
SetTokenInformation(...TokenOwner...) выдает ошибку 1307 - Invalid Owner (в принципе и понятно:) )

Пробовал задействовать токен самого сервиса и подменить в нем SessionId - (OpenProcessToken>DuplicateTokenEx>SetTokenInformation(...TokenSessionId.. .)) получаю (5) ERROR_ACCESS_DENIED и процесс запускается на десктопе интерактивных служб.

Программы похожего направления (RAdmin, ROM...) как-то делают это - запускаемые их службами интерактивные процессы являются дочерними к их же службам. Причем закладка Security интерактивного процесса в ProcessExplorer-е заставляет думать, что за основу запуска взят токен сервиса (большинство привилегий имеют статус DefaultEnabled и т.д.)...

Что я не учитываю?


 
Denied   (2009-02-12 22:33) [1]

Up.

Попробую задать вопрос покороче.
В описании параметров CreateProcessAsUser по hToken написано:
The process is run in the session specified in the token. By default, this is the same session that called LogonUser. To change the session, use the SetTokenInformation function.

В описании SetTokenInformation:
The buffer receives a DWORD value that indicates the Terminal Services session identifier associated with the token... The process must have the SE_TCB_NAME privilege and must be enabled to set the session ID in a token..
Выделенное жирным "недоперепонял". как это?

SE_TCB_NAME у сервиса имеет статус DefaultEnabled.
SessionID имеет правильный номер - 1.

Тем не менее - AccessDenied при попытке присвоить SessionID токену, полученному через DuplicateTokenEx(токен_моего_сервиса).

Как решить эту проблему?


 
Denied   (2009-02-20 01:10) [2]

Проблема решена, спасибо всем за участие :)
Вообще, она заключалась в том, что в D7 в константу TOKEN_ALL_ACCESS не включено TOKEN_ADJUST_SESSIONID ($100). Именно это и имелось ввиду в MSDN :must be enabled to set the session ID in a token.

Итого, для запуска из не-интерактивного сервиса процесса на десктопе активной сессии нужна связка:

var
 ActiveSessionID:DWORD;

GetCurrentProcessID>OpenProcessToken(MAXIMUM_ALLOWED...)>DuplicateTokenEx(...TOK EN_ALL_ACCESS or TOKEN_ADJUST_SESSIONID...)>SetTokenInformation(...TokenSessionId, @ActiveSessionID, SizeOf(DWORD))>CreateProcessAsUser
/с указанием в TStartupInfo.lpDesktop "winsta0\winlogon"./

ActiveSessionID можно получить с помощью WTSGetActiveConsoleSessionID, но лучше - из HandlerEx сервиса. (стандартный TService достаточно легко дорабатывается для использования этой функции).

Как результат - процесс запускается на десктопе Default активной сессии, имеет Owner-ом группу "Администраторы" и практически все привилегии как DefaultEnabled.


 
Denied   (2009-02-20 01:11) [3]

P.S. И это несмотря на включенный UAC, с которым придется еще повозиться, наверное :)


 
Denied   (2009-02-20 01:15) [4]

P.P.S. Ошибочка - /с указанием в TStartupInfo.lpDesktop "winsta0\default"./



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

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

Наверх




Память: 0.48 MB
Время: 0.015 c
15-1233699203
Германн
2009-02-04 01:13
2009.04.05
Соединение со сканером


6-1201616960
Yurij-7
2008-01-29 17:29
2009.04.05
Кодировка темы сообщения и поля " Отправитель"


2-1234347557
SingleStranger
2009-02-11 13:19
2009.04.05
Динамический массив структур (record) как свойство класса.


15-1233650411
AlexKniga
2009-02-03 11:40
2009.04.05
А где "С днем рождения !" ?


15-1233354903
Германн
2009-01-31 01:35
2009.04.05
Интересный вопрос всплыл неожиданно.