自定义Windows凭据提供程序崩溃,异常代码为:0xc0000374

时间:2018-02-26 06:50:00

标签: windows credential-providers

我开发了自定义凭据提供程序。该凭证提供者使用1)相机2)面部sdk来匹配用户。匹配用户后,将填充帐户名称并触发CredentialsChanged信号。我定制了samplehardwareeventcredentialprovider 实现这一功能。这适用于少数机器(所有窗口10)。当我尝试执行另一台机器(不同品牌)时,我随机获得以下异常并使屏幕变黑,不稳定登录屏幕。所有依赖关系都已到位,但根本不稳定。

enter image description here

我关闭了winbio服务,禁用了许多默认凭据提供程序,但我遇到了同样的问题。

我的流程:

我在CSampleCredential :: Initialize api中启动面部识别流程,一旦识别出来,就更新rgFieldStrings的值[SFI_USERNAME]

在下面的方法中,在完成CSampleCredential :: Initialize之后,我使用CSampleProvider :: OnConnectStatusChanged方法来触发登录窗口。如果一切正常,它会启动登录窗口,并自动填充用户名。整个流程工作文件,但在少数机器中不稳定。

HRESULT CSampleProvider :: SetUsageScenario(     __in CREDENTIAL_PROVIDER_USAGE_SCENARIO cpus,     __in DWORD dwFlags     )

我在这里做了一些根本错误的事吗?

任何指针都会有所帮助!感谢

1 个答案:

答案 0 :(得分:1)

我按照Steps to Catch a Simple “Crash Dump” of a Crashing Process

生成了localdump

通过分析日志,很明显存在堆损坏。错误地,malloc分配的大小为4.实际上,这个分配的大小应该是260.当访问超出此大小的内存时,它会根据输入数据触发随机崩溃。

带有错误的原始代码:

uint8_t * data =(uint8_t *)malloc(sizeof(MAX_PATH));

固定代码:

uint8_t * data =(uint8_t *)malloc(MAX_PATH * sizeof(uint8_t));