Safe Device
前回、USB接続のハードディスクやCD/DVDドライブ内のファイルをしようしているアプリケーションを表示しました。今回はSafe Deviceに以下の2つの機能を付け加えてみました。
2つほどボタンが追加されてます。
ちなみにアイコンも作ってみました。
ボリュームのフラッシュ
遅延書き込みのためのキャッシュがある場合、安全なデバイスの取り外しでエラーが出てしまうことがあります。この場合、このキャッシュをクリアする必要があります。今回の修正では、ハードディスクのボリューム全体をフラッシュすることでそれを実現してみました。
具体的には、Deviceリストでデバイスを選択し「Device Flush」を押します。
この場合、OpenOffice.orgがディスク内のファイルを使用中のためエラー(Device Flush Error.)がでます。
ただし、Explore.exeは消えて一部フラッシュしていることもわかります。
アプリケーションのフラッシュ
使用しているアプリケーションを調べた後は、安全なデバイスの取り外しのためにそのアプリケーションを閉じる必要があります。
Applicationリストからアプリケーションを選び「Window Flush」ボタンを押すとそのアプリケーションのウィンドウが最前面に表示されます。最小化(アイコン化)している場合もそのウィンドウが前に出てきます。沢山アプリケーションを開いている場合には、便利ではないでしょうか(リスト内のアプリケーションをダブルクリックでも動作します)。
このように、Explorer.exeを選んでWindow Flushを押すと
前に出てきます。
ダウンロード
Windows 2000、XP、Vistaあたりで動くのではないかと思います。最新版は、こちらからダウンロードして下さい。
なお、基本的使い方については、USBメモリ内のファイルを使用しているアプリケーションを調べるを参照して下さい。
プログラミングキーワード
その他、今回はWTLのCHyperLinkクラスを使ってみた。これは、なかなかよい。まぁ、自分で作っても当然作れるとは思うが、標準でこのようなものを用意してくれるのはありがたいですね。使い方は、CHyperLinkImpl::SubclassWindowでサブクラス化して、CHyperLink::SetHyperLinkではハイパーリング先を指定します。
DeviceIoControl、FSCTL_LOCK_VOLUME、FSCTL_UNLOCK_VOLUME、ShowWindowAsync
ボリュームのフラッシュは、MSDNのハードディスクのボリュームをフラッシュする方法を参考にしています。
ピンバック: Safe Device デッドロックの回避とマルチスレッド化 | 豆知識