Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Переключение между desktop-ами


Автор: Гест 18.4.2006, 01:01
Здравствуйте.

Что я имею ввиду...

В процессе авторизации в Win2k и далее возникает модальное окно с надписью "Нажмите CTRL+ALT+DEL..."
Мне нужно послать этому окну сообщение.
Но, насколько я знаю, Winlogon.exe, вызывающий это окно, работает в другом desktop-е (из соображений безопасности)

smile : как мне сказать своему приложению переключиться на этот desktop?

Может кто-нибудь уже сталкивался с этой задачей? Кусочек работоспособного кода был бы очень кстати... smile) 

Автор: _hunter 18.4.2006, 10:50
а смысл? ( точнее для чего это нужно -- может проблему другими способами решить можно )
 

Автор: adonin 18.4.2006, 10:57
Цитата(Гест @  18.4.2006,  01:01 Найти цитируемый пост)
другом desktop-е

Это как?  

Автор: Гест 18.4.2006, 11:09
Как - это не ко мне, а к Microsoft  smile .

А смысл в том, что пишу свой модуль авторизации в Винде (aka GINA), причем проводится проверка не только логина/пароля, но и, например, смарт-карты. Так вот, хочется сделать так, чтобы начать процесс ввода пароля можно было только после поднесения карты к считывателю, а не по нажатию клавиатуры. Поэтому надо отправить сообщение этому окну, а оно затем сгенерит SAS-событие 

Автор: _hunter 18.4.2006, 12:04
Цитата(Гест @  18.4.2006,  11:09 Найти цитируемый пост)
А смысл в том, что пишу свой модуль авторизации в Винде (aka GINA), причем проводится проверка не только логина/пароля, но и, например, смарт-карты. Так вот, хочется сделать так, чтобы начать процесс ввода пароля можно было только после поднесения карты к считывателю, а не по нажатию клавиатуры. Поэтому надо отправить сообщение этому окну, а оно затем сгенерит SAS-событие 

ну так перекрывай джину. зачем с диалогами корячиться?
http://www.osp.ru/win2000/2003/01/060_print.htm 

Автор: Гест 18.4.2006, 12:30
Читал. Есть и получше: 
http://msdn.microsoft.com/msdnmag/issues/05/05/SecurityBriefs/ 
http://msdn.microsoft.com/msdnmag/issues/05/06/SecurityBriefs/

Но!!!!
Цитата(Гест @  18.4.2006,  11:09 Найти цитируемый пост)
хочется сделать так, чтобы начать процесс ввода пароля можно было только после поднесения карты к считывателю, а не по нажатию клавиатуры. 


Усилю - не хочется, а надо. А для этого НАДО отправить сообщение этому диалогу. 

Автор: _hunter 18.4.2006, 13:03
уточню:
Цитата

Взаимодействие Winlogon и GINA

Как отмечалось выше, GINA представляет собой DLL, которая экспортирует ряд как обязательных, так и дополнительных функций. Первые необходимо реализовать в своей версии модуля, а для вторых в модуле Winlogon.exe имеется код по умолчанию, который будет выполнен, если библиотека не предоставит их реализацию.

Winlogon взаимодействует с GINA следующим образом:
вызывает экспортируемые GINA функции; 
передает сообщения в открытые GINA диалоги. Этот механизм рассматривается ниже, в разделе, посвященном диалогам в GINA; 
предоставляет GINA свой API; 
с помощью функции WlxSasNotify() принимает от GINA сообщения.

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

Автор: Гест 18.4.2006, 14:16
Все верно. Даже более того - все это сделано. Один нюанс. Поскольку я переделываю диалоги, следовательно и функции окна у меня должны быть свои. Именно функция окна вызывает WlxSasNotify. Проблема в том, как сказать этому окну, когда ему надо вызывать WlxSasNotify.

В принципе, есть наметки решения...

С помощью EnumDesktops получаешь список всех desktop-ов в системе, выбираешь нужный и переключаешься на него.
Попробовал - говорит Access denied. Возможные решения вновь возникшей проблемы? 

Автор: SergeCpp 18.4.2006, 14:27
А почему бы не использовать один из типов Interprocess Communications?

Типа Mutex etc.? Или QueueUserAPC ?

То есть, не оконными сообщениями...
 

Автор: _hunter 18.4.2006, 14:31
т.е. от извращений со столами мы ушли. а пришли мы к проблемы межпроцесного взаимодействия.
например http://forum.vingrad.ru/index.php?showtopic=83696 обсуждали подобный вопрос 

Автор: Гест 18.4.2006, 14:40
Хмммм... Можно попробовать... 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)