我正在做一个自定义包装的凭据提供程序。在这种情况下,我需要从更改密码方案中获取“新密码”字段字符串。据我了解,在用户从更改密码方案提交之后,将调用我的凭据提供程序中的GetSerialization函数,在那里我应该能够获取用户提交的字段的值。但是我不知道该怎么去。我遍历整个Google并出现堆栈溢出,但无法准确获得所需的信息。任何帮助将不胜感激。
HRESULT CSampleCredential::GetSerialization(
CREDENTIAL_PROVIDER_GET_SERIALIZATION_RESPONSE* pcpgsr,
CREDENTIAL_PROVIDER_CREDENTIAL_SERIALIZATION* pcpcs,
PWSTR* ppwszOptionalStatusText,
CREDENTIAL_PROVIDER_STATUS_ICON* pcpsiOptionalStatusIcon
)
{
HRESULT hr = E_UNEXPECTED;
if (_pWrappedCredential != NULL)
{
hr = _pWrappedCredential->GetSerialization(pcpgsr, pcpcs, ppwszOptionalStatusText, pcpsiOptionalStatusIcon);
}
logger->log(NORMAL,L"****************GetSerialisation**************\n");
return hr;
}
每当用户提交登录/解锁表单或更改密码表单时,我都会收到日志“*******获取序列化******”。应该有一些方法可以获取字段的值(我对新密码字段感兴趣)。要么应该有一些我可以访问这些值的字段ID(到目前为止,我找不到一个),要么这些值应该存储在我应该访问并获取值的某个缓冲区中,或者类似的东西。
最佳答案
包装的凭证将新密码序列化为CREDENTIAL_PROVIDER_CREDENTIAL_SERIALIZATION结构,准备好将其返回给Winlogon以便提供给LSA。您可以使用CredUnPackAuthenticationBuffer函数反序列化此结构-这将显示新密码是什么。