EDIT: запрошен полный исходный код. Ниже приведена реализация barebones для репликации ошибки. Перечисление содержимого удаляется, однако авария в любом случае вызывает обход первого вызова объекта. В этом случае объект WPD_DEVICE_OBJECT_ID.
LINK TO 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
возвращает FAILED, а затем моя программа вылетает.
После некоторых исследований я обнаружил, что код исключения c0000417
означает переполнение буфера? Исправьте меня, если я ошибаюсь, но является ли это уязвимостью в WPD API? Если да, то как я мог заранее обнаружить, что это устройство не является мобильным устройством?
Спасибо за ваше время!