Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];

Вниз

Как программно залогинить пользователя   Найти похожие ветки 

 
VideoLord   (2004-09-21 18:09) [0]

Добрый день, мастера!

Сначала ситуация:

Есть сервер на Windows XP. На нем настроен autologon с указанием имени пользователя, пароля и домена в который входим.
При запуске машины все проходит отлично, юзер логинится на экране показывается его рабочий стол и все такое.

После подключения к серверу с помошью "удаленного рабочего стола" с тем же именем и паролем, на экране сервера появляется стандартное приглашение входа в систему (видимо происходит "user-switching"). Самое обидное, что после отключения удаленного сеанса, сервер в исходное состояние так и не возвращается, то есть рабочий стол не показывает и окошко с приглашением ввести пароль так и остается висеть на экране.

Теперь вопросы (решение хотя бы одного из них очень поможет): ;-)

1. Как программно заставить винду показать рабочий стол юзера, который был на ней уже залогинен, то есть просто восстановить свое состояние обратно.

2. Как в это окошко программно ввести имя/пароль и нажать "OK"? Проблема в том, что это какое-то непростое окно (насколько я понял, это гордость микрософта, это такая супер защищенная область, к которой может иметь доступ лишь ядро), по FindWindow или EnumWindows его найти нельзя (даже если поиск производится из сервиса).

Вот такие вот задачи стоят :(
Помогите решить, может кто уже сталкивался...


 
VideoLord   (2004-09-21 19:06) [1]

P.S.
После слов "юзер логинится" нужна еще запятая :)


 
VideoLord   (2004-09-22 10:32) [2]

Неужели никто не сталкивался/не знает куда копать?

p.s.
Вверху лучше гораздо :)


 
Cobalt ©   (2004-09-22 12:33) [3]

Попробуй отключить службу "Fast User Switching"
Потому что на Win2K  - ситуация - сеанс работы пользователя домена.
Делаем финт ушами - с другого компа логинимся с "Remote Desktop Connection" под тем же пользователем - на окне того компа, к которому логинимся - никакого, понимаешь, мерцания. При отключении удалённого логина - тоже всё тихо и спокойно.


 
VideoLord   (2004-09-22 15:14) [4]

Не помогло. Все то же самое.

А как это выглядело, то есть и на консоли сервера, и на удаленой машине была одна и та же картинка рабочего стола и с обоих машин можно было курсором мыши и клавиатурой управлять?

Может быть, еще какая-то служба отвечает за удаленный рабочий стол?


 
Cobalt ©   (2004-09-22 23:20) [5]

Нет,"Remote Desktop Connection" создаёт полноценный сеанс - новый.
Попробуй почитать MSDN или добраться до Игоря Шевченко - бо я не знаю, что такое сеанс пользователя собственно.


 
VideoLord ©   (2004-09-23 12:23) [6]

Некоторые результаты:

По поводу 2 выяснилось, что это приглашение ввода пароля на самом деле есть несколько окошек на отдельном десктопе, причем то, что видит пользователь (картинка, две строки ввода) - это просто статическая картинка, на DC которой отрисовываются вводимые буквы и элементы анимации стиля XP

Поверх этой картинки лежит окно с классом SAS Window, невидимое, которое перехватывает события мыши и клавиатуры.
Никаких Edit"ов  и тому подобных оконных элементов здесь вообще нет, именно поэтому FindWindowEx и EnumWindows ничего не находят. Соответственно послать сообщение WM_CHAR/WM_KEYDOWN, чтобы ввести в нужное место логин и пароль некому...

Единственная программа на свете (из известных мне), которая умет что-то делать (перехватывать клавиатурный ввод, например) с окошком приглашения логина в систему - это PCACME. Ребята для этого написали драйвер уровня ядра, который загружается до процесса winlogon.exe и получает от этого какие-то преимущества. Разумеется, рассказывать, как они этого добились, они не хотят :)

Теперь по поводу пункта 1:
Когда юзер логинится в систему, для него создается WIN-машина, а в ней сразу три десктопа (активный рабочий стол, десктоп с логоном и десктоп для хранителя экрана). Есть функция, позволяющая получить хендл активного десктопа и переключаться между ними.
И она даже работает...  Частично :)
Можно переключиться с активного рабочего стола на какой-нибудь другой (либо на скринсейверовский, либо на логоновский), а вот обратно уже почему-то никак. Функция выполняется, никаких ошибок не выдает, только вот десктоп не переключается...

Игорь, ну где же вы? :)
Нужна ваша помощь!


 
Аноним   (2004-09-23 12:50) [7]

А ты уже изучил MSDN на темы winlgon и gina? Если нет, то читай, еще и в интернете где-то есть модуля с объявлениями для паскаля.


 
VideoLord ©   (2004-09-23 12:56) [8]

Да, мы тут уже третий день не вылезаем из MSDN :)
А заголовки для дельфи не особо принципиальны, мы сейчас на MS VS экспериментируем с этой задачей.


 
Аноним   (2004-09-23 13:01) [9]

Ну и что, научились программно логиниться?


 
VideoLord ©   (2004-09-24 16:19) [10]

Нет.
Видимо это нетривиальная задача...
Решили написать свой Remote Desktop. Это по трудозатратам гораздо эффективней :)


 
Анонимщик ©   (2004-09-24 16:49) [11]

Не знаю, сам я задачи в вашем виде не решал, но ведь и в msdn-е, и на rsdn-е есть примеры работы с gin-ой. И логин там производится на "ура".


 
Игорь Шевченко ©   (2004-09-27 10:44) [12]


> 1. Как программно заставить винду показать рабочий стол
> юзера, который был на ней уже залогинен, то есть просто
> восстановить свое состояние обратно.


Боюсь, что никак :) Это два разных сеанса.


 
WondeRu ©   (2004-09-27 14:24) [13]

VideoLord ©   (23.09.04 12:23) [6]
Поверх этой картинки лежит окно с классом SAS Window, невидимое, которое перехватывает события мыши и клавиатуры.
Никаких Edit"ов  и тому подобных оконных элементов здесь вообще нет, именно поэтому FindWindowEx и EnumWindows ничего не находят. Соответственно послать сообщение WM_CHAR/WM_KEYDOWN, чтобы ввести в нужное место логин и пароль некому...


Бредятина!!!!!!!!

читай 7 и 11 посты


 
VideoLord ©   (2004-10-04 02:53) [14]

WondeRu ©   (27.09.04 14:24) [13]

К сожалению, это именно так и реализовано.
msgina.dll перелопачена вдоль и поперек.
Пока что задача не решена...

P.S. У вас в Самаре все такие категоричные?



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

Форум: "WinAPI";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.073 c
14-1098547072
ДоздраПерМа
2004-10-23 19:57
2004.11.14
Сколько лет надо учиться программировать?


1-1099387163
Ozone
2004-11-02 12:19
2004.11.14
Hint


1-1099246811
Новиков_Н
2004-10-31 21:20
2004.11.14
StrAlloc...StrDispose


3-1098041327
Sid
2004-10-17 23:28
2004.11.14
Ошибка в Ibase- readonly table


14-1098016249
GanibalLector
2004-10-17 16:30
2004.11.14
Киев ???





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