0

GINA でマスターを見つけるのは簡単ではないことはわかっていますが、私の質問はプロセス間通信 (IPC) に最も近いものです。カスタム GINA をアンマネージ C++ で作成し、ユーザーの指紋の有効性をチェックするメソッドを含めました。ログインするには、この関数は、c# で記述された実行中のシステム Windows サービスで何らかのメソッドを呼び出します。コードは次のとおりです。

GINA で、アンマネージ C++

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

Windows サービスでは、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

4 に答える 4

4

サービス (ま​​たは、セッション/デスクトップの境界を越える必要がある可能性があるほとんどの IPC) と通信する標準的な方法は、名前付きパイプです。メールスロットも使用できますが、メールスロットメッセージはインストールされているすべてのプロトコルで複製されるため、複製の問題に対処する必要があります。そのため、何らかのタグ付けシステムが必要です...ちょっと面倒です.

CreateNamedPipe のドキュメントを参照して、そこから抜け出してください。私はパイプを使用して C++ と C# の間で話しました。(両側からの) C# パイプのサンプル コードがここにあります

特定のサービス間通信の問題にパイプを使用する利点は、必要に応じて後で設計を拡張して UI をサポートできることです。

于 2009-02-07T15:41:20.270 に答える
3

NISGINAは、NIS ディレクトリに対して認証を行うオープンソースの GINA プラグインです。これをまだ見ていない場合は、これが私が知っているオープンソースの GINA プラグインの唯一の例です。まだ行っていない場合は、このソース コードをよく読んでみる価値があるかもしれません。

Windows Vista の時点で、GINA は廃止され、 Credential Provider Architectureと呼ばれる別の API に置き換えられたことに注意してください。

于 2009-02-07T15:37:39.357 に答える
1

名前付きパイプを使用することを強くお勧めします。それらは高速で、.Net 3.5 以降を使用している場合は C# 側から簡単に使用でき、C++ 側からは比較的簡単に使用できます (多くの例が利用可能です)。そして最も重要なことは、単純なセキュリティ記述子を適用することで、セキュリティを非常に簡単に確保できることです。

于 2009-02-07T15:29:06.033 に答える
0

提案された「回答」に従って、名前付きパイプ ルートを試みたかどうかに興味がありますか? このリンクと私自身の経験の両方によると、GINA は事前認証済み (セッション 0) のコンテキストで動作し、管理されていない C++ GINA dll から名前付きパイプにアクセスしようとすると、エラー #5 "アクセスが拒否されました" が発生します。

そのレベルで実際に利用できる Windows IPC メカニズムは Mailslots だけかもしれませんが、それが機能するかどうかさえ確信が持てません (試したことはありません)。

于 2009-07-21T01:08:20.657 に答える