xtools テスト第3.3版 Human68KやX68KでIBMフォーマットをしたMOへアクセスするツール Document by kana Date: 2002/9/15 1. 環境 動作環境: Windows NT 2k/4.0/3.51 / Windows 9x 確認環境: OS Windows 2000 SP3 Windows 95 OSR2 Windows NT 4.0SP3 [もう確認できません] Windows 95 without SP1 [もう確認できません] SCSI AsusTek SC-200 / Tekram DC-390F/DC-390U MO TEAC OD-121S (128MB) HD Quantum LT-240S(240M/ 128 + 120構成) 2. 同梱ファイル: xtools.txt このファイル bin\xdir.exe X68KフォーマットのMOのディレクトリを表示 xcopy.exe X68KフォーマットのMOのファイルを吸い出し xcopyall.exe X68KフォーマットのMOのディレクトリやファ イルを吸い出し(GORRY氏提供のものを少し改造) inquiry.exe SCSI機器一覧を出力する src\* ソースファイル一式(の筈) 3. 使用方法: 昔ながらに馴染みのある(;_;)コマンドプロンプトで以下の様に使います。 3.1. ディレクトリの表示 $> xdir ドライブ名 ディレクトリ名 Ex. ドライブ名には\\.\PHYSICALDRIVE3などの形式で指定します ディレクトリ名には\や\SYSなどの形式で指定します です。第一引数のドライブ名はNT3.51/NT4.0で指定の形式が違います(テスト するまで気がつかなかった)。 ・Win95: x: xはドライブ名(A〜Z)となります。つまりMOのドライブが「H:」であれば 「x」には「H」を指定します。 ・NT4.0: \\.\PHYSICALDRIVEn nは数字になります。つまりNT4.0のディスクアドミニストレータでMOに相 当するドライブが「ディスク1」となっていればその「1」がnに相当します。 ・NT3.51: \\.\x: xはドライブ名(A〜Z)となります。つまりMOのドライブが「H:」であれば 「x」には「H」を指定します。 #こちらの方がなにかと便利なのですが、NT4.0ではRemovableHDD扱いなの #でこうはなりません。 NT3.51のSCSI MOドライバを使っている時のみです。それ以外はおそらく NT4.0の時と同様だと思われますが試したことはありません。 ・WinASPI: host:target:lun Win95/NTで利用できます(NTではWinASPI32は別途入手する必要があります)。 指定文字列は同梱のinquiry.exeの出力の左端を参考にしてください。 [target/lunは省略可能で省略すればどちらも0が仮定されます] 追記: HDについても利用できるはずですが、私はNT4.0SP3でしか確認していま せん。NT3.51においてはNT4.0と同様の指定の方法でアクセスできると思い ます。 95とNTとの切り替えはOSのバージョンを見ていますが、見間違えていた らごめんなさい。特にOSR2な方(手元にOSR2がないので未確認です)。 WinASPI経由でのアクセスにはWNASPI32.DLLがインストールされていなけ ればなりません。95には標準的にインストールされていますので、Win95上 でMOではなくHDDの中身を救出したい時に利用できます。ただしこのアクセ ス方法は95上での動作確認をしていませんのでご注意ください。 実例その1: 我が家のNT4.0ではMOは「ディスク3」ですので、X68KフォーマットのMOのルー トディレクトリを表示するには > xdir \\.\PHYSICALDRIVE3 \ と入力します。 実例その2: 我が家のNT4.0ではMOは2枚目のSCSIカードに接続されていて、SCSI-IDは3で すので、X68KフォーマットのMOのルートディレクトリを表示するには > xdir 1:3:0 \ と入力しても「実例その1」と同じ結果になります。1:3:0というのは同梱の inquiry.exe を実行して該当するSCSI機器の行の左側のものを指定すればよ いです。 3.2. ファイルの吸い出し $> xcopy [ドライブ名] [ファイル名] $> xcopyall [ドライブ名] [ディレクトリ名] Ex. ドライブ名指定はxdirと同じです。 ファイル名には\CONFIG.SYSや\AUTOEXEC.BATなどの形式で指定します [ NTのコマンドラインツールに同名のxcopy.exeというツールもある ] [ ので注意してください。(こっちをリネームした方が良いでしょう) ] 吸い出したファイルはカレントディレクトリに同じファイル名で 出力されます。ディレクトリを指定してのコピーはxcopyallを使用 してください(というかxcopyallはxcopy+ディレクトリコピーの機能 なのでxcopyallだけでよいです)。xcopyallは現状では指定したディ レクトリ名そのものは作成してくれないので気をつけてください。 3.3. コマンドラインオプション xdir/xcopy/xcopyallのいづれも次のオプションをサポートしています。 -p[N] 対象となるドライブのパーティション番号を指定します。 Nには0〜14までの数値を指定します。 -i パーティション情報を表示します。 特に意味はありません。デバッグ用だと思ってください。 xcopy/xcopyallには次のオプションがあります。 -a ファイルの日付、属性もコピーします。 ファイルの日付は更新時間に反映し、作成時間・アクセス 時間は現時刻となります。 また、ディレクトリの属性コピーはNT系列でのみ有効です。 4. 制限: 現状の制限を以下に述べます。 (1) ディスクの対象はHuman 68K/IBMフォーマットです。IBMフォーマット ではいわゆる21文字しか対応していません。Win95/WinNTの長いファイ ル名を使用した場合には8.3ファイル名しか取得できません。 (2) ルートディレクトリエントリが512(だったと思う)以外のものは確認し ていません。 (3) 230Mメディアぐらいまでしか動作確認されていません。 (誰かドライブください^_^) (4) 今のところディレクトリ名の大文字・小文字を区別しているのでディ レクトリを指定する時は気をつけてください。 (5) 2byte FAT以外は対応していません。 よって1.5byte FATのSCSIフロッピーなどには対応できていません。 (6) lndrv/execdrvには対応しません(いらないですよね?)。 (7) 一部のAnti-Virusツールのオンラインスキャンモニタと相性がよくありません。 offにしてから使用してください。 ->そんな気がすることがあるだけかもしれないですけど、一応気をつけてください。 これに加えてWin95での注意事項を述べます。 (8) 異なるメディアサイズの媒体へ交換してはいけません。 おそらく誤動作します。 (9) メディアの検出が怪しくてメディアを挿入していてもうまく動作しない ことがよくあります。特に初回のアクセスがおかしいです。なんとな く対処コードを入れていますが、あまり効果がないようです。こういう ときは一度^Cしてください。 (10) メディアへのアクセスがNTに比べて遅い。なるべくならNTをお使いく ださい。 (11) WinASPI経由の動作は簡単にしか確認していません。WinASPI経由においても バッファサイズの大きさに制限があるようであまり効率は良くありません。 *なんか注意制限事項が増えていく・・・(;_;)。 そうそうMOは念のためWrite Protectしておきましょうね。 5. 予定: (2) GUI作成 <- 無期延期? (20) XDFフォーマットへの読み出し・書き込みの対応(はしないかも・・・) 6. 反省 xcopyっていう名前はよくなかった。まぁ名前を変更して使ってください。 xreadとかにしちゃった方がよかったですね〜。 A. お約束: このツールを使ったり・使わなかったりした事で被る被害については責任を 持ちません。ご自分の責任でお使いください。また、うまく動作しなかった時 には連絡を下さるとありがたいですが、その際にはそのメディアのフォーマッ トパラメータ(DPB)をお知らせくださると対処し易いです。 同梱のソースを再利用する際には、再利用したツールのドキュメントに出典 を記述してください。また修正したソースを再配布する場合にはソース中に修 正箇所を明示してください。可能であれば修正したソースを私に送ってくださ い。破壊的活動を目的としたソースの再利用・修正はおやめください。 テスト(第1)版のソースはバグバグなのでお持ちでしたら破棄してください。 B. 連絡先: Email: inokuchi@mvg.biglobe.ne.jp URL: http://www2f.biglobe.ne.jp/~kana/ C. 参考文献: Susie 1.18A(だったと思う)に付属のTECH.DOC (by GORRYさん) Nifty FWINDC Lib のADIO2.LZH(by morryさん) D. 謝辞: Susie(on x68k)に付属のドキュメントは大変参考になりました。素晴らしい ツール・ドキュメントを公開してくださったGORRYさん、ありがとうございま した。 またWindows95における物理ディスクへのアクセス方法はNIFTYSERVE FWINDC のライブラリに登録されているmorry氏のADIO2.LZHを大いに参考にさせてもら いました。ありがとうございました。 Z. 履歴: テスト第3.3版: 2002/9/15 バグ修正 xcopy/xcopyallで-aオプション(ファイルのタイムスタンプ/属性復元)使用時に タイムスタンプが9時間進んでいるバグを修正と仕様変更 (矢野さん、報告&デバッグありがとうございました) テスト第3.2版: 2002/9/5 バグってました E5で始まるファイル名を持つファイル・ディレクトリが扱えてませんでした。 (結城見さん、報告ありがとうございました) テスト第3.1版: 2000/5/20 バグってました メモリリークしてました。特にxcopyallで顕著に発生します。 (yllLiBeさん、報告&デバッグありがとうございました) -aオプション使用時にハンドルをクローズし忘れてました。 テスト第3.0版: 2000/5/16 バグってました(;_;) xdir/xcopyallにおいてLFNのエントリ(VOLラベルで表現される)を表示する 際の日付表示において落ちちゃうことがありました。 WinASPI時のメディア交換直後のNOT READY状態を認識するようにしたつもり これもなんとなくたぶんそうじゃないかなってぐらいですけど。 テスト第2.9版: 2000/5/14 xcopyallにてファイルを指定するとコピーできなかったのを修正 IBMフォーマットでIPLに記録されているセクタサイズが異常なメディア に対する暫定対処(514byte/sectorは面白すぎです->NT4.0SP6a) IBMフォーマットにおける21文字コピーがうまくいかないことがあったけど、 これでOKかどうかはよくわかんない。 WinASPI経由によるアクセス手段を追加。しかしSCSIバスフェーズも何も 考えて無いので駄目駄目なことがあるかもしれません。^Cで止めた時の処 理もなんにもやって無いのでちょっと危険かもしれません。 (host:target:lunというありがちな形式で指定してください) -> Win95ってなにかと制限があっていまいちだ。 なぁんでたくさん要求したらエラーになるかね(;_;)。 なんにせよ念のため動かしてみてよかったよ...。潜在バグも見付かったしね。 そろそろこれで終わりかなぁ?。 テスト第2.8版: 2000/5/6 xcopyallにおいて-aを指定した時にディレクトリの属性も復元(NTのみ) xcopyallにおいて存在しないディレクトリ指定した場合の改善 (相変わらず大文字・小文字を区別しますから気をつけてね) テスト第2.7版: 98/04/06 xcopyallに手を入れたせいで表面化しましたがopen()がバグってました。 (xcopyallでルートディレクトリのファイルがエラーとなっていました) IBMフォーマットのLFNを使ったMOの時に8.3文字になるようにしました。 テスト第2.6版: 98/03/22 Human68Kの時のFATサイズの算出が変でした。 GORRY氏提供のxcopyallの追加(バグ報告&コード提供ありがとうございます_o_) chdir("/")/getcwd()がバグってました。 IBMフォーマットのMOへの対応コードを入れてみました。 (これもなんとなくFATの開始アドレスの算出方法が変な気がする) テスト第2.5版: 97/11/24 Win95への対応コードを入れてみた。 どうもメディアの挿入チェックが怪しくて動作しない事がある(;_;。 ま、テスト版だから・・・。 テスト第2.1版: 97/11/01 xdir/xcopyにてパーティションを指定できるオプションを 追加した。 FS Emuでのメモリリーク/拡張子以降に空白が追加される件を修正。 テスト第2版: 97/10/15 とりあえずファイルが吸い出せる いろいろバグ取り(X_X) テスト版: 97/9/21 とりあえずディレクトリ一覧がとれる