【问题标题】:How to change the Domain Password for a user in LOCK scenario CPUS_UNLOCK_WORKSTATION condition in Custom Credential Provider in Windows 10如何在 Windows 10 的自定义凭据提供程序中更改用户在 LOCK 场景 CPUS_UNLOCK_WORKSTATION 条件下的域密码
【发布时间】:2021-09-18 20:47:39
【问题描述】:

我正在为 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, CPFS_DISPLAY_IN_SELECTED_TILE);  // Fails to load the field.

   hr =
_pCredProvCredentialEvents->SetFieldState((ICredentialProviderCredential*)this, 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 状态以重新激活用户输入字段。

标签: c++ credential-providers


【解决方案1】:

试试这个顺序:

  1. 首先尝试添加新字段。
  2. 将提交按钮重新定位到新字段之一。
  3. 隐藏旧字段。
  4. 返回CPGSR_NO_CREDENTIAL_NOT_FINISHED 状态以重新激活用户输入字段。

替代方案 - 尝试使用 SFI_PASSWORD 而不是 SFI_OLDPASSWORD

【讨论】:

  • 按照前 3 个步骤,我在凭据提供程序磁贴中显示了字段。当输入旧密码和新密码数据并单击提交按钮时,它调用了带有“cpus == CPUS_PASSWORD_CHANGE”子句的 GetSerialization(),在 CPUS_LOGON 条件下将旧密码更改为新密码。但我不了解重新激活用户输入字段的 CPGSR_NO_CREDENTIAL_NOT_FINISHED 状态。请详细说明LOCK场景的步骤,即发生CPUS_UNLOCK_WORKSTATION事件,该场景如何修改密码。
  • 有些误会。您的提供商是否在所有这些情况下调用:CPUS_LOGONCPUS_UNLOCK_WORKSTATIONCPUS_PASSWORD_CHANGE
  • 是的,My Provider 适用于所有 3 个指定场景 CPUS_LOGON、CPUS_UNLOCK_WORKSTATION 和 CPUS_PASSWORD_CHANGE。当我尝试使用我的 CP 解锁 (CPUS_UNLOCK_WORKSTATION) 系统时尝试更改密码时遇到问题。
猜你喜欢
  • 2015-11-18
  • 1970-01-01
  • 2019-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-26
  • 2011-09-07
  • 1970-01-01
相关资源
最近更新 更多