为V2 Credential Provider Sample添加多本地用户凭据提供者的问题
问题描述
我是Credential Provider领域的新手,从微软V2 Credential Provider示例入手学习。该示例仅为本地管理员账户添加自定义Credential Provider,我希望让所有本地账户都能使用它。
我参考了多个技术社区问题和开源仓库后,对代码做了如下修改,但仍未解决问题:
代码修改内容
在CSampleProvider.h中:
// 原代码 // CSampleCredential *_pCredential; // 修改后 std::vector<CSampleCredential*> _pCredential;
在CSampleProvider.cpp中:
CSampleProvider::~CSampleProvider() { // 原代码 // if (_pCredential != nullptr) // { // _pCredential->Release(); // _pCredential = nullptr; // } _ReleaseEnumerateCredentials(); ... } HRESULT CSampleProvider::GetCredentialCount(...) { ... // 原代码 // *pdwCount = 1; DWORD dwUserCount; _pCredProviderUserArray->GetCount(&dwUserCount); *pdwCount = dwUserCount; ... } HRESULT CSampleProvider::GetCredentialAt(...) { ... // 原代码 // if ((dwIndex == 0) && ppcpc) // { // hr = _pCredential->QueryInterface(IID_PPV_ARGS(ppcpc)); // } if ((dwIndex == 0) && ppcpc) { hr = _pCredential[dwIndex]->QueryInterface(IID_PPV_ARGS(ppcpc)); } ... } void CSampleProvider::_ReleaseEnumeratedCredentials() { DWORD dwUserCount; _pCredProviderUserArray->GetCount(&dwUserCount); if (!_pCredential.empty()) { for (DWORD i = 0; i < dwUserCount; i++) { _pCredential[0]->Release(); _pCredential.erase(_pCredential.begin()); } } } HRESULT CSampleProvider::_EnumerateCredentials() { HRESULT hr = E_UNEXPECTED; if (_pCredProviderUserArray != nullptr) { DWORD dwUserCount; _pCredProviderUserArray->GetCount(&dwUserCount); if (dwUserCount > 0) { for (DWORD i = 0; i < dwUserCount; i++) { ICredentialProviderUser *pCredUser; hr = _pCredProviderUserArray->GetAt(0, &pCredUser); if (SUCCEEDED(hr)) { _pCredential.push_back(new(std::nothrow) CSampleCredential()); if (_pCredential[i] != nullptr) { hr = _pCredential[i]->Initialize(_cpus, s_rgCredProvFieldDescriptors, s_rgFieldStatePairs, pCredUser); if (FAILED(hr)) { _pCredential[i]->Release(); _pCredential[i] = nullptr; } } else { hr = E_OUTOFMEMORY; } pCredUser->Release(); } } } } return hr; }
当前疑问
- 我了解到需要在
getUserSID()中返回不同的SID,但不知道如何正确实现。 - 修改后虚拟机环境出现崩溃,仍无法实现多本地用户适配。
- 想了解调试Credential Provider程序的方法。
内容的提问来源于stack exchange,提问作者stevenchucp
相关产品推荐
相关产品推荐

