我正在尝试编写自定义Windows凭据提供程序。我已经下载了V2 credential provider sample,我可以构建,注册和使用它。
为了进行测试,我已经设置了一个hyper-v Windows 8.1实例并加入了一个窗口 测试域。
但是,自定义凭据提供程序仅显示在用户磁贴上,而不显示在“其他用户”上。瓦。
文档(Credential Provider Framework Changes in Windows 8.docx) 提供了一个小片段:
// Gets the SID of the user corresponding to the credential. HRESULT CSampleCredential::GetUserSid(__deref_out PWSTR *ppszSid)
{
*ppszSid = nullptr;
HRESULT hr = E_UNEXPECTED;
// _pszUserSid is a private member of CSampleCredential
if (_pszUserSid != nullptr)
{
// ppszSid will be freed by Logon UI
hr = SHStrDupW(_pszUserSid, ppszSid);
}
// Return S_FALSE with a null SID in ppszSid for the
// credential to be associated with an anonymous user tile.
else if (_fIsOtherUserTile)
{
hr = S_FALSE;
}
return hr;
}
我不确定' _fIsOtherUserTile'是来自。如果我忽略了这一点 并设置' hr'到S_FALSE,凭据提供程序仍未显示 '其他用户'瓦。
我错过了什么?我需要更改哪些内容,以便我可以在“其他用户”上使用凭据提供程序。瓦?
通常我会做网络项目,所以我对Windows SDK没什么经验。
答案 0 :(得分:0)
如果您正在使用该示例,它总是在Initialize函数中初始化SID,因此此代码将始终将SID复制到函数的返回指针中,而不管您之后执行的操作(_pszUserSid!= nullptr始终为true)在示例中)。如果您想拥有此功能并让您的CP显示在"其他用户"下,那么正文应该只是:
*ppszSid = nullptr;
return S_FALSE;
如果您不希望将您的磁贴绑定到用户,则根本不必实现ICredentialProviderCredential2,因为它只会添加此功能。如果未实施此界面,您的CP将始终显示在"其他用户"下。实现ICredentialProviderCredential就足够了。