使用 Windows Vista 的凭据提供程序创造自定义的登录体验
2009-02-09 17:43:37 来源:WEB开发网用户现在将看到登录屏幕。假定用户按了 Ctrl+Alt+Delete 并且每个提供程序都收到了 Provider::SetUsageScenario CPUS_LOGON 通知。这向提供程序表明,用户想进行交互式登录。现在,该混合凭据提供程序将尝试从所插入的任何智能卡中读取凭据。如果找到了一个可读的智能卡,会将一个 CHybridCredential 实例化并将其与当前的 CHybridProvider 关联。然后将有一个对 Credential::Initialize 的调用。 (请参见图 5 中的步骤 5 到 7。)
LogonUI 随后为每个加载的提供程序调用 Provider::Advise。Advise 的目的是为提供程序提供一种机制,将对可见的 UI 元素(当前还未创建)所做的任何预期的更改通知给 LogonUI。内置的智能卡提供程序给出了关于如何使用该机制的一个很好的例子。初始化之后,无论何时插入卡都会增大可用凭据数,而取出卡则会减小该数字。发生此类情况时,将通过这种机制通知 LogonUI:
ICredentialProviderEvents : public IUnknown
{
HRESULT STDMETHODCALLTYPE CredentialsChanged(
/* [in] */ UINT_PTR upAdviseContext);
};
为简单起见,混合凭据提供程序不对卡的插入和取出进行动态处理。因此,它不跟踪通过 Advise 传递给它的 ICredentialProviderEvents 接口。
LogonUI 执行的下一个接口调用是调用 Provider::GetCredentialCount,即图 5 中的步骤 9。如果创建了混合凭据(由于插入的智能卡),混合凭据提供程序将执行一些操作。它首先将 GetCredentialCount *pdwCount 输出参数设置为 1。该值指的是提供程序要枚举的凭据图块数。(混合凭据提供程序只能处理 1 个。)首次安装 Windows Vista 并加入域时,您可以根据显示的图块数推断 Microsoft 密码凭据提供程序将什么 pdwCount 值返回到 LogonUI。
更多精彩
赞助商链接