问题描述
我正在为 Windows 10 系统编写 C++ 自定义凭据提供程序。 我在cpuS_logoN场景中成功更改域用户密码,当密码在
过期时ntsstatus == STATUS_PASSWORD_MUST_CHANGE
情况发生在
凭据:: ReportResult()
但是在LOCK场景,即cpuS_UNLOCK_WORKSTATION中,我无法加载
的“PasswordchangeUI”编辑字段旧密码、新密码和确认密码
在凭据提供程序的磁贴上。
我正在使用以下代码加载这些组件。
HRESULT hr; ICredentialProviderCredentialEvents*
_pCredProvCredentialEvents;
hr =
_pCredProvCredentialEvents->SetFieldState((ICredentialProviderCredential*)this,SFI_LOGIN_NAME,CPFS_HIDDEN); // successfully hides the field.
hr = _pCredProvCredentialEvents->SetFieldState((ICredentialProviderCredential*)this,SFI_PASSWORD,CPFS_HIDDEN); // successfully hides the field.
hr =
_pCredProvCredentialEvents->SetFieldState((ICredentialProviderCredential*)this,SFI_OLDPASSWORD,CPFS_disPLAY_IN_SELECTED_TILE); // Fails to load the field.
hr =
_pCredProvCredentialEvents->SetFieldState((ICredentialProviderCredential*)this,SFI_NEWPASSWORD,SFI_CONFPASSWORD,CPFS_disPLAY_IN_SELECTED_TILE); // Fails to load the field.
在上面的代码中,我成功隐藏了 SFI_LOGIN_NAME 和 SFI_PASSWORD 字段, 但我无法显示 SFI_OLDPASSWORD、SFI_NEWPASSWORD 和 SFI_CONFPASSWORD。
如果有人能帮助解决这个问题,我将不胜感激。
问候 阿斯拉姆
解决方法
试试这个序列:
- 首先尝试添加新字段。
- 将提交按钮重新定位到新字段之一。
- 隐藏旧字段。
- 返回
CPGSR_NO_CREDENTIAL_NOT_FINISHED
状态以重新激活用户输入字段。
替代方案 - 尝试使用 SFI_PASSWORD
而不是 SFI_OLDPASSWORD
。