Здравствуйте, Tyro, Вы писали:
T>Hello, All.
T>Пытаюсь реализовать собственную gina.dll. Все функции переписаны по примеру из msdn. Добавлен код для возвращения LogonSID.
T>Фишка в том, что после логина имя юзера и пароль почему- то не сохраняются. T>Т.е. WlxLoggedOutSas возвращает указатель на заполненную структуру типа PWLX_MPR_NOTIFY_INFO. Но когда вызывается "родная" MS функция WlxDisplaySasNotice, выдается сообщение типа "Компьтер заблокирован только _____ или админ может разблокировать", то имя юзера отсутствует. Разблокировать не получается и плюс даже админ не может разблокировать.
А что значит родная? Она не должна быть родной, ее тоже нужно переписывать, все ф-и нужно переписывать, ну хотя бы заглушки ставить! Потому как в WlxInitialize ты формируешь свой контекст GINA из своей DLL и родные ф-и MS уже вызывать нельзя, так как у них контекст не сформирован!
Пытаюсь реализовать собственную gina.dll. Все функции переписаны по примеру из msdn. Добавлен код для возвращения LogonSID.
Фишка в том, что после логина имя юзера и пароль почему- то не сохраняются.
Т.е. WlxLoggedOutSas возвращает указатель на заполненную структуру типа PWLX_MPR_NOTIFY_INFO. Но когда вызывается "родная" MS функция WlxDisplaySasNotice, выдается сообщение типа "Компьтер заблокирован только _____ или админ может разблокировать", то имя юзера отсутствует. Разблокировать не получается и плюс даже админ не может разблокировать.
Конечно, WlxDisplaySasNotice и WlxWkstaLockedSas переписаны на свои. Под 2K- все нормально. Но в XP некоторые программы, которые используют БД связанную с аккаунтом юзера, не находят данные привязанные к этому аккаунту.
Интересно, профайл грузится (winlogon не выдает ошибки, что не может загрузить профайл), юзер десктоп для залогиненого юзера тоже на месте. С привилегиями тоже все нормально.
??????
Когда проверяю DACL, то залогиненный юзер выглядит как
None [CompName]\Administrator or None[CompName]\Users.
None даже не Anonimous.
Может у кого есть какие соображения по этому поводу? Поделитесь, pls.
Здравствуйте, .Mistery, Вы писали:
T>>Фишка в том, что после логина имя юзера и пароль почему- то не сохраняются. T>>Т.е. WlxLoggedOutSas возвращает указатель на заполненную структуру типа PWLX_MPR_NOTIFY_INFO. Но когда вызывается "родная" MS функция WlxDisplaySasNotice, выдается сообщение типа "Компьтер заблокирован только _____ или админ может разблокировать", то имя юзера отсутствует. Разблокировать не получается и плюс даже админ не может разблокировать.
M>А что значит родная? Она не должна быть родной, ее тоже нужно переписывать, все ф-и нужно переписывать, ну хотя бы заглушки ставить! Потому как в WlxInitialize ты формируешь свой контекст GINA из своей DLL и родные ф-и MS уже вызывать нельзя, так как у них контекст не сформирован!
Да все переписано и заглушки поставлены. Это работает.
Просто хочется разобраться, насколько правильно реализован алгоритм. Так вот когда комбинирую свои и "родные" функции, выходит, что нужно еще что- то делать.
И кстати по поводу контекста.
В msdn
typedef struct {
HANDLE hWlx;
LPWSTR station;
PWLX_DISPATCH_VERSION_1_3 pWlxFuncs;
HANDLE hDllInstance;
HANDLE UserToken;
} GINA_CONTEXT, *PGINA_CONTEXT;
Но во многих примерах GINA- контекст имеет тип PGlobals. И как раз член этой структуры pAccount.
Подскажите, pls, где можно посмотреть формат PGlobals.
T>Да все переписано и заглушки поставлены. Это работает.
T>Просто хочется разобраться, насколько правильно реализован алгоритм. Так вот когда комбинирую свои и "родные" функции, выходит, что нужно еще что- то делать.
Это всего лишь одна из возможных реализаций. Помимо обязательных параметров (обязательных тоже условно, просто они наиболее часто используются в ф-ях GINA ) ты можешь запихнуть туда любое кол-во данных которые тебе понадобятся!
T>Но во многих примерах GINA- контекст имеет тип PGlobals. И как раз член этой структуры pAccount.
T>Подскажите, pls, где можно посмотреть формат PGlobals.
T>>Да все переписано и заглушки поставлены. Это работает.
T>>Просто хочется разобраться, насколько правильно реализован алгоритм. Так вот когда комбинирую свои и "родные" функции, выходит, что нужно еще что- то делать.
M>Я немного не понял, что ты тут имел в виду?
А что здесь понимать. Вполне очевидно, что реальная msgina работает по несколько иному алгоритму и использует кучу недокументированных параметров. Потому и когда не все фунции переписаны, то полно глюков.
T>>И кстати по поводу контекста. T>>} GINA_CONTEXT, *PGINA_CONTEXT;
M>Это всего лишь одна из возможных реализаций. Помимо обязательных параметров (обязательных тоже условно, просто они наиболее часто используются в ф-ях GINA ) ты можешь запихнуть туда любое кол-во данных которые тебе понадобятся!
Ага, я и пытаюсь выяснить, что туда ms передает.
M>Что за PGlobals? кто такой?
Ага, тоже хотелось бы знать. По крайней мере ms туда пишет имя юзера, домен и т.п.
T>А что здесь понимать. Вполне очевидно, что реальная msgina работает по несколько иному алгоритму и использует кучу недокументированных параметров. Потому и когда не все фунции переписаны, то полно глюков.
Ну и бог с ним с ее алгоритмом. Конечно там будет много чего, ты же посмотри, MS GINA предоставляет довольно сложный графический интерфейс при аутентификации, кто ты думаешь это все рисует — MS GINA и рисует! Но касательно алгоритма взаимодействия GINA и winlogon — это уж остается неизменным, кто бы GINA не переписывал.
M>>Это всего лишь одна из возможных реализаций. Помимо обязательных параметров (обязательных тоже условно, просто они наиболее часто используются в ф-ях GINA ) ты можешь запихнуть туда любое кол-во данных которые тебе понадобятся!
T>Ага, я и пытаюсь выяснить, что туда ms передает.
А зачем тебе это нужно? В реализации MS GINA очень много всякой всячины, в том числе, как я говорил выше, и реализация GUI. Она может передавать туду кучу только ей одной понятных данных. Тебе то они зачем?
M>>Что за PGlobals? кто такой?
T>Ага, тоже хотелось бы знать. По крайней мере ms туда пишет имя юзера, домен и т.п.
Да где ты это увидел? Поделись!
А по поводу структуры WLX_MPR_NOTIFY_INFO которая заполняется в wlxLoggedOutSas, она конечно обязательная и NULL'ы там не прокатят, но к аутентификации пользователя, по большому счету, она никакого отношения не имеет. Winlogon использует эти данные для передачи сетевым провайдерам.
Здравствуйте, Tyro, Вы писали:
T>И кстати по поводу контекста. T>В msdn T>typedef struct { T> HANDLE hWlx; T> LPWSTR station; T> PWLX_DISPATCH_VERSION_1_3 pWlxFuncs; T> HANDLE hDllInstance; T> HANDLE UserToken; T>} GINA_CONTEXT, *PGINA_CONTEXT; T>Но во многих примерах GINA- контекст имеет тип PGlobals. И как раз член этой структуры pAccount. T>Подскажите, pls, где можно посмотреть формат PGlobals.
В WinXP используется PWLX_DISPATCH_VERSION_1_4 возможно по этому