Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
15-1233823377
Alkid
2009-02-05 11:42
2009.04.05
Посоветуйте видеокарту.


2-1234571534
Артёмка
2009-02-14 03:32
2009.04.05
Динамические меню.


15-1233560918
CodeMaster
2009-02-02 10:48
2009.04.05
Работа с PNG


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


3-1218000664
AlexeyMir
2008-08-06 09:31
2009.04.05
Помогите с SQL-запросом





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