[OS:VirtualBox上のWinXP、HostOS:win7]
私たちはミニフィルタードライバーを開発しており、いくつかの条件に基づいてUSBデバイスのマウントをブロックしようとしています。
ミニフィルターはIRP_MJ_VOLUME_MOUNT
、USBドライブが挿入されるたびに監視し、pre-callback
FltSendMessageを使用してドライブのマウントを許可するかどうかをユーザーランドに尋ねます。ユーザーランドではFltGetMessage
、前後FltReplyMessage
に特定の条件がチェックされ、対応する値がドライバーに返されます。
これはすべて正常に機能していますが、2つの問題が発生しているか、不便を感じています。
状態確認には約4〜5秒かかります[データはネットワーク経由で送受信されます]。この期間中、Windowsエクスプローラーはハングします。そして、ナビゲーションなどのアクション
FltReplyMessage
は、呼び出されるとすぐに実行されます。スタートメニューなどをクリックしても、FltReplyMessage
が呼び出されるまで何も起こりません。VLCなどの他のアプリケーションは通常機能します[つまり、ディスクにアクセスできます]。USBドライブがボリュームのマウントを許可されていない場合、ボリュームのマウントを数回試行し続けます。
使用した回避策は、最近挿入されたデバイスのリストを維持し、GUIDがリストに存在する場合はそれらを拒否することです。マウントポイントはを使用して削除できることをどこかで読みDeleteVolumeMountPoint
ました。将来そのデバイスを許可する必要がある場合は、デバイスに送信MOUNTDEV_UNIQUE_ID
して取得できるデバイスの一意のIDを含むregキーを削除する必要があります。これを達成しようとしましたが、一意のIDを正しく取得できませんでした。[構造に十分なメモリを割り当てることができませんでしたMOUNTDEV_UNIQUE_ID
。試しnew
てみmalloc(enough size)
ましたが、sizeof(varUniqueID)
4だけ返され、DeviceIoControl
その結果、「より多くのデータが利用可能です」というエラーが発生しました。私たちはユーザーランドでやっています。これはカーネルで行う必要がありますか?]
ふぅ!長い投稿!
私たちは本当に私たちが得ることができるどんな助けにも感謝します!
乾杯!