Форум: "WinAPI";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];
ВнизПроблема с MsGina.dll Найти похожие ветки
← →
dreamse (2006-02-03 08:32) [0]Пишу обертку к Msgina.dll для безопасности.
Решил сделать прилоение , т.е все формы , управление и пр размещались в своей реализации Gina.dll
Проблема вот в чём :
После загрузки библиотеки и windows невозможно показать форму приложения на экране пользоватля. Происходит это потому что winlogin создаёт при загрузки 3 раб стола ( winlogin , Default и Screnserver )
Все окна которые может создавать Gina.dll ( регистрация пользователя в windows , диалоговое окно по Ctrl + Alt + del , и блокировка системы ) происзодят на раб столе winlogon т.е доступа к этим окнам получить пользователь не может :(
Есть ли какое нибудь решение каким именно образом позволить пользователю взаимодействовать с окнами из Gina.dll ?
( Разделять приложение на 2 exe не хочеться , так как поставлена задача организовать проложение в своей реализации Gina.dll )
Есть варианты ?
← →
kaZaNoVa © (2006-02-03 10:18) [1]выводить сообщения на декстопе юзера .. (как это умеет делать
MessageBoxEx
(MessageBoxEx(0,"Test","Fantastika !!!", MB_DEFAULT_DESKTOP_ONLY, 0);
;
или можно подгружаться к запущенным от имени пользователя программам (например Explorer) и от их имени уже делать ....
← →
dreamse (2006-02-03 10:32) [2]> kaZaNoVa © (03.02.06 10:18) [1]
Проблема в том чтобы выводить несообщения а формы ... :(
← →
Игорь Шевченко © (2006-02-03 10:57) [3]
> Есть ли какое нибудь решение каким именно образом позволить
> пользователю взаимодействовать с окнами из Gina.dll ?
Какой пользователь имеется в виду ? На момент работы gina пользователя еще нет, вроде ?
← →
dreamse (2006-02-03 12:19) [4]> Игорь Шевченко © (03.02.06 10:57) [3]
Обясню проще :
Есть приложение ( клиент - сервер ) одна часть приложения которым управляет администратор удалёно разрабатываеться в виде надстройки над MsGina.dll
Смысл в том чтобы сделать полноценое приложение для взаимодействием с пользователем ( окна ввода пароля , регистрация в системе ( не в windows а в своей системе , сетевой ) , настройка программы , иконка в трее ( например иконка тоже не появляеться так как окно программы создаёться на рабочем столе winlogon )
Есть юнит который должен по идее переключать приложение ( в данном случае надстройку над gina.dll ) на экран пользователя :
unit ServiceDesktop;
interface
function InitServiceDesktop: boolean;
procedure DoneServiceDeskTop;
implementation
uses Windows, SysUtils;
const
DefaultWindowStation = "WinSta0";
DefaultDesktop = "Default";
var
hwinstaSave: HWINSTA;
hdeskSave: HDESK;
hwinstaUser: HWINSTA;
hdeskUser: HDESK;
function InitServiceDesktop: boolean;
var
dwThreadId: DWORD;
begin
dwThreadId := GetCurrentThreadID;
// Ensure connection to service window station and desktop, and
// save their handles.
hwinstaSave := GetProcessWindowStation;
hdeskSave := GetThreadDesktop(dwThreadId);
hwinstaUser := OpenWindowStation(DefaultWindowStation, FALSE, MAXIMUM_ALLOWED);
if hwinstaUser = 0 then
begin
OutputDebugString(PChar("OpenWindowStation failed" + SysErrorMessage(GetLastError)));
Result := false;
exit;
end;
if not SetProcessWindowStation(hwinstaUser) then
begin
OutputDebugString("SetProcessWindowStation failed");
Result := false;
exit;
end;
hdeskUser := OpenDesktop(DefaultDesktop, 0, FALSE, MAXIMUM_ALLOWED);
if hdeskUser = 0 then
begin
OutputDebugString("OpenDesktop failed");
SetProcessWindowStation(hwinstaSave);
CloseWindowStation(hwinstaUser);
Result := false;
exit;
end;
Result := SetThreadDesktop(hdeskUser);
if not Result then
OutputDebugString(PChar("SetThreadDesktop" + SysErrorMessage(GetLastError)));
end;
procedure DoneServiceDeskTop;
begin
// Restore window station and desktop.
SetThreadDesktop(hdeskSave);
SetProcessWindowStation(hwinstaSave);
if hwinstaUser <> 0 then
CloseWindowStation(hwinstaUser);
if hdeskUser <> 0 then
CloseDesktop(hdeskUser);
end;
initialization
InitServiceDesktop; // Активируем
finalization
DoneServiceDesktop; // Деактивируем
end.
но толку от этого никакого , код не хочет выполняться и возращает постоянно False
← →
dreamse (2006-02-03 12:25) [5]Смысл приложения состоит вот в чём :
Нужно обеспечить максимальную безопасность в windows ( авторизация в системе по магнитным карточкам , отпечаткам пальцев и пр. Т.е все окна windows регистрации пользователей , Ctrl+alt+del нужно заменять на свои ) тут же управление с сервера , удалёное администрирование , и что самое важное взаимодействие с пользователем, блокировка компьютера и пр. )
Разделять программу на несколько составляющих ( отдельно безопасность , отдельно управление , отдельно интерфейс ) не желателен, так как сам видел систему работающую по такому же принципу ( т.е в одной библиотеке все функции )
← →
Игорь Шевченко © (2006-02-03 12:58) [6]dreamse (03.02.06 12:25) [5]
> Нужно обеспечить максимальную безопасность в windows ( авторизация
> в системе по магнитным карточкам , отпечаткам пальцев и
> пр.
Этим gina как раз и занимается.
> тут же управление с сервера , удалёное администрирование
А этим - нет. Может, не стоит нагружать Winlogon несвойственными ему функциями ?
← →
dreamse (2006-02-03 13:20) [7]> Игорь Шевченко © (03.02.06 12:58) [6]
> Этим gina как раз и занимается.
Знаю , по этому и работаю именно с ней
> А этим - нет. Может, не стоит нагружать Winlogon несвойственными ему функциями ?
Думаю всё таки придёться разделять проложение не составляющие :
1) Mygina.dll - своя обёртка на функции безопасности
2) Proga.exe - Сервис , администрирование
Mygina.dll <> Proga.exe - обмениваються сообщениями для синхранизации и управления...
Вопрос : как лучше сделать обмен сообщениями между приложениями выполдняющимися на одной машине ?
← →
Игорь Шевченко © (2006-02-03 13:56) [8]
> Вопрос : как лучше сделать обмен сообщениями между приложениями
> выполдняющимися на одной машине ?
NamedPipes ?
> Mygina.dll <> Proga.exe - обмениваються сообщениями для
> синхранизации и управления...
Этот момент я не совсем понимаю.
GINA - это обычная библиотека, загружается и работает с процессом WinLogon, я вижу причин, зачем какому-то приложению взаимодействовать с WinLogon, главная задача которого - пустить пользователя в систему.
← →
dreamse (2006-02-03 14:21) [9]> Игорь Шевченко © (03.02.06 13:56) [8]
> GINA - это обычная библиотека, загружается и работает с процессом WinLogon, я вижу причин, зачем какому-то приложению взаимодействовать с WinLogon, главная задача которого - пустить пользователя в систему.
Так же с помощью Gina.dll можно блокировать - разблокировать компьютер , менять пароль текущему пользвоателю и пр. Т.е возможностей много.
Спасибо за помощь.
← →
Игорь Шевченко © (2006-02-03 14:26) [10]
> Так же с помощью Gina.dll можно блокировать - разблокировать
> компьютер , менять пароль текущему пользвоателю
Не с помощью GINA, а с помощью Winlogon. Это же разные вещи.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.013 c