EDIT:完全なソースコードが要求されました。以下はバグを再現するためのベアボーン実装です。 コンテンツの列挙は、が削除されますが、最初のオブジェクトのクラッシュは、とにかく呼び出します。この場合、WPD_DEVICE_OBJECT_IDオブジェクト。WPD APIデバイスが電話機かどうかを検出しますか?
LINK TO CPPは、私は、モバイルデバイスの内容を読み取るためにWPD APIを使用して、私のプロジェクトでは(私はQtのを使用しています)
(バグは、ライン103から始まります)。私は、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の脆弱性ですか?もしそうなら、私はこのデバイスがモバイルデバイスではないことをどのように事前に検出できますか?
ありがとうございました!
その内容の列挙の完全な機能を見ずに手助けするのは非常に難しいがない場合 – geekonedge
@kryptogeek遅れのために謝罪、何か他に取り組んでいた。私は問題を再現するスタンドアロンのC++アプリケーションを作成しました。この特定のTOSHIBA USBドライブが接続されていると、プログラムがクラッシュします。アンドロイド携帯電話が接続されている場合、すべて正常に動作します。 – mrg95