凭据提供程序V2组合框的意外行为

时间:2018-12-09 20:46:10

标签: authentication combobox windows-10 winlogon credential-providers

我一直在为Windows 10开发我们公司的证书提供程序。

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

问题本身的简要说明:凭据提供程序使用了一个组合框,该组合框以前可以正常工作。现在,我重写了整个代码来管理一个大的更新,但是系统中出现了一个奇怪的错误。该错误仅在特定情况下发生。我正在用个人笔记本电脑开发和测试代码。

场景:

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

2)我让它入睡。

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

4)我从睡眠中唤醒。

然后,组合框不显示默认的选定项目,它为空。当我将其放下时,它会显示所有必要的项目。比credprov崩溃并重新启动,一切还好。

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

我很好奇它何时更改为这个奇数,而不是意外的行为。 SetComboBoxSelectedValue方法被随机调用一次(错误发生时),索引值异常高。我什至没有在代码中调用此方法,所以我不知道为什么调用它。即使我没有下拉组合框,电话也会发生。

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

提前谢谢!

1 个答案:

答案 0 :(得分:0)

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