2009-02-07 11 views
0

GINA에서 마스터를 찾는 것이 쉽지는 않지만 내 질문은 프로세스 간 통신 (IPC)과 가장 비슷하며 관리되지 않는 C++에서 사용자 정의 GINA를 작성했으며, 로그인을 시도 사용자에 대한 지문의 유효성이 기능은 C#으로 작성된 실행중인 시스템의 Windows 서비스에서 일부 메소드를 호출 코드는 다음과 같습니다로그인 방법 GINA를 사용하여 사용자 정의

Windows 서비스에서 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# 서비 스간에 통신하는 방법을 아는 사람이 있습니까?

감사합니다.

답변

4

정식 방법이라는 또 다른 API로 대체의로 (또는 대부분의 잠재적 세션/데스크탑 경계를 교차 할 필요가 IPC)는 명명 된 파이프는 것을 . 메일 슬롯을 사용할 수도 있지만 메일 슬롯 메시지가 설치된 모든 프로토콜에 속하기 때문에 중복 문제를 처리해야하기 때문에 일종의 태깅 시스템이 필요합니다. 다소 엉망입니다.

CreateNamedPipe에 대한 문서를보고 거기에서 나가십시오. 나는 C++과 C# 사이에서 파이프를 사용하여 대화를 나누었습니다. interop은 약간의 지저분한 (바이너리 메시지) 메시지를 처리 ​​할 수 ​​있습니다. C# 파이프 용 샘플 코드 (양쪽에서) here이 있습니다.

특정 서비스에 대한 파이프를 사용하여 통신 문제를 해결하는 데 좋은 점은 필요에 따라 나중에 UI를 지원하도록 디자인을 확장 할 수 있다는 것입니다.

+1

주의해야 할 점은 내가 추가 할 것 mailslots의 사용에 관해서는 그들이 보안 할 수 없다는 것입니다. 이것은 서비스 간 통신을 위해 종종 거래 차단기입니다. –

+0

그건 사실이야. 어쨌든 그가 그것을 사용해야한다고 생각하지 않는다. 나는 질문에 대답 할 때 난폭 한 완성 자다. –

1

명명 된 파이프를 사용하는 것이 좋습니다. C# 측에서 빠르고 쉽게 사용할 수 있으며 .NET 3.5 이상을 사용하고 C++ 측에서 비교적 쉽습니다 (많은 예제가 있음). 가장 중요한 것은 간단한 보안 설명자를 적용하여 보안을 매우 쉽게 유지할 수 있다는 것입니다.

0

제안 된 "답변"을 따르고 명명 된 파이프 경로를 시도했는지 궁금합니다. this link과 내 경험에 따르면 GINA는 미리 인증 된 (세션 0) 컨텍스트에서 작동하며 관리되지 않는 C++ GINA dll에서 Named Pipe에 액세스하려고하면 "액세스가 거부되었습니다"라는 오류 # 5가 발생합니다.

나는 메일 슬롯은 그 수준에서 실제로 사용할 수있는 유일한 사용 가능한 Windows IPC 메커니즘이 될 수있다 생각하지만, 나는 작동 할 수도 확실하지 않다 (이 시도하지 않은.)

+0

오, 그렇다. 로그온이 진행되는 동안 Windows 서비스가 계속 시작됩니다. 비 결정적 시작 시퀀스는 시스템이 최종 사용자에게 "빠릅니다"라고 느끼도록 도와줍니다. – hemp

+1

GINA는 SYSTEM 계정으로 실행됩니다. 이 계정은 다른 계정과 마찬가지로 명명 된 파이프에 대한 액세스 권한을 부여받을 수 있습니다. GINA가 활성화되었을 때 아직 시작되지 않은 서비스에 대한 요점은 좋은 편이지만 필요한 경우 GINA가 서비스를 기다리거나 (또는 ​​수동으로 시작하여) 쉽게 돌아 다니기가 쉽습니다. –

관련 문제