我正在尝试编写一个自定义Windows凭据提供程序。 我已经下载了V2凭证提供程序示例,并且可以构build,注册和使用它。
为了testing,我build立了一个hyper-v的Windows 8.1实例,并join了一个windowstesting域。
但是,自定义凭据提供程序仅显示在用户切片上,而不显示在“其他用户”切片上。
文档( 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,凭证提供程序仍然不会显示在“其他用户”磁贴上。
我错过了什么? 我需要更改什么才能使用“其他用户”磁贴上的凭证提供程序?
通常我会做web项目,所以我对Windows SDK有一点经验。
如果你正在使用这个例子,它总是初始化Initialize函数中的SID,所以这个代码总是将SID复制到函数的返回指针中,而不管你以后做了什么(在示例中_pszUserSid!= nullptr总是为真)。 如果你想拥有这个功能,并在“其他用户”下显示你的CP,那么身体应该不过是:
*ppszSid = nullptr; return S_FALSE;
如果您不希望将图块绑定到用户,则根本不需要实现ICredentialProviderCredential2,因为它只会添加此函数。 如果没有实现此界面,您的CP将始终显示在“其他用户”下。 实现ICredentialProviderCredential就足够了。