我正在做一个自定义包装的凭据提供程序。在这种情况下,我需要从更改密码方案中获取“新密码”字段字符串。据我了解,在用户从更改密码方案提交之后,将调用我的凭据提供程序中的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函数反序列化此结构-这将显示新密码是什么。

10-08 03:12