[PR]今日のニュースは
「Infoseek モバイル」
| English | Japanese |
Author: Ken Kato
Mail: chitchat<DOT>vdk<AT>gmail<DOT>com |
仮想な背中
仮想な背中 > Virtual Floppy Drive
Virtual Floppy Drive 2.1
Windows NT / 2000 / XP 用の仮想フロッピドライブです
(2003 Server、Vista でも動くとの報告をいただいています)。
注意 !!! 32 ビット OS でのみ動作します !!!
64 ビットコンパイルに関する情報はこちら。
フロッピイメージファイルを仮想フロッピドライブとしてマウントし、
直接ファイルの中身にアクセスすることができます。仮想フロッピ上のファイル表示、編集、
リネーム、削除、作成、仮想フロッピのフォーマット、仮想フロッピからのプログラム起動、
など実際のフロッピでできることは大抵できます。
最新版は 2.1.2008.206 です。
2.1.2005.404 からの変更点
- 使用している zlib を 1.2.2 から 1.2.3 にバージョンアップしました。
旧バージョン zlib のセキュリティホールについて忠告してくれた Stefan Kanthak 氏に感謝。
- イメージの新規作成の方法がわかりにくかったようですので、VfdWinの「開く」ボタンのテキストを
「開く/新規」に変更しました。
- 64ビットOSでは起動しないよう、プラットフォームチェックを追加しました。
- バージョン表示にビルド番号(VFDの場合はビルド年月日ですが)も表示するようにしました。
今回の変更ではメジャー・マイナーバージョンを2.1のままにしておくことにしたので...。
デバイスドライバには一切変更はありません。
2.0 RC からの主な変更点
- 名称を "Virtual Floppy Driver" から "Virtual Floppy Drive"
に変更しました。
些細なことに見えるかもしれませんが、この方が適切だと思うので...
ドライバがこのプログラムの核であることに変わりはありませんが、
インターフェースプログラムの方もかなり重要な役割を占めるようになってきたので。
- 仮想フロッピイメージをファイルに保存できるようになりました。
更新された RAM ディスクイメージを保存したり、
ファイルからマウントされたイメージを別ファイルに保存したりできます。
- 640KB, 720KB, 1.2MB メディアで、3.5 インチメディアと
5.25 インチメディアを使い分けられるようになりました。
- ファイルサイズと異なるメディアが指定できるようになりました。
例えば 1.44 MB のファイルを 1.2MB メディアとして使用したり、
一部のフロッピバックアッププログラムが作成するような、
末尾に追加データのついたファイルを使用することができます。
- ドライバを再インストールせずに開始方法を変更できるようになりました。
- VFD.EXE のコマンドにプロンプトを抑制するオプションを追加しました。
途中で入力待ちをさせずにバッチ処理を行うことができます。
- VFD.EXE に対話式コンソールモードを追加しました。
- Windows 2000 以降でのマウントマネージャ対応をやめました。
ドライバを一度停止すると再起動できないという問題の原因となっていたようです。
ドライバがプラグ&プレイ完全対応になったときに復活させるかもしれません。
その他 2.x の主な特長
- 二つの仮想フロッピドライブ
- ファイルモードと RAM モード
ファイルモードでは、イメージファイルを直接仮想フロッピとしてマウントします。
仮想フロッピ内のデータ変更は即座にファイルに書き込まれます。
RAM モードではイメージファイルのコピーをRAM上に作成してマウントします。
読み取り専用ファイルでも、書き込み可能メディアとして開くことができます。
変更はイメージファイルには書き込まれず、イメージクローズ時に破棄されます。
- WinImage 圧縮イメージ (*.IMZ) の読み込みをサポートします。
ただし RAM ディスクモードのみ、また IMZ ファイルへの保存はできません。
- 以下のメディア種別をサポートします
160KB (5.25"), 180KB (5.25"), 320KB (5.25"), 360KB (5.25"),
640KB (5.25"/3.5"), 720KB (5.25"/3.5"), 820KB (3.5"), 1.2MB (5.25"/3.5"),
1.44MB (3.5"), 1.68MB (3.5"), 1.72MB (3.5"), 2.88MB (3.5")
- 仮想メディアのフォーマット
VFDはフォーマット済みの新規イメージを作成します。
Windowsの機能ではフォーマットできないサイズのイメージもフォーマットできます。
- メディア書き込み保護の切り替えを、イメージをオープンしたまま行うことができます。
- 固定ドライブ文字
イメージをクローズしてもドライブ文字は削除されません。
ドライブ文字は明示的に削除されるまで保持されます。
Windows 2000 SP2 以降で、割り当てたユーザがログオフしても削除されません。
Windows XP や Terminal Server ではグローバルなドライブ文字となります。
ドライバ起動時に、前回と同じドライブ文字が割り当てられます。
従来の一時(ローカル)ドライブ文字との選択が可能です。
- シェルエクステンション
仮想ドライブアイコンの右クリックメニューからイメージのオープン・クローズが行えます。
仮想フロッピドライブプロパティシート。
マウス右ボタンで、イメージファイルを仮想ドライブにドラッグ&
ドロップしてオープンできます(Windows 2000以降)。
vfd21-080206.zip
- vfd.sys (カーネルモードドライバ:バージョン 2.1.2005.404)
- vfd.exe (コマンドライン)
- vfd.dll (ドライバ制御・シェルエクステンションライブラリ)
- vfdwin.exe (GUIインタフェース)
- readme.txt (README 英語)
- vfdhelp.txt (VFD.EXE コマンドリファレンス・英語)
-
- readmej.txt (README 日本語)
- vfdhelpj.txt (VFD.EXE コマンドリファレンス・日本語)
-
- copying.txt (GNU GENERAL PUBLIC LICENSE Version 2)
vfdsrc-080206.zip (ソースコード)
注意!前バージョンとの共存はできません。
プログラムを使用する前に readmej.txt をよく読んでください。
たとえ何も問題がなくてもコメントを送っていただけるとありがたいです。
「Windows ** SP * で動いてます」の一言だけでも助かります。
- 超FAQ: NTFS で圧縮・暗号化されたファイルは直接マウントできません。
Windows のキャッシュマネージャがデッドロックを起こすことを防ぐために、わざとそうしています。
- 超FAQ: 現在の VFD には、実際のフロッピディスクからイメージを作成する、
あるいはその逆の機能はありません。WinImage、RawWriteWin などのプログラムを使用してください。
- Windows XP のエクスプローラでは、仮想ドライブがフロッピドライブではなく単なるリムーバブル
ドライブと表示されます。またアイコンもドライブ文字が A: または B: のときは 5.25 インチフロッピ
のアイコン、それ以外のときはリムーバブルディスクのアイコンが表示されます。
はっきり言って XP エクスプローラのバグ、というかマイクロソフトはもうまじめにフロッピディスクを
扱う気がないんじゃないか、とまで思っていますが、単に表示上だけの問題です。
*まじめに* フロッピを扱っているプログラムはちゃんとフロッピドライブとして認識するはずです。
- 仮想ドライブのドライブ文字を割り当て・変更したときに Windows XP
のエクスプローラに反映されないことがあります。
ハードディスクや CD ドライブのドライブ文字を変更したときなどにも同じ現象が発生することがあるので、
これもエクスプローラのバグだと思います。
エクスプローラを再起動するか、それでだめな場合は一旦ログオフして再ログインすれば仮想ドライブが
エクスプローラにちゃんと認識されるはずです。
- Windows NT/2000 の FORMAT.EXE は以下のサイズのイメージをフォーマットできます:
160K、180K、320K、360K、640K、720K、1.2M、1.44M、2.88M
Windows NT/2000 のエクスプローラでは以下のサイズのイメージをフォーマットできます:
360K, 640K, 720K, 1.2M, 1.44M, 2.88M
Windows XP では FORMAT.EXE、エクスプローラともに 1.44M イメージしかフォーマットできません。
上記以外のサイズのイメージは、VFD.EXE または VFDWIN.EXE でフォーマットできます。
- Windows 2000/XP エクスプローラのチェックディスクは、VFD ドライブをチェックできません。
現在の VFD がマウントマネージャをサポートしていないためです。コマンドラインの CHKDSK.EXE
を使用してください。
- 3.5 インチと 5.25 インチの仮想メディアを入れ替えてもエクスプローラのドライブアイコンと
種類の表示は更新されません。これは単に表示の上だけで、3.5 インチ/5.25 インチの区別が
必要なプログラムにはきちんと認識されるはずです。
- 一部のプログラムには(特に古いプログラムにありがち)フロッピドライブが A: か B: であると
仮定してしまっているものがあります。特定のプログラムが VFD の仮想ドライブを認識しなかった場合
ドライブ割り当てを A: または B: に変更してみてください。
- Windows 2000/XP は USB などのリムーバブルドライブやネットワークドライブに使用中のドライブ
文字を割り当ててしまうことがあります。急に VFD ドライブにアクセスできなくなったりした場合には
一旦ドライブ割り当てを解除して、確実に空いているドライブ文字を割り当てなおしてみてください。
- swapfs (http://www.acc.umu.se/~bosse/) との相性問題がすず氏より報告されています(未確認)。
- 仮想ドライブで大量のデータを転送しているとシステムの速度低下、
あるいはフリーズが発生することがあるとの報告があります(未確認)。
多分やる:
- リムーバブルドライブ・フロッピドライブからイメージを読み込む
- リムーバブルドライブ・フロッピドライブにイメージを書き込む
- プラグインを使用して独自のイメージ圧縮・暗号化方式などに対応できるようにする
- シェルエクステンションの充実
- タスクトレイアプリケーション(ドライブインジケータなど)
- zip/img ファイルサポートの充実(作成、保存、パスワード保護など)
- ヘルプ・ドキュメントの充実
やるかも:
- 仮想フロッピドライブ数を設定可能にする
- メッセージファイルを使用して多言語対応できるようにする
- 仮想ドライブアクセス DLL の API 整備
- インストーラ・アンインストーラ
- Plug & Play 完全対応
- Windows 9x 版ドライバ
その他、何か提案があれば...
最近二人の方からいただいた VFD を 64 ビットシステムで使用する方法についての
情報を載せておきます。ただし私自身は 64 ビットシステムに触ったこともないので、
この件に関する質問には答えることができません。
ハンドルネーム "critical0" 氏が情報と AMD64 用にコンパイルした
バイナリを送ってくれました:
メールからの抜粋(訳):
ドライバは AMD64 用にちゃんとコンパイルできました。
(winddk 3790.1830 for win 2003 server x64 を使用)
必要だったのは vfdioctl.c の 120 行目を
(PULONG)&Irp->IoStatus.Information);
に変更することだけで、これで互換性のない型に関する警告が
出なくなります。
自分でビルドしたドライバに変更してみたら完璧に動作しました。
彼が送ってくれたドライババイナリ:
vfd-x64-critical0.zip
また Igor Levicki 氏が 64 ビットコンパイルのためのドライバソース修正に関して
の情報を送ってくれました:
メールからの抜粋(訳):
ドライバソースを 64 ビット環境用にコンパイルするには
以下の点を修正する必要があります:
vfdimg.c:
466:
< OUT PULONG ReturnLength)
> OUT ULONG_PTR* ReturnLength)
vfddrv.h
< OUT PULONG ReturnLength);
> OUT ULONG_PTR* ReturnLength);
この修正の理由は ntddk.h の中で IoStatus.Information
フィールドが ULONG ではなく ULONG_PTR として定義されて
いることです。
ULONG の定義が unsigned long であるのに対して ULONG_PTR
は unsigned __int3264 として定義されているので、移植性の
ためには ULONG_PTR を使うべきです。
追記: critical0 と Igor のコード修正は
アプローチは別ですが両方とも同じ問題に対する修正です。
Igor より、critical0 の修正中の ULONG_PTR * から PULONG への
キャストは危険であるとの指摘を受けました。
私も基本的にはタイプキャストが危険であるという意見には賛成です。
ただし、今回のケースに限り、critical0 の修正も十分に安全だと判断しました。
問題のポインタが指しているアドレスは最初に 0 で初期化されており、
またそこに格納される値は決してマイナスになったり 300 を超えたりせず、
32 ビットの範囲で充分処理できるためです。
追記2: Igor によれば、タイプキャストの方法は
プロセッサ・メモリバスのサイクル面でも欠点があるそうです。
そのため、自分で 64 ビットバイナリをビルドする場合は Igor の方法
をとったほうが良いようです。
ですが、もし自分でビルドすることができない場合は critical0 のバイナリ
でも大きな問題は起きないと思います。現在のところ私自身がビルドした 64
ビットバイナリを配布する予定はありません。もっとも大きな理由は、私が
ビルドしたものがちゃんと動くかどうかを私自身が確認することもできない
ためです。
critical0 のバイナリは、少なくとも彼のところで動作しているという実績
があります。
バイナリ:vfd.zip
(78,508 バイト) 2003/04/27
ソース:vfdsrc.zip
(91,767 バイト) 2003/04/27
HISTORY
2008/02/06
Version 2.1.2008.206
2005/04/04
Version 2.1
2004/10/03
Version 2.0 Release Candidate
2004/09/24
Version 2.0 beta 3
2004/09/12
Version 2.0 beta 2
2004/07/28
Version 2.0 beta preview 文字化け修正
2004/06/17
Version 2.0 beta preview
2003/04/27
vfdwin.exe 1.01 -- ユーザインタフェースのバグ修正.
2003/04/16
初版リリース