编辑:要求提供完整的源代码。下面是一个准系统实现,以复制该错误。删除了内容枚举,但是无论如何在第一个对象调用时都会发生崩溃。在这种情况下,WPD_DEVICE_OBJECT_ID 对象。
链接到 CPP(错误从第 103 行开始)
链接到 QMAKE.PRO(我正在使用 Qt)
在我的项目中,我使用WPD API来读取移动设备的内容。我遵循 API 到一个 tee 并成功实现了内容枚举。
但是,如果连接了 USB 驱动器,WPD API 有时也会将其检测为设备。无论如何,我的程序将继续进行内容枚举。我不想要那个。我只想列举移动设备。
问题是,在内容枚举期间,当我的程序尝试检索 USB 驱动器上对象的属性时,它会崩溃。以下是崩溃详情:
Problem Event Name: BEX
Application Name: UniversalMC.exe
Application Version: 0.0.0.0
Application Timestamp: 5906a8a3
Fault Module Name: MSVCR100.dll
Fault Module Version: 10.0.40219.325
Fault Module Timestamp: 4df2be1e
Exception Offset: 0008af3e
Exception Code: c0000417
Exception Data: 00000000
OS Version: 6.1.7601.2.1.0.768.3
Locale ID: 1033
Additional Information 1: 185e
Additional Information 2: 185ef2beb7eb77a8e39d1dada57d0d11
Additional Information 3: a852
Additional Information 4: a85222a7fc0721be22726bd2ca6bc946
崩溃发生在此调用上:
hr = pObjectProperties->GetStringValue(WPD_OBJECT_ORIGINAL_FILE_NAME, &objectName);
hr返回 FAILED 然后我的程序崩溃。
经过一番研究,我发现异常代码c0000417意味着发生了缓冲区溢出?如果我错了,请纠正我,但这是 WPD API 中的漏洞吗?如果是这样,我怎么能提前检测到这个设备不是移动设备?
谢谢你的时间!