Форум: "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