编辑:已请求完整源代码。以下是一个简单的实现,以便复制错误。 内容枚举已被删除,但崩溃仍会在第一个对象调用时发生。在这种情况下,是WPD_DEVICE_OBJECT_ID对象。
CPP链接(错误开始于103行)
QMAKE.PRO链接(我正在使用Qt)
在我的项目中,我使用WPD API读取移动设备的内容。我完全按照API的要求实现了内容枚举。
但是,如果连接了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
返回了“失败”,然后我的程序崩溃了。
经过一些研究,我发现异常代码c0000417
意味着发生了缓冲区溢出?如果我错了,请纠正我,这是WPD API中的漏洞吗?如果是,我怎样才能提前检测到这个设备不是移动设备呢?
感谢您的时间!