如何修复Windows 10更新错误0x80004005? (结论,可能是logIN 和 log的登陆页面认证有问题,即改函数的参数出错导致)
GetCredentialCount (理解来自上部分)
HRESULT GetCredentialCount(
DWORD *pdwCount,
DWORD *pdwDefault,
BOOL *pbAutoLogonWithDefault
);
参数解析:
pdwCount
类型:DWORD *
指向接收凭据计数的DWORD值的指针。
pdwDefault
类型:DWORD *
指向DWORD值的指针,该值接收要用作默认值的凭据的索引。如果未设置默认值,则应将此值设置为CREDENTIAL_PROVIDER_NO_DEFAULT。
pbAutoLogonWithDefault
类型:BOOL *
指向BOOL值的指针,指示pdwDefault标识的默认凭据是否应用于自动登录尝试。自动登录尝试意味着Logon UI或Credential UI将立即在提供程序的默认磁贴上调用GetSerialization。
重点
当Logon UI (登录界面相关的玩意(logonui 或者 logonui.exe))或Credential UI(凭证用户界面)准备好进行用户交互时,默认情况下会选择默认凭据。由于每个凭据提供程序都提供默认凭据,因此以下规则确定pdwDefault是否将获得焦点或是否将自动登录凭据。
- 如果已指定默认凭据,则该凭据不用于自动登录,pdwDefault用于自动登录,则pdwDefault将用作默认值。
- 如果pdwDefault来自上次登录的提供程序,并且还没有默认的自动登录,则pdwDefault将用作默认值。
- 如果未指定默认值,则将使用pdwDefault作为默认值。
如果有效凭据的数量发生更改,则凭据提供程序应在Advise中提供的ICredentialProviderEvents实例上 调用CredentialsChanged。
凭证提供商最佳实践
凭据提供程序处理极其敏感的用户机密,以便完成登录和解锁请求。作为最佳实践,应该非常小心地处理密码和PIN等秘密信息。在凭证提供程序中处理秘密信息的适当技术是:
- 始终安全地丢弃秘密。为此,请在释放用于保存任何机密的内存之前调用SecureZeroMemory。
- 使用后立即安全地丢弃秘密。
- 如果在预期的时间内未将秘密用于预期目的,则可以安全地丢弃这些秘密。
请确保二进制储存在指定的路径中,或者调试他以检查该二进制或相关的DLL文件
HRESULT错误码 (vs,工具,错误码 )
S_OK 操作成功 0x00000000
S_FALSE 函数调用成功 #define S_FALSE ((HRESULT)1L)
E_UNEXPECTED 意外的失败 0x8000FFFF
E_NOTIMPL 未实现 0x80004001
E_OUTOFMEMORY 未能分配所需的内存 0x8007000E
E_INVALIDARG 一个或多个参数无效 0x80070057
E_NOINTERFACE 不支持此接口 0x80004002
E_POINTER 无效指针 0x80004003
E_HANDLE 无效句柄 0x80070006
E_ABORT 操作已中止 0x80004004
E_FAIL 未指定的失败 0x80004005
E_ACCESSDENIED 一般的访问被拒绝错误 0x80070005
进一步排查中