Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

Interactive logon

Вот, понадобился программый сабж.
Не получается. Взял пример из MSDN по адресу "Security\Security
(General)\SDK Documentation\Authorization\Using Authorization\Using
Client/Server Access Control\Starting an Interactive Client Process" плюс
пара функций из "Security\Security (General)\SDK
Documentation\Authorization\Using Authorization\Using Client/Server Access
Control\Getting the Logon SID". Компилится, запускается, не работает. Всё
проходит без ошибок, кроме заключительно CreateProcessAsUser(), который
завершается с GetLastError()==ERROR_PRIVILEGE_NOT_HELD. Как же это
понимать-то? Исходные самплы из MSDN не работают.
Причём с помощью CreateProcessWithLogonW() можно заставить нужное приложение
запуститься под другой учёткой, но в текущей интерактивной сессии, вместо
собственной вновь создаваемой.
К тому же дело не в создании сессии. Ибо LogonUser() отрабатывает без
проблем, да и результат не зависит от того, создана ли нужная интерактивная
сессия заранее или нет. Тот же стандартный шедулер-то запускает сессими.
Правда пакетные, а не интерактивные, но и с пакетными у меня такая же фигня.
Я сильно подозреваю, что моему процессу не хватает какого-то токена. Вот
только какого?
Правда, возможно это всё должно работать в качестве службы, а не обычного -
пусть и под админом - приложения. Но в самом MSDN-е об этом вроде не
упоминается. Да и пробовал я включать в локальных политиках во "Вход в
качестве службы" свою и целевую учётки. Или я ошибаюсь, что это уравняло бы
права моего процесса со службой? Может быть надо было "Работа в режиме
операционной системы"?
Происходит это всё под WinXP rus SP2. Моя и целевая учётки - локальные.
Доменов нет. В качестве имени домена указываю "." как и советует MSDN.
У кого какие мысли, а лучше опыт?

--
С уважением, boroda
mailto:boroden***@s*****.ru

Номер выпуска : 4429
Возраст листа : 592 (дней)
Количество подписчиков : 517
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/362121
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

Ответить   Шматко А.А. Thu, 5 May 2005 14:42:05 +0400 (#362121)

 

Ответы:

Хаю ду ю ду Шматко А.А.?

Смотрю и вижу, как ты печатаешь умные вещи и дай-ка, думаю,
тоже что-нибудь напечатаю:

-

Почти ни чего не понял что ты хочешь сотворить, но из того что понял,
имхо, вытекает создание сервиса.

бы

Вряд-ли это поможет твоим программам стать сервисом - сервис это ведь,
имхо, не программа запущенная с правами сервиса, а именно сервис.
Кстати в каком месте ты настроил "Вход в качестве службы"? Если можно
поподробнее, а то я давно как-то находил это, но потом забыл где, а
иногда это очень знать, но не помню где включать.

Ты распиши поподробнее что именно ты хочешь сделать, а то лично я
ничерта не понял.

Ответить   Thu, 5 May 2005 17:34:25 +0500 (#362186)

 

Нет. Сервисы тут ни причём. Впрочем, если без них не удастся, то окажутся
"причём".

Так я и хотел получить программу, обладающую правами сервиса, чтобы не
писать сам сервис. Я-то экспериментировал. А сервисы писать (правда не
намного) и отлаживать (это уже посильнее) посложнее. Просто возникла мысль,
что только сервисы и имеют необходимые токены по умолчанию, и захотелось это
по-быстрому проверить.

Диктую - записывай: ;)
"Администрирование"\"Локальная политика безопасности"\"Локальные
политики"\"Назначение прав пользователя"\"Вход в качестве службы".
Там же и "Работа в режиме операционной системы", только ниже. По умолчанию и
там, и там пусто.

Хорошо, поясню с чего всё началось.
Стандартный шедулер (в частности) запускает запланированные задания в
пакетном сеансе. Он отличается от интерактивного тем, что не предусматриает
взаимодействия с пользователем, чем экономит системные ресурсы. Впрочем,
если этот пользователь интерактивно "присеансился", то это задание будет
запущено именно в этом сеансе.
Меня пакетные сеансы не всегда устраивают. Например, дома компьютер у меня
по утрам работает будильником, включая на полную катушку WinAMP. Очень
удобно, так как можно распланировать этих будильников целую кучу, а
требуется их минимум три - мне, жене и дочери, все в разное время. Одна
беда - когда меня дома уже нет, WinAMP стартует в моей учётке, которая
понятное дело запаролена и вырубить его никто не сможет, а запускать в чужой
учётке - значит столкнуться с пакетным сеансом, который прекратить можно
(штатными Win-средствами) только "насильно". Вот и хотелось бы программно
запускать интерактивную сессию, чтобы WinAMP позднее стартовал в ней.
То, что это возможно, сомнению не подлежит. Ибо стандартный логон как-то же
срабатывает. Да и какой-то твикер умел запускать интерактивные сеансы и
переключаться между ними без предварительного выхода в экран приветствия. У
него это делалось горячими кнопками. Правда, он использвал свой сервис.

--
С уважением, boroda
mailto:boroden***@s*****.ru

Номер выпуска : 4432
Возраст листа : 592 (дней)
Количество подписчиков : 517
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/362253
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

Ответить   Шматко А.А. Thu, 5 May 2005 17:03:43 +0400 (#362253)

 

Хаю ду ю ду Шматко А.А.?

Смотрю и вижу, как ты печатаешь умные вещи и дай-ка, думаю,
тоже что-нибудь напечатаю:

и

Спасибо.

Короче все что из этого понял - попробуй

at 14:37 /INTERACTIVE taskmgr
может это тебе поможет, т.к. задания создаются в планировщике +
показываются на экране.

Ответить   Thu, 5 May 2005 20:35:13 +0500 (#362301)

 

О, как! Давненько я на ключики стандартных утилит не смотрел. За это сенкс.
Однако, это не то, что требовалось. Компутер-то просыпается в экран
приветствия, то есть когда "текущего пользователя" нет, а если и имеются
запущеные интерактивные сеансы, то все они отключены. И только после
подключения к какому-нибудь из них (что можно сделать штатными
Win-средствами опять-таки только интерактивно) появляется этот самый
"текущий пользователь".
В общем, хотелось бы программное решение проблемы. Про шедулер - это я
просто пример приводил. С него-то всё и началось. А сейчас уже затянуло:
хочу
программно создать интерактивный сеанс.

--
С уважением, boroda
mailto:boroden***@s*****.ru

Номер выпуска : 4435
Возраст листа : 592 (дней)
Количество подписчиков : 517
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/362356
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

Ответить   Шматко А.А. Thu, 5 May 2005 20:26:14 +0400 (#362356)

 

Сразу скажу, что сам делал только LogonUser()/ImpersonateLoggedOnUser()
для пакетного входа. Там требовалось в локальных политиках
установить для новой учетной записи привилегию
"вход в качестве пакетного задания".

Все что написано ниже, просто мысли, на практике не проверял.

В справке по CreateProcessAsUser() сказано, что нужны привилегии
SE_ASSIGNPRIMARYTOKEN_NAME и SE_INCREASE_QUOTA_NAME.
Они есть?

Не могли бы Вы рассказать подробнее, чего Вы хотите добиться и что делаете?

В MSDN пишут, что для создания интерактивного процесса с помощью
CreateProcessAsUser() нужно указать в STARTUPINFO имя интерактивной
оконной станции (уж не знаю, как это правильно переводится) и
рабочего стола: "winsta0\default". Плюс перед вызовом CreateProcessAsUser()
надо для этой станции и рабочего стола изменить DACL
(в примере, который я видел, его просто сбросили).

Вы делаете именно это, или что-то другое?

Помнится, когда я пытался заставить работать пакетный вход, пришлось
просто читать названия настроек локальной политики
безопасности, пока не обнаружил подходящую :(

Вряд ли.
Хотя оконные станции и появились в связи с сервисами,
должно работать и для обычных процессов.

Номер выпуска : 4431
Возраст листа : 592 (дней)
Количество подписчиков : 517
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/362250
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

Ответить   Thu, 5 May 2005 17:19:42 +0400 (#362250)