リムーバブルデバイスの挿入を検出し、NTサービスを使用してそのデバイスのドライブ文字を取得しようとしています。私はデバイスの挿入と取り外しを検出するのに成功しましたが、ドライブ文字、GUIDなどをボリュームから取得できるように、構造体をDEV_BROADCAST_VOLUME
に設定できませんでした。C++でWindowsサービスを使用してリムーバブルデバイスのデータを取得できない
case SERVICE_CONTROL_DEVICEEVENT:{
switch(evtype){
case DBT_DEVICEARRIVAL:{
DEV_BROADCAST_VOLUME *hdr = (DEV_BROADCAST_VOLUME*) evdata;
ofstream log ("C:\\log.txt", ios::app);
log << hdr->dbcv_devicetype;
log.close();
}
break;
上記のコードはコンパイルされ、正常に動作が、私はフラッシュドライブを挿入すると、(USBドライブが何であるかである)55555
とDBT_DEVTYP_VOLUME
の値としてhdr->dbcv_devicetype
ログは2
(hdr->dbcv_devicetype
が等しくなければならないように定義されます私はフラッシュドライブを挿入したのでDBT_DEVTYP_VOLUME
)。なんらかの理由でDBT_DEVTYP_VOLUME
が正しく初期化されていないか、または私がやっている何かが間違っています。私はVisual Studio 2011 C + +でWindows 7を使用しています。
から引き出さ? 「外部USBハードドライブ」と「内部USBハードドライブ」の違いは任意です。技術的には、 "ディスク"と "ボリューム"とドライブの定義は違います... LOCAL_SYSTEMはC:\がC:\ – Dan
と見なす必要はありません理想的には、ドライブ文字のマッピングはユーザー単位で管理されるため、ユーザーのコンテキストで行う必要があります。もしあなたがそれを行うことができれば、エクスプローラは既に大変な作業をしているので、作業を大幅に簡素化できます。 SHChangeNotifyRegister()への簡単な呼び出しを使用して通知を取得できます。 – Luke
@ルークそのアイデアはいいですが、まだマウントされていないドライブを検出しますか?たとえば、WindowsはLinuxファイルシステムをマウントしません。ユーザーにフォーマットを通知するだけです。 'SHChangeNotifyRegister()'は、 'E:\\'のようなドライブ文字にマウントされていなくても挿入を選ぶでしょうか? – user99545