ハードウェアの安全な取り外し ボリュームとアプリケーションのフラッシュ 【チュートリアル】


Safe Device

前回、USB接続のハードディスクやCD/DVDドライブ内のファイルをしようしているアプリケーションを表示しました。今回はSafe Deviceに以下の2つの機能を付け加えてみました。

2つほどボタンが追加されてます。

safe_device_window.gif

ちなみにアイコンも作ってみました。

safe_device_icon.gif
スポンサーリンク

ボリュームのフラッシュ

遅延書き込みのためのキャッシュがある場合、安全なデバイスの取り外しでエラーが出てしまうことがあります。この場合、このキャッシュをクリアする必要があります。今回の修正では、ハードディスクのボリューム全体をフラッシュすることでそれを実現してみました。

具体的には、Deviceリストでデバイスを選択し「Device Flush」を押します。

device_flush1.gif

この場合、OpenOffice.orgがディスク内のファイルを使用中のためエラー(Device Flush Error.)がでます。

device_flush2.gif

ただし、Explore.exeは消えて一部フラッシュしていることもわかります。

アプリケーションのフラッシュ

使用しているアプリケーションを調べた後は、安全なデバイスの取り外しのためにそのアプリケーションを閉じる必要があります。

Applicationリストからアプリケーションを選び「Window Flush」ボタンを押すとそのアプリケーションのウィンドウが最前面に表示されます。最小化(アイコン化)している場合もそのウィンドウが前に出てきます。沢山アプリケーションを開いている場合には、便利ではないでしょうか(リスト内のアプリケーションをダブルクリックでも動作します)。

このように、Explorer.exeを選んでWindow Flushを押すと

window_flush1.gif

前に出てきます。

window_flush2.gif
 

ダウンロード

Windows 2000、XP、Vistaあたりで動くのではないかと思います。最新版は、こちらからダウンロードして下さい。

なお、基本的使い方については、USBメモリ内のファイルを使用しているアプリケーションを調べるを参照して下さい。

プログラミングキーワード

その他、今回はWTLのCHyperLinkクラスを使ってみた。これは、なかなかよい。まぁ、自分で作っても当然作れるとは思うが、標準でこのようなものを用意してくれるのはありがたいですね。使い方は、CHyperLinkImpl::SubclassWindowでサブクラス化して、CHyperLink::SetHyperLinkではハイパーリング先を指定します。

DeviceIoControl、FSCTL_LOCK_VOLUME、FSCTL_UNLOCK_VOLUME、ShowWindowAsync

ボリュームのフラッシュは、MSDNのハードディスクのボリュームをフラッシュする方法を参考にしています。

スポンサーリンク
カテゴリー: チュートリアル   パーマリンク

ハードウェアの安全な取り外し ボリュームとアプリケーションのフラッシュ への1件のコメント

  1. ピンバック: Safe Device デッドロックの回避とマルチスレッド化 | 豆知識