こんにちは、阿久津です。昨日デスクトップコンピューターでSDカードを多用する場面に出会しました。同マシンにはSDカードスロットが備わっていないため、USB経由で接続するカードリーダーを併用しなければなりませんが、安価で購入したせいか、どうにも不可解な動作を引き起こします。

初回は正しくマウントし、SDカードへアクセスできますが、読み書きをして数十秒経つとカードリーダー自体がロスト。コンピューターのドライブアイコンが消えてなくなりますが、カードリーダーのアクセスランプは点灯したまま。すぐにイベントビューアでログを確認してみましたが、ディスクエラー以外の情報を見つけることはできませんでした。

再度USBポートにケーブルを接続しますと、レジストリ上にハードウェア情報が残っているせいなのか、マウント処理が正しく終了できなかったためなのかわかりませんが、今度は認識しなくなります。ただし、同じカードリーダーをサブマシンに接続した際は、初回認識ということもあってデバイスドライバーの自動導入後に使用可能になりますが、エラーが発生する症状は同じ。SDカード側の問題かとメディアを変更してみましたが結果は同じでした。

結構以前から悩まされている問題なのですが、SDカード自体を使う場面が少ないのと、SDカードスロットを備えるノート型コンピューターを併用中のため、SDカードをノート型コンピューターにセット→LAN経由でSDカードの内容をデスクトップコンピューターの共有フォルダーにコピー→デスクトップコンピューターで作業を行う、という流れで問題を回避しています。新しいカードリーダーを注文すれば済むのはわかっていますが、"面倒なことは後回し"するようになったのは歳をとったせいでしょうか。

さて、このカードリーダーと格闘している最中に多用したのが、ハードウェアの安全な取り外し機能。USBメモリーなどをコンピューターに接続しますと、通知領域に現れるアイコンです。Windows 9x時代から搭載されてきた機能ですので、お世話になった方も多いのではないでしょうか(図01~03)。

図01: 取り外し可能なストレージをコンピューターに接続しますと、通知領域にアイコンが加わります

図02: 同アイコンをクリックしますと、取り外し可能なデバイスがメニュー形式で表示されます

図03: 取り外したい項目をクリックすれば、ストレージデバイスがコンピューターから接続解除され、取り外し可能になります

Windows OSのチューニングに詳しい方ならご存じのとおり、同機能はRunDLL32.exeなどから実体である「hotplug.dll」ファイルを呼び出すことで、取り外し操作を行うダイアログを呼び出すことが可能です。そこで思いつくのが、本連載でも頻繁に登場するデスクトップのコンテキストメニュー。今回は同コンテキストメニューにハードウェアの安全な取り外しを追加するチューニングをお届けしましょう。

1.管理者権限で「regedit」を実行します。
2.レジストリエディターが起動したら、HKEY_CLASSES_ROOT\DesktopBackground\Shellキーを開き、HRemoveキーを作成します。
3.HRemoveキーを開いて、文字列値「Extended」を作成します。
4.文字列値「Icon」を作成し、データ値を「hotplug.dll,-100」に変更します。
5.文字列値「MUIVerb」を作成し、データ値を「ハードウェアの安全な取り外し」に変更します。
6.文字列値「Position」を作成し、データ値を「Bottom」の安全な取り外し」に変更します。
7.HRemoveキーの下にcommandキーを作成します。
8.commandキーを開き、文字列値「(既定値)」の値のデータを「control.exe hotplug.dll」に変更します。
9.[F5]キーを押してから、レジストリエディターを終了させます。

これでチューニングが終了しました(図04~22)。

図04: [Win]+[R]キーを押して「ファイル名を指定して実行」を起動し、テキストボックスに「regedit」と入力して<OK>ボタンをクリックします

図05: レジストリエディターが起動したら、HKEY_CLASSES_ROOT \ Background \ Shellキーを開きます

図06: Shellキーを右クリックし、メニューから<新規>→<キー>とクリックします

図07: キー名を「新しいキー #1」から「HRemove」に変更します

図08: HRemoveキーを開き、右ペインの何もないところを右クリックして、メニューから<新規>→<文字列値>とクリックします

図09: 値名を「新しい値 #1」から「Extended」に変更します

図10: 右ペインの何もないところを右クリックして、メニューから<新規>→<文字列値>とクリックします

図11: 値名を「新しい値 #1」から「Icon」に変更します

図12: 文字列値「Icon」をダブルクリックし、値のデータを「hotplug.dll,-100」に変更して<OK>ボタンをクリックします

図13: 右ペインの何もないところを右クリックして、メニューから<新規>→<文字列値>とクリックします

図14: 値名を「新しい値 #1」から「MUIVerb」に変更します

図15: 文字列値「MUIVerb」をダブルクリックし、値のデータを「ハードウェアの安全な取り外し」に変更して<OK>ボタンをクリックします

図16: 右ペインの何もないところを右クリックして、メニューから<新規>→<文字列値>とクリックします

図17: 値名を「新しい値 #1」から「Position」に変更します

図18: 文字列値「Position」をダブルクリックし、値のデータを「Bottom」に変更して<OK>ボタンをクリックします

図19: 今度はHRemoveキーを右クリックし、メニューから<新規>→<キー>とクリックします

図20: キー名を「新しいキー #1」から「command」に変更します

図21: 文字列値「(既定値)」をダブルクリックし、値のデータを「control.exe hotplug.dll」に変更して<OK>ボタンをクリックします

図22: 操作を終えたら[F5]キーを押してから<×>ボタンをクリックしてレジストリエディターを終了させます

早速動作を確認してみましょう。デスクトップの何もないところを[Shift]キーを押しながら右クリックしますと、コンテキストメニューに<ハードウェアの安全な取り外し>が加わります。同項目をクリックすれば、同名のダイアログが起動しますので、不要なデバイスを選択して<停止>ボタンをクリック。これで確認をうながすダイアログが現れますので<OK>ボタンをクリックしてください。デバイスの安全な取り外しが実行されました(図23~27)。

図23: チューニング後のコンテキストメニューですが、<ハードウェアの安全な取り外し>は表示されません

図24: [Shift]キーを押しながら呼び出したデスクトップのコンテキストメニュー。ご覧のとおり<ハードウェアの安全な取り外し>が加わります

図25: 同名のダイアログが起動します。取り外すデバイスを選択して<停止>ボタンをクリックしてください

図26: 確認をうながすダイアログが現れますので、<OK>ボタンをクリックします

図27: これでデバイスを取り外したことを示すバルーンが現れます

これでハードウェアの安全な取り外し機能も使いやすくなった、と思いましたが、そうはうまく行かないようです。今回のチューニングを検証していたところ、一部のデバイスは正しく取り外すことができません。筆者が確認した例では、USBメモリーなどに代表されるストレージ系USBデバイスで図29のようなエラーが発生しました(図28~29)。

図28: USBメモリーで検証中の画面。汎用ボリュームの取り外しを試してみました

図29: 取り外しの失敗を示すメッセージ。デバイスによっては正しく動作しないようです

通知領域に並ぶアイコンからの操作では問題なく取り外し操作を行えることを踏まえますと、Windows 7では「control.exe hotplug.dll」によるショートカット操作と前述の操作は、内部的な相違があるのかも知れません。もう少し検証を繰り返さないと確証を得ることはできませんが、簡易的なチューニングということで今回は紹介しました。なお、項目名を変更する場合は、ステップ05で作成した文字列値「MUIVerb」のデータ値を好みの内容に変更しましょう。また、本チューニングが不要になった場合はHRemoveキーを削除してください。

それでは、また次号でお会いしましょう。

阿久津良和(Cactus)