Доброе всем время суток.
Тема WinLogon уже не раз поднималась на RSDN'е, и столкнувшись со своей проблемой, я первым делом просмотрел все ветки на предмет обсуждения работы с WinLogon. Но ничего из ранее обсуждаемого не смог применить для своей задачи
Задача следующая.
Имеется приложение (MFC, но я думаю что это неважно), которое получает данные от внешнего устройства (сканер штрих-кодов) и постит эти данные в активное приложение. С некоторых пор встал вопрос постить эти данные в окошко PASSWORD на WinLogon десктопе.
Действия следующие:
— Запуск программы под обычным десктопом;
— Смена пользователя;
— WinLogon.
Собственно вопрос: как можно получить дескриптор окна ввода пароля на WinLogon'е из потока, который был создан в Default десктопе?
Внимание, поток работает в обычном приложении, не сервисе.
Какие еще могут быть варианты управления элементами WinLogon десктопа из моего потока?
С уважением, Сергей.
don Alvares
Re: И снова о наболевшем: WinLogon проблема поиска окна
Здравствуйте, Alvares, Вы писали:
A>Доброе всем время суток. A>Тема WinLogon уже не раз поднималась на RSDN'е, и столкнувшись со своей проблемой, я первым делом просмотрел все ветки на предмет обсуждения работы с WinLogon. Но ничего из ранее обсуждаемого не смог применить для своей задачи A>Задача следующая. A>Имеется приложение (MFC, но я думаю что это неважно), которое получает данные от внешнего устройства (сканер штрих-кодов) и постит эти данные в активное приложение. С некоторых пор встал вопрос постить эти данные в окошко PASSWORD на WinLogon десктопе. A>Действия следующие: A>- Запуск программы под обычным десктопом; A>- Смена пользователя; A>- WinLogon. A>Собственно вопрос: как можно получить дескриптор окна ввода пароля на WinLogon'е из потока, который был создан в Default десктопе? A>Внимание, поток работает в обычном приложении, не сервисе. A>Какие еще могут быть варианты управления элементами WinLogon десктопа из моего потока?
A>С уважением, Сергей.
Я думаю что тебе надо смотреть в сторону Gina dll, если я правильно понял и ты хочешь реализовать custom авторизацию.
Re[2]: И снова о наболевшем: WinLogon проблема поиска окна
G>Я думаю что тебе надо смотреть в сторону Gina dll, если я правильно понял и ты хочешь реализовать custom авторизацию.
Мне нужно "просто" (или не очень ) получить доступ к элементам десктопа (дескриптор текстового поля).
don Alvares
Re[3]: И снова о наболевшем: WinLogon проблема поиска окна
G>>Я думаю что тебе надо смотреть в сторону Gina dll, если я правильно понял и ты хочешь реализовать custom авторизацию. A>Мне нужно "просто" (или не очень ) получить доступ к элементам десктопа (дескриптор текстового поля).
Чтобы получить доступ к этому десктопу тебе понадобится сервис и поток в нем, работающий на winsta0\winlogon десктопе — тогда из него ты сможешь выполнять операции вроде FindWindow для нужных тебе контролов.
Re[4]: И снова о наболевшем: WinLogon проблема поиска окна
G>Чтобы получить доступ к этому десктопу тебе понадобится сервис и поток в нем, работающий на winsta0\winlogon десктопе — тогда из него ты сможешь выполнять операции вроде FindWindow для нужных тебе контролов.
Если я правильно понял, то мне нужно в моем приложении запустить сервис, в нем создать поток, который потом сможет иметь доступ к контролам на WinLogon'е?
Хорошо, а как же тогда мое основное приложение будет передавать данные в окно пароля на WinLogon'е?
Цепочка следующая: приложение получает данные от сканера, затем проверяет наличие активного десктопа WinLogon, если находит его, то запускает сервис, в сервисе стартует поток, это поток принимает (каким-то образом) данные от приложение и постит их пассворд филд?
don Alvares
Re[5]: И снова о наболевшем: WinLogon проблема поиска окна
G>>Чтобы получить доступ к этому десктопу тебе понадобится сервис и поток в нем, работающий на winsta0\winlogon десктопе — тогда из него ты сможешь выполнять операции вроде FindWindow для нужных тебе контролов.
A>Если я правильно понял, то мне нужно в моем приложении запустить сервис, в нем создать поток, который потом сможет иметь доступ к контролам на WinLogon'е? A>Хорошо, а как же тогда мое основное приложение будет передавать данные в окно пароля на WinLogon'е? A>Цепочка следующая: приложение получает данные от сканера, затем проверяет наличие активного десктопа WinLogon, если находит его, то запускает сервис, в сервисе стартует поток, это поток принимает (каким-то образом) данные от приложение и постит их пассворд филд?
Получать данные от сканера может получится напрямую из сервиса?
Если нет, то вам нужно реализовать протокол взаимодействия между своим приложением
и сервисом, через пайпы, сокеты или что-то подобное.
Сервис ваще желательно запускать автоматически дабы не зависеть от юзер-приложения, которое может работать и под неадминским аккаунтом.
Re[6]: И снова о наболевшем: WinLogon проблема поиска окна
G>Получать данные от сканера может получится напрямую из сервиса?
Я не работал до этого с сервисами, так что прошу прощения за ламерский вопрос: можно ли сделать обычный поток (CreateThread) "сервисным"? Если да, и он сможет после такого перевоплощения работать в обычном режиме, то лучше G>Если нет, то вам нужно реализовать протокол взаимодействия между своим приложением G>и сервисом, через пайпы, сокеты или что-то подобное.
общение между приложением и сервисом возможно только посредством сокетов и пайпов? Какой наиболее благоприятный путь выбрать? G>Сервис ваще желательно запускать автоматически дабы не зависеть от юзер-приложения, которое может работать и под неадминским аккаунтом.
В какой момент запускать сервис?До логона?
don Alvares
Re[7]: И снова о наболевшем: WinLogon проблема поиска окна
G>>Получать данные от сканера может получится напрямую из сервиса? A>Я не работал до этого с сервисами, так что прошу прощения за ламерский вопрос: можно ли сделать обычный поток (CreateThread) "сервисным"? Если да, и он сможет после такого перевоплощения работать в обычном режиме, то лучше
Сервис — это отдельное приложение
G>>Если нет, то вам нужно реализовать протокол взаимодействия между своим приложением G>>и сервисом, через пайпы, сокеты или что-то подобное. A>общение между приложением и сервисом возможно только посредством сокетов и пайпов? Какой наиболее благоприятный путь выбрать?
МС рекомендует пайпы для общения приложений и сервисов на одном компьютере.
G>>Сервис ваще желательно запускать автоматически дабы не зависеть от юзер-приложения, которое может работать и под неадминским аккаунтом. A>В какой момент запускать сервис?До логона?
Если сервис зарегистрирован как автоматический, то он запускается системой во время ее старта.
Re[8]: И снова о наболевшем: WinLogon проблема поиска окна
Собственно возникает вопрос, а если будет активен FastUserSwitch, то как выбрать нужный логин и ввести для него пароль ?
Т.е. другими словами: имеем сервис, который запускается до процедуры аутентификации. Сервис ждёт некого события, допустим вставки usb брелка. Считывает оттуда информацию о логине и пароле. После чего надо чтобы эти данные использовались для входа в систему. Каким образом решить ? ОС — WinXP. Желательно без написания custom gina.dll.
Заранее спасибо.
Re: И снова о наболевшем: WinLogon проблема поиска окна
Здравствуйте, Alvares, Вы писали:
A>Задача следующая. A>Имеется приложение (MFC, но я думаю что это неважно), которое получает данные от внешнего устройства (сканер штрих-кодов) и постит эти данные в активное приложение. С некоторых пор встал вопрос постить эти данные в окошко PASSWORD на WinLogon десктопе.
А вы уверены, что это все нужно? Насколько я знаю, сканеры штрихкодов работают как аналог клавиатуры и достаточно просто SetFocus нужное окно и сканернуть что-нибудь.
Так что если Вам не нужно как-то полученные коды обрабатывать, то никаких прог и не требуется.
Re[2]: И снова о наболевшем: WinLogon проблема поиска окна
A>>Задача следующая. A>>Имеется приложение (MFC, но я думаю что это неважно), которое получает данные от внешнего устройства (сканер штрих-кодов) и постит эти данные в активное приложение. С некоторых пор встал вопрос постить эти данные в окошко PASSWORD на WinLogon десктопе.
D>А вы уверены, что это все нужно?
Можешь не сомневаться D>Насколько я знаю, сканеры штрихкодов работают как аналог клавиатуры и достаточно просто SetFocus нужное окно и сканернуть что-нибудь.
Тебя ввели в заблуждение. Сканер — это обычный девайс. Может подключаться как к USB, так и COM порту. И никто не будет постить данные от него кроме специальной программы. Эту программу пишу я SetFocus можно делать только тогда, когда ты имеешь доступ к окнам на десктопе. Как известно, из одного десктопа нельзя получить простой доступ к к онам другого Поэтому и возникла эта тема D>Так что если Вам не нужно как-то полученные коды обрабатывать, то никаких прог и не требуется.
Коды обрабатывать нужно, более того, существует целая система различных действий которые нужно совершить, получив определенный код. А код, еще и распарсить нужно, удалив техническую информацию прицепленную сканером. Но это все есть и работает на-ура, вопрос — передача данных в пассворд окно на WinLogon десктопе из приложения, запущенного на Default десктопе.
don Alvares
Re[8]: И снова о наболевшем: WinLogon проблема поиска окна
G>Сервис — это отдельное приложение
Можно ли переделать(запускать) существующее MFC приложение под сервис или необходимо писать отдельное приложение которое будет сложить шлюзом между десктопами?
G>МС рекомендует пайпы для общения приложений и сервисов на одном компьютере.
Хорошо, спасибо за подсказку.
G>Если сервис зарегистрирован как автоматический, то он запускается системой во время ее старта.
До WinLogon'а или после, до момента згрузки драйверов (конкретно USB драйвер) или после этого?
don Alvares
Re[9]: И снова о наболевшем: WinLogon проблема поиска окна
Здравствуйте, Alvares, Вы писали:
G>>Сервис — это отдельное приложение A>Можно ли переделать(запускать) существующее MFC приложение под сервис или необходимо писать отдельное приложение которое будет сложить шлюзом между десктопами?
MFC с сервисами не очень дружит — лучше писать отдельное приложение.
G>>МС рекомендует пайпы для общения приложений и сервисов на одном компьютере. A>Хорошо, спасибо за подсказку.
G>>Если сервис зарегистрирован как автоматический, то он запускается системой во время ее старта. A>До WinLogon'а или после, до момента згрузки драйверов (конкретно USB драйвер) или после этого?
После загрузки драйверов, после создания десктопа winlogon — фактически это момент когда
появился диалог логина в систему.
Re[10]: И снова о наболевшем: WinLogon проблема поиска окна
G>MFC с сервисами не очень дружит — лучше писать отдельное приложение. G>После загрузки драйверов, после создания десктопа winlogon — фактически это момент когда G>появился диалог логина в систему.
Спасибо за помощь, попытаюсь сварганить что-то похожее на сервис и проверить его работу с WinLogon.
Возможно, что скоро появятся новые вопросы.