使用 Windows Vista 的凭据提供程序创造自定义的登录体验
2009-02-09 17:43:37 来源:WEB开发网混合凭据提供程序始终都会将 *pbAutoLogonWithDefault 输出参数设置为 TRUE。这用于向 LogonUI 发送通知,指示它应立即查询此提供程序的默认凭据以获得登录信息,而无需先向用户发送提示。请注意,通过使用可以存储在注册表中的密码自动登录信息(可选),内置的密码凭据提供程序也具有相同的功能。实际上,如果 Windows Vista 检测到该计算机上只有一个用户并且没有密码,则这就是默认行为。对于有多个凭据提供程序将 *pbAutoLogonWithDefault 设置为 TRUE 的情况,LogonUI 的行为尚不明确。
执行了 GetCredentialCount 调用之后,LogonUI 将调用 Provider::GetCredentialAt。对于混合凭据提供程序,此例程最多调用一次,它反映此提供程序的最大凭据计数。作为响应,提供程序会返回该凭据实例的一个与请求的索引对应的 ICredentialProviderCredential 指针。
接下来,LogonUI 调用 Provider::GetFieldDescriptorCount,提供程序通过此调用返回在其凭据中可以找到的 UI 元素的最大数目。例如,我的密码凭据提供程序示例有五个域:一个位图、一个用户名输入域、一个密码输入域、一个提交按钮和一个域名输入域。即使实际上这些元素从不显示,您仍可以看到混合凭据提供程序中保存了这些元素。这将完成图 5 中的步骤 11。
LogonUI 然后将为每个 UI 元素分别调用一次 Provider::GetFieldDescriptorAt,以便检索其类型。例如,执行了对应于位图索引的调用之后,该示例将返回 CREDENTIAL_PROVIDER_FIELD_TYPE CPFT_TILE_IMAGE。混合凭据提供程序中未使用的一个功能是与只读文本域相对的可写文本域。如果修改了混合凭据提供程序来提示用户输入智能卡 PIN,则此功能将通过 CPFT_PASSWORD_TEXT 来完成。可以显示从智能卡读取的用户名,以便提供某些上下文来提示用户输入信息。但就技术而言,用户名应为只读,因为它已绑定到同样存储在卡上的密码。因此,可能会使用 CPFT_LARGE_TEXT 字段类型(与 CPFT_EDIT_TEXT 相对)。(有关选项的完整列表,请参见 credentialprovider.h。)
更多精彩
赞助商链接