最近,我一直在使用CredentialProvider来自动解锁(触发器可以是任何事件,所以让我们说一个计时器的结束)一个Windows Vista(或更新版本)的用户会话。
为此,我读了一些有关这个主题的有用的文章,GINA和这个新架构之间的变化。 http://msdn.microsoft.com/en-us/magazine/cc163489.aspx 。
我想,就像创build自定义CredentialProvider的每个人一样,我并没有从头开始,而是从Microsoft提供的示例代码开始。 然后我试图改变不同function中的行为(如日志logging)。
所以最后我可以使用自定义CredentialProvider,inputSetUsageScenario方法,但仍然无法访问Set或GetSerialization方法。 从我在CredentialProvider的技术文档(Microsoft仍然提供)上理解的这两个方法应该自动调用。 有什么我错过了吗?
另外,我最初的想法是获得使用Kerberos的authentication软件包,以便执行隐式用户authentication。 我通过寻找其他SO或MSDN线程的信息得到了这个想法
这种方法是好的吗?
非常感谢您的时间回答我的问题。 任何澄清都欢迎,即使他们不直接解决我的问题:-)
首先 – 在ICredentialProviderCredential::SetSelected(BOOL *pbAutoLogon)
和ICredentialProvider::GetCredentialCount
方法的实现中,需要将ICredentialProviderCredential::SetSelected(BOOL *pbAutoLogon)
标志设置为true。
接下来,当你的计时器被击中时,你需要调用ICredentialProviderEvents::CredentialsChanged
。 LogonUI将重新创建您的凭据,并且由于自动登录设置为true,它将调用您的GetSerialization()
方法。
LogonUI
从您的提供者调用SetSerialization
和GetSerialization
函数。
用户输入用户名/密码并按ENTER按钮后,LogonUI调用GetSerialization
函数,并提供一个指针作为四个参数之一,将来会指向由您创建并填充的CREDENTIAL_PROVIDER_CREDENTIAL_SERIALIZATION
结构,然后这个结构将从LogonUI
到Winlogon
来执行身份验证。
我不知道如何使LogonUI从您的凭据提供程序代码中调用GetSerialization
,并且据我所知,您不能通过您自己的方式调用GetSerialization
,因为如果没有人请求,您将传递填充的CREDENTIAL_PROVIDER_CREDENTIAL_SERIALIZATION
结构,但只有LogonUI
可以路径到Winlogon
?
有一个名为“ 证书提供者技术参考 ”的文档,您可以阅读关于凭证提供者的一些细节。 在Shell样本文件夹中有一个名为“Autologon”的奇怪文件夹,也许它会帮助你! 祝你好运!