我使用了Microsoft的Credential Provider示例来组合默认Windows 7登录屏幕的包装。
就新CP而言,所有内容似乎都运行良好,但我的登录屏幕上出现了重复的图块,即默认的Windows图块和我的“包裹”图块。
如何删除默认的Windows磁贴,因为这不包含我的更改?
答案 0 :(得分:7)
有两种可能的解决方案:
1. 仔细查看提供商的 GetCredentialCount
功能。
如果包装现有提供商,在该功能中您应该获得一个计数来自底层提供者的证书(被包装的那个)并由您的凭据包装它们。也许,不知何故(由于代码中的逻辑错误),您可以制作几个重复的凭据。 (我从来没有写过包装器,但这种方法可能有意义)。
2. 另一种方法是通过实施 CredentialProviderFilter
界面来编写自己的 ICredentialProviderFilter
。
!
如果您查看HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication
注册表项,您会看到其他子项中有2个有趣的:Credential Providers
和Credential Provider Filters
。
那就是它在我的电脑上的样子:
在Credential Providers
下列出了Windows的所有凭据提供程序,其中包含您自己的凭据提供程序。 Credential Provider Filter
的想法是过滤除您的所有其他凭据提供者。您可以通过GUID
区分凭据提供商与其他凭据提供商。
实现这一点非常简单 - 您必须从ICredentialProviderFilter
接口实现一个方法。此方法为ICredentialProviderFilter::Filter
。
HRESULT MyProviderFilter::Filter(
CREDENTIAL_PROVIDER_USAGE_SCENARIO cpus,
DWORD dwFlags,
GUID *rgclsidProviders,
BOOL *rgbAllow,
DWORD cProviders)
{
UNREFERENCED_PARAMETER(dwFlags);
for (DWORD dwI = 0; dwI < cProviders; dwI++)
{
if (!IsEqualGUID(rgclsidProviders[dwI], myProviderGUID))
{
rgbAllow[dwI] = FALSE;
} else rgbAllow[dwI] = TRUE;
}
return S_OK;
}
因此,除了您的提供者之外,所有提供者都将被禁止。您可以在一个模块中实施ICredentialProviderFilter
和ICredentialProvider
。据我记得,Microsoft Windows SDK
中有一个凭证提供者过滤器样本。
祝你好运!