Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用GINA定制登录方法 我知道在吉娜中找一个主控主机并不容易,但是我的问题最接近进程间通信IPC,我在非托管C++中编写了我的自定义吉娜,我把它包含了一个检查用户指纹的有效性的方法,用户尝试登录,这个函数将调用一个运行在C中的系统Windows服务,守则如下:_C#_.net_Windows Services_Login_Ipc - Fatal编程技术网

C# 使用GINA定制登录方法 我知道在吉娜中找一个主控主机并不容易,但是我的问题最接近进程间通信IPC,我在非托管C++中编写了我的自定义吉娜,我把它包含了一个检查用户指纹的有效性的方法,用户尝试登录,这个函数将调用一个运行在C中的系统Windows服务,守则如下:

C# 使用GINA定制登录方法 我知道在吉娜中找一个主控主机并不容易,但是我的问题最接近进程间通信IPC,我在非托管C++中编写了我的自定义吉娜,我把它包含了一个检查用户指纹的有效性的方法,用户尝试登录,这个函数将调用一个运行在C中的系统Windows服务,守则如下:,c#,.net,windows-services,login,ipc,C#,.net,Windows Services,Login,Ipc,在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

在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
   }
}
谁知道如何在吉娜与Windows服务之间进行通信,或者简单地在C++写服务和C写服务之间进行通信。
谢谢

我强烈建议您使用命名管道。它们是快速、易于使用的C端,前提是您使用.NET 3.5或更高,并且相对容易从C++方面提供大量的例子。最重要的是,通过应用一个简单的安全描述符非常容易保护。

是一个开源的GINA插件,用于对NIS目录进行身份验证。如果你还没有看到这个,这是我知道的唯一一个开源GINA插件的例子。如果您还没有,那么您可能会发现仔细阅读这方面的源代码是值得的


请注意,从Windows Vista开始,并被另一个名为

的API取代。与可能需要跨越会话/桌面边界的服务或大多数IPC通信的规范方法是命名管道。您也可以使用mailslot,但您必须处理复制问题,因为mailslot消息在所有已安装的协议中都会被复制,因此您需要某种标记系统。。。有点乱

查看CreateNamedPipe的文档,然后从中找到解决方法。我用Cube和C++讨论了:互操作得到了一些凌乱的二进制消息,但是它是可行的。两边都有一些C管道的示例代码


对于特定的“服务到服务”通信问题,使用管道的好处是,如果需要,您可以稍后扩展设计以支持UI。

我很好奇您是否按照建议的答案尝试命名管道路径?根据我和我自己的经验,吉娜在预认证的会话0上下文中运行,并且从非托管C++吉娜DLL访问命名管道的任何尝试都会导致错误5被拒绝访问。
我相信Mailslot可能是唯一可用的Windows IPC机制,实际上在该级别上可用,但我甚至不确定它是否会起作用,我还没有尝试过。

关于Mailslot的使用,我要补充的唯一警告是,它们不安全,对于服务间通信,这通常是一个破坏交易的因素。这是真的。我并不认为他应该使用它们,我只是一个狂热的完美主义者,在回答问题时:-哦,是的,也不能保证你的服务在GINA dll启动时已经启动。Windows服务在登录过程中继续启动-不确定的启动顺序有助于最终用户更快地感受机器。您的GINA在系统帐户下运行。与任何其他帐户一样,可以授予此帐户访问命名管道的权限。当您的GINA被激活时,服务尚未启动这一点是很好的,但让您的GINA等待服务或根据需要手动启动服务相对容易。