2

最近,我一直在研究 CredentialProvider,以便自动解锁(触发器可以是任何事件,因此假设计时器结束)Windows Vista(或更新版本)用户会话。

为此,我阅读了一些关于该主题的有用文章,即 GINA 和这个新架构之间的变化。http://msdn.microsoft.com/en-us/magazine/cc163489.aspx

我想,和大家在创建自定义 CredentialProvider 的过程中一样,我不是从头开始,而是从微软提供的示例代码开始。然后我尝试改变不同函数中的行为(比如日志记录)。

所以最后我可以使用自定义的 CredentialProvider,输入 SetUsageScenario 方法,但我仍然无法到达 Set 或 GetSerialization 方法。根据我在 CredentialProvider(仍由 Microsoft 提供)的技术文档中的理解,这两种方法应该被自动调用。有什么我错过的吗?

此外,我最初的想法是使用 Kerberos 获取身份验证包,以执行隐式用户身份验证。我是通过在其他 SO 或 MSDN 线程上寻找信息来得到这个想法的

这种方法是好的吗?

非常感谢您花时间回答我的问题。欢迎任何澄清,即使它们不能直接解决我的问题:-)

4

2 回答 2

1

首先 - 您需要在ICredentialProviderCredential::SetSelected(BOOL *pbAutoLogon)ICredentialProvider::GetCredentialCount方法的实现中将自动登录标志设置为 true。

接下来,您需要ICredentialProviderEvents::CredentialsChanged在计时器被击中时调用。LogonUI 将重新创建您的凭据,并且因为 autologon 设置为 true,它将调用您的GetSerialization()方法。

于 2012-12-27T18:51:43.447 回答
0

SetSerializationGetSerialization函数由您的提供者调用LogonUI

用户输入用户名/密码并按下 ENTER 按钮后,LogonUI 调用GetSerialization函数并提供一个指针,作为四个参数之一,该指针将指向CREDENTIAL_PROVIDER_CREDENTIAL_SERIALIZATION您创建和填充的结构,然后该结构将被发送LogonUIWinlogon执行验证。

我不知道如何让 LogonUIGetSerialization从您的凭据提供程序代码中调用,据我所知,您不能自己调用​​,GetSerialization因为如果没有人请求它,您将在哪里传递您的填充CREDENTIAL_PROVIDER_CREDENTIAL_SERIALIZATION结构,但只能LogonUI将其传递到Winlogon?

有一个名为“ Credential Provider Technical Reference ”的文档,您可以在其中阅读有关凭据提供程序的一些详细信息。在Shell samples 文件夹中有一个奇怪的文件夹,叫做“Autologon”,也许它会对你有所帮助!祝你好运!

于 2012-12-11T11:25:25.917 回答