dポイントプレゼントキャンペーン実施中!

初めてお目にかかります。
今、PC98で書き込みを行ったフロッピーディスクを読み取るプログラムを作成しています。
インターネットにて調べて見ましたが、うまくいかない状態です。

問題点等あれば教えていただきたいと思います。

実行環境:Windows XP SP2
ドライブ:LOGITEC LFD-31U4 (USB:3モード)
開発言語:VC++(VS2005にて)

BOOL Direct_Drive_Access(char *Drive){
  HANDLE hHandle;
  DISK_GEOMETRY disket;
  DWORD dw1;
  BOOL ret;

  //ハンドルの取得
  hHandle = CreateFile(Drive,GENERIC_READ , FILE_SHARE_READ,NULL,OPEN_EXISTING, NULL, NULL);

  if ( hHandle != INVALID_HANDLE_VALUE ){
    //FDの情報を取得
    ret = DeviceIoControl(hHandle,IOCTL_DISK_GET_DRIVE_GEOMETRY,NULL,0,&disket,sizeof(disket),&dw1,NULL);

    if (!ret) return FALSE;
  }
}

上記のソースにて取得したdisketの内容が、1.44MBのフロッピーでした。
(この情報だと、次のReadFile関数で"1785:フォーマットされていません"のエラーが返ります)

実際は、Cylinder - 77 Track - 2 Sector - 26 Byte - 256
でフォーマットしているフロッピーです。

BIOS経由のアクセスも調べましたが、32bitOSのため、使用できない様でした。

これから何を調べていいかも分からない状態なので、アドバイスをお願いします。

A 回答 (3件)

>Cylinder - 77 Track - 2 Sector - 26 Byte - 256



ということは、N88DISK-BASICなり(FDの場合、Cylinder, HeadまちたはSurface, Sector)、IBM互換なりのフォーマットですよね。とすると、Cyliner0 Head0は単密度でセクタ長は128なので、Nが変わりますが、これは大丈夫ですか(Head1は倍密度だったと思う)。

なお、3モードはドライバが組み込まれていれば、OSからはパラメータ変更だけでINITかければ使えると聞いたことがあります(やったことはない)

DOSの領域のディスクを作って、FD起動でDOS立ち上げてCからATのシステムコールを使った方が簡単だと思うなあ

この回答への補足

>N88DISK-BASICなり(FDの場合、Cylinder, HeadまちたはSurface, Sector)、IBM互換なりのフォーマットですよね。
ご指摘の通り、IBMフォーマットのディスクをPC98のFD-BIOSで書き出したファイルです。

16bitのときにはBIOSのINT13Hのコールでよさそうですが、NT系のOSでもしかしたらサポートして無いかな?
と思い質問いたしました、32bitの場合は難しそうですね…
他のファイル変換ソフトを使用し、バイナリダンプ作成後に処理を行う等の方法を検討してみます。

ありがとうございました。

補足日時:2006/12/13 20:15
    • good
    • 0

NNo1です。

引き続き・・・

「Windows XP は 1.44 MB ディスク形式のフォーマットのみをサポートします。3 モード フロッピー ドライブ (720 KB、1.2 MB、および 1.44 MB 3.5 インチ フロッピーディスクを読み書き可能なドライブ) は特別なドライバのサポートが必要であり、Windows XP ではサポートしていません。」
http://support.microsoft.com/default.aspx?scid=k …

だそうです。。。
かくなる上は、ハードウェア直接制御、でしょうか。。
ドライバとか作らないと、無理そうですね。。

参考URL:http://support.microsoft.com/default.aspx?scid=k …

この回答への補足

返事が遅くなり申し訳ありません。
ドライバ…難しいですね…

XPではドライバ無しでは1.25MBは読めないみたいですね…
考慮して再度考えて見ます。

ありがとうございました。

補足日時:2006/12/13 20:11
    • good
    • 0

「フォーマットされていません」ということは、


rawアクセスできていないのではないでしょうか?

デバイス名はあってますか?
http://support.microsoft.com/kb/100027/ja

参考URL:http://support.microsoft.com/kb/100027/ja

この回答への補足

YAMAMAYAさん
早速の回答ありがとうございます。

デバイス名は"\\\\.\\A:"を渡しており、試しに1.44MBの
フロッピーでプログラムを実行した所、ReadFileまで
正常に動作しました。

DeviceIoControlで、1.44MBのフロッピーを読んでも、1.25MBの
フロッピーを読んでも結局同じdisketが返ってきてしまいます。

1.25MBのダイレクトセクタアクセスは出来ないのでしょうか…

補足日時:2006/12/13 11:32
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!