ハードウェアの取り外し

解決


mgr  2009-12-08 19:55:39  No: 102112

以下についてご指導を頂きたく、宜しくお願い致します。

環境
  Windows 2000 Pro SP4
  VB 6.0 SP6

内容
  フォームから任意のボタン押下で
    ・使用されているデバイスの取得
    ・デバイス(USB)の取り外し
  を行う。

現状
  上記、内容は実現可能でしょうか。
  調べていますが....(ToT)/~~~
  可能であれば、参考となるサイト等を
  教えていただければ助かります。


魔界の仮面弁士  2009-12-08 22:17:23  No: 102113

> ・使用されているデバイスの取得
> ・デバイス(USB)の取り外し
「ハードウェアの安全な取り外し」を必要としない USB デバイスも対象とするのでしょうか?

> 上記、内容は実現可能でしょうか。
とりあえず、CM_Request_Device_Eject について調べてみるとか。
http://msdn.microsoft.com/en-us/library/ms790831.aspx


オショウ  2009-12-08 22:50:07  No: 102114

ストレージデバイスの場合、書き込み終了後の遅延書き込み時間がある
ので、即、反映(フラッシュ)させたい場合は、Ejectさせる前に・・・

CreateFileでドライブを開き
DeviceIoControlで、FSCTL_LOCK_VOLUME を実行する。
この際にキャッシュに残っている情報がストレージに書き込まれる。
DeviceIoControlで、FSCTL_UNLOCK_VOLUMEを実行し、CloseHandle
してからEjectを実行する手順になります。

※  遅延書き込みはデフォルトで5秒くらいだったような・・・
    5秒待てばOS側の処理でフラッシュされますが・・・
    待てないなら上記を実行!
    ただし、どのみちFSCTL_LOCK_VOLUMEを実行した際、フラッシュ
    が終わるまで命令がブロックされるので、大容量のバッファを
    もったストレージの場合は、それなりの時間がかかります。

以上。参考まで


mgr  2009-12-09 08:53:39  No: 102115

書き込み、ありがとうございます。

現段階では、USB接続されている全てのデバイスを取得し、
どこまで切り分けできるか確認したいと思っています。

ご指導して頂いた情報から、実現可能と思います。

後は、私のレベル次第かと...(^^ゞ

ある程度、時間が必要と思いますので、
とりあえず、解決とさせて頂きます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加