Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.009 c
15-1233701918
Германн
2009-02-04 01:58
2009.04.05
RAD Studio 2007 vs BDS 2006


15-1232012611
nnov
2009-01-15 12:43
2009.04.05
1C не редактируются документы


1-1209133936
Kolan
2008-04-25 18:32
2009.04.05
В MDI приложение WindowState := wsMaximized; происходит долго&#133


1-1209392487
ZENsan
2008-04-28 18:21
2009.04.05
DesignIntf, DesignEditors...


4-1207543866
MultIfleX
2008-04-07 08:51
2009.04.05
Сервис и права доступа




   Наверх