提问人:smhh22 提问时间:9/25/2023 最后编辑:smhh22 更新时间:9/25/2023 访问量:66
自定义凭据提供程序在 UpdateRemoteCredential 和 SetSerialization 调用后终止的问题
Issue with Custom Credential Provider Terminating After UpdateRemoteCredential and SetSerialization Calls
问:
我目前正在开发一个自定义凭据提供程序,但遇到了一个令人困惑的问题。
具体来说,我在 和 方法上遇到了问题。调用这些方法后,我的凭据提供程序意外终止。这会导致在不使用以前的序列化的情况下显示登录屏幕。此外,即使是静态成员也会在此终止后重新初始化,这意味着我无法存储我在方法中获得的序列化。UpdateRemoteCredential
SetSerialization
SetSerialization
有趣的是,Windows 登录进程在调用 后成功调用。但是,之后不会调用该进程中的任何方法,另一个进程从重新初始化静态成员并重新初始化凭据提供程序和凭据提供程序凭据开始。SetUserArray
SetSerialization
如果不更改凭据,并且凭据将传递给默认的 Windows 密码提供程序,则登录过程将完美完成。但是,如果我将序列化重定向到我的凭据提供程序并将其存储在我的程序中,则在调用我的程序后会终止。UpdateRemoteCredentials
SetUserArray
即使我不做任何逻辑,这个问题仍然存在。SetSerialization
我正在寻找这两个方法的简单实现的工作示例,该示例将导致将传入的序列化重定向到我们的方法并存储序列化以在我们的方法中使用它。为简单起见,我们假设输入凭据(接收远程凭据)是从默认的 Windows 密码提供程序获取的。SetSerialization
GetSerialization
此外,我很好奇这两个方法(和)是否需要在两个不同的类中实现,或者是否可以在一个类中同时实现这两个方法。UpdateRemoteCredentials
SetSerialization
ICredentialProvider
ICredentialProviderFilter
目前,我正在使用 C#,使用 .但是,如果这样更有效,我愿意在 C++ 中实现它们。如果是这样,您能否提供有关如何从 C# 实现调用它们(包装它们)的指导?CredProvider.NET.Interop2
任何见解或建议将不胜感激!
编辑1:
我有一些可能有帮助的其他信息。以下是与该问题相关的部分日志:
{ "processId": "8576", "level": "TRACE", "method": "CredentialProvider.UpdateRemoteCredential"}
{ "processId": "8576", "level": "TRACE", "method": "CredentialProvider.Filter"}
{ "processId": "8576", "level": "TRACE", "method": "CredentialProvider.SetUsageScenario"}
{ "processId": "8576", "level": "TRACE", "method": "CredentialProvider.SetSerialization"}
{ "processId": "8576", "level": "TRACE", "method": "CredentialProvider.SetUserArray"}
{ "processId": "6492", "level": "TRACE", "method": "CredentialProvider.SetUsageScenario"}
从日志中可以明显看出,在调用该方法后,将初始化另一个进程,并在其上调用凭据提供程序的构造函数。我还注意到,调用的进程在完成 后永远不会出现在记录器中。SetUserArray
UpdateRemoteCredential
SetUserArray
我已经确认序列化已正确传递(由 CLSID 拦截并更改)。很遗憾,出于安全原因,我无法提供此验证的日志。但是,我可以确认 中的缓冲区内容与 的输入相同。SetSerialization
UpdateRemoteCredentials
SetSerialization
UpdateRemoteCredentials
无论具体错误如何,我都在寻找 和 在 C# 中实现的工作示例。我的目标是将传入的序列化(由 PasswordProvider 打包)重定向到我们的凭据提供程序,然后将此序列化存储在我们的程序中以用于 .UpdateRemoteCredentials
SetSerialization
GetSerialization
在我当前的实现中,序列化是存储的,但该过程不会调用该方法。此外,我们无权访问 中存储的序列化。任何指导或示例将不胜感激。GetSerialization
GetSerialization
我希望这些额外的信息和请求可以为我的问题提供更多背景信息。
答: 暂无答案
评论