2009-02-07 2 views
0

Я знаю, что найти в магистрате GINA непросто, но мой вопрос наиболее близок к Interprocess Communication (IPC), я написал свой собственный GINA в неуправляемом C++, я включил его в метод, который проверяет действительность отпечатков пальцев для пользователя попытаться войти, эта функция будет вызывать некоторый метод в работающей системе Windows Service написанной в C#, код следующим образом:Метод входа в систему с помощью GINA

в GINA, неуправляемые C++

if(Fingerprint.Validate(userName,finerprintTemplate) 
{ 
    //perform login 
} 

в окнах обслуживания , C#

public class Fingerprint 
{ 
    public static bool Validate(string userName, byte[] finerprintTemplate) 
    { 
     //Preform Some code to validate fingerprintTemplate with userName 
     //and retuen result 
    } 
} 

Кто-нибудь знает, как сделать такое общение между GINA и службой Windows, или просто между письменным сервисом C++ и письменной службой C#.

Thanks

ответ

4

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

См. Документы для CreateNamedPipe и проведите свой путь оттуда. Я разговаривал между C++ и C#, используя каналы: interop получил немного грязные (двоичные сообщения), но его способный. Есть пример кода для C# -трубок (с обеих сторон) here.

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

+1

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

+0

Это правда. Не то чтобы я думал, что он все равно должен их использовать, я просто безумный завершенный, когда дело доходит до ответа на вопросы :-) –

1

Я настоятельно рекомендую использовать именованные трубы. Они быстры, просты в использовании со стороны C#, при условии, что вы используете .Net 3.5 или выше и относительно легко со стороны C++ (с большим количеством доступных примеров). И самое главное очень легко защитить, применяя простой дескриптор безопасности.

3

NISGINA - это плагин GINA с открытым исходным кодом для аутентификации в каталоге NIS. Если вы еще этого не видели, это единственный пример плагина GINA с открытым исходным кодом, о котором я знаю. Если вы еще этого не сделали, вы можете найти, что стоит потратить время на изучение исходного кода.

Обратите внимание, что, как в Windows Vista, GINA has been deprecated и заменен другим API под названием Credential Provider Architecture.

0

Мне любопытно, если вы следовали предложенным «ответам» и пытались маршрут Именованной трубы? Согласно this link и моему собственному опыту, GINA работает в контексте, прошедшем проверку подлинности (Session 0), и любая попытка получить доступ к Именованной трубе из вашей неуправляемой DLL-библиотеки C++ GINA приведет к ошибке №5 «Доступ запрещен».

Я считаю, что может быть почтовые слоты единственный доступный механизм для Windows IPC, что на самом деле доступны на этом уровне, но я даже не уверен, что будет работать (не пробовал.)

+0

О да, также нет гарантии, что ваш сервис начнется еще в то время, когда сработает dll GINA. Службы Windows продолжают запускаться во время входа в систему - не детерминированная последовательность запуска помогает машине чувствовать себя «быстрее» для конечных пользователей. – hemp

+1

Ваш GINA работает под учетной записью SYSTEM. Эта учетная запись может быть предоставлена ​​для доступа к именованному каналу, как и любая другая учетная запись. Дело в том, что сервис, который не был запущен, когда активирован ваш GINA, является хорошим, но относительно легко обойтись, если ваш GINA ждет сервис (или вручную запустит его) по мере необходимости. –