Форум: "Начинающим";
Текущий архив: 2009.04.05;
Скачать: [xml.tar.bz2];
ВнизЗапуск из сервиса на активном 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
/с указанием в TStartupInfo.lpDesktop "winsta0\winlogon"./
ActiveSessionID:DWORD;
GetCurrentProcessID>OpenProcessToken(MAXIMUM_ALLOWED...)>DuplicateTokenEx(...TOK EN_ALL_ACCESS or TOKEN_ADJUST_SESSIONID...)>SetTokenInformation(...TokenSessionId, @ActiveSessionID, SizeOf(DWORD))>CreateProcessAsUser
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c