- 締切済み
DeviceIoControlを使って、フロッピーをフォーマットするには?
初めて質問します。よろしくお願いします。 フロッピーをフォーマットするDLLを作っているのですが、DeviceIoControlを使ってフロッピーを 1.44M 512バイト/セクタにフォーマットするにはどうすればいいのでしょうか? 下記のようにコーディングしてみたのですがどうもうまくいきません。 DeviceIoControlは正常終了するのですが、フォーマットした(つもり)のフロッピーをエクスプローラで読もうとすると“このボリュームは認識可能なファイルシステムではありません。”と表示されてしまいます。 エクスプローラでフォーマットした時と比べ、DeviceIoControlが動作している時間が短いのでこの他に手順が必要なのかとも思ったのですが、それらしいのは見当たらず困っています。よろしくお願いします。 hFD = CreateFile( "\\\\.\\a:", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); FormatPara.MediaType = F3_1Pt44_512; FormatPara.StartCylinderNumber = 0; FormatPara.EndCylinderNumber = 79; FormatPara.StartHeadNumber = 0; FormatPara.EndHeadNumber = 1; bRet = DeviceIoControl( hFD, IOCTL_DISK_FORMAT_TRACKS, &FormatPara, sizeof(FormatPara), NULL, 0, &dwTempSize, NULL );
- みんなの回答 (2)
- 専門家の回答
みんなの回答
No.1ですが、補足します。 プログラムのバグによって大変なことになりますから、 SHFormatDriveを呼び出しているプログラムを他人に配布する事は、自分を守る意味でも、『絶対』にやらないほうがいいですよ。
IOCTL_DISK_FORMAT_TRACKS では、物理フォーマットしかできないのが原因です。FAT12の論理フェーマットは自力でやる必要があります。 水をさす事になるので、書き込むのをためらっていたのですが、あえてフォーマットをするのでしたら、SHFormatDrive を呼び出すべきです。 VC++のMSDNだと、キーワードでは出てこないので、検索してみてください。
お礼
回答頂き、ありがとうございます。 DeviceIoControlでのフロッピーのフォーマットは大変そうですね。 SHFormatDriveも含めて他の方法を検討してみますが、 “SHFormatDriveを呼び出しているプログラムを他人に配布する事は、~『絶対』にやらないほうがいいですよ。”とは、 “フォーマットするようなプログラムは気軽に配布すべきではない”ということでしょうか? 確かに、そうかもしれません。もうちょっといろいろ考えてみます。 ありがとうございました。 (御礼が遅くなり、申し訳ありませんでした。)