Credential Provider V2 Combobox 意外行为

Credential Provider V2 Combobox unexpected behavior

我已经为 windows 10 开发我们公司的凭证提供程序将近一年了。

现在,我遇到了一个问题。我通常不会在论坛、博客上提问,因为在大多数情况下我都能找到解决方案,但这一次我已经为一个问题苦苦挣扎了一个月,现在我找到了问题的根源。

问题本身的简单描述:凭据提供程序使用了组合框,以前没有问题。现在,我重写了整个代码来管理一个大的更新,但是一个奇怪的错误进入了系统。该错误仅在特定情况下发生。我正在我的个人笔记本电脑上开发和测试代码。

场景:

1) 笔记本电脑已插入我的显示器/电源等

2) 我让它睡着了。

3) 我拔下所有电缆(包括电源)。

4)我把它从睡梦中唤醒。

然后,组合框没有显示默认的选定项目,它是空的。当我放下它时,它会显示所有必要的项目。然后 credprov 崩溃并重新启动,然后一切都很好。

我知道,在类似的 "strange" 场景中,在大多数情况下,内存泄漏或其他相关问题会导致问题。当我检查事件查看器时,它显示 c0000005,这是访问冲突。我开始调试违规的地方。比我发现该程序在非常高的索引处引用组合框项目列表数组(在我的例子中实际上是向量)(超出范围可能是违规的原因)。实际索引显然存储在 "selectedComboItemIndex" 变量 (DWORD) 中。

我很好奇它什么时候变成了这个奇怪的数字,然后我发现了一个意想不到的行为。 SetComboBoxSelectedValue 方法随机调用一次(当错误发生时),索引值非常高。我什至没有在我的代码中调用这个方法,所以我不知道为什么会调用它。即使我不下拉组合框也会发生调用。

我给它一个机会,它可能是 credprov 本身的一个错误。你怎么看?你以前见过这个问题吗?

提前致谢!

我通过停止使用 "SetSelected" 和 "SetDeselected" 方法解决了这个问题。此外,我过滤了 "SetComboBoxSelectedValue" 输入参数以仅接受有效数字。当index参数无效时,我记得同样的方法,将index参数替换为第一项(0)。