HDDの物理フォーマットをするツールを作成するには?


どら  2007-09-26 12:33:58  No: 66443  IP: 192.*.*.*

すみません、かなりマニアックな質問なのですが・・・
Windows PE 2.0(Vista BaseのPE)のコマンドラインからHDDの物理フォーマットをしようと思っています。
使えそうなツールが見当たらないので、作るしかないのかな〜と思っています。

根本的な疑問なのですが、実現可能なのでしょうか?
可能な場合、使える関数でも参考サイトでもかまいませんので情報をいただけると幸いです。

開発する環境はWindows XP with SP2 + VS.NET 2003 Enterprise です。

編集 削除
れい  2007-10-23 16:03:52  No: 66444  IP: 192.*.*.*

本当の物理フォーマットができるHDDは普通ありません。
いわゆる物理フォーマット、Low Level Format(本当は論理だよね)なら
ドライバからできます。
ユーザーモードからなら
DeviceIoControlをがしがし叩く筈ですが…。

この辺はVistaでも変更ないと思います。
もちろん実行時に管理者権限がいります。

編集 削除
どら  2007-10-23 18:25:36  No: 66445  IP: 192.*.*.*

れいさん、レスありがとうございます。

実際にやりたいことは、HDDメーカーなどが提供しているローレベルフォーマットツール
(MaxtorのPower MAXみたいなやつ)と同じことを、Windows PEから行いたい
んです(CD
ブートではなくネットワークブート[WDSを利用]から行いたかったので・・・)

なのでおっしゃるとおり

> Low Level Format(本当は論理だよね)

とイコールかなと(同じことですよね?)。

となると、
1.物理ディスクを列挙し、そのサイズをバイト単位で求める。
2.DeviceIoControlをFSCTL_SET_ZERO_DATAですべて0にする。

という流れでいけるのかな・・・。
試してみます、本当にありがとうございます!!
うまく行ったらUp & 解決フラグをたてさせていただきます!!

編集 削除
れい  2007-10-24 08:57:54  No: 66446  IP: 192.*.*.*

FSCTL_SET_ZERO_DATAは
FSCTLですから、ファイルに対して行う操作ですので、
たぶんダメです。

私はよく知りませんので、嘘かもしれませんが、
SCSIドライバをIOCTLで叩くのだと思いますが…

編集 削除
tetrapod  2007-10-24 10:32:57  No: 66447  IP: 192.*.*.*

SPTI とか ASPI とかっすね

編集 削除
どら  2007-10-24 23:35:31  No: 66448  IP: 192.*.*.*

れいさん、tetrapodさん。
レスありがとうございます。

なるほど・・・。
SPTIやASPIで、HDDのセクタに直接0を書き込む用に命令を出す、と言った感じなんでしょうね・・・
これらの開発の参考になる書籍やサイトなどがあったら教えていただけないでしょうか?

図々しくてすみません・・・。

編集 削除
 2007-10-25 00:08:25  No: 66449  IP: 192.*.*.*

PowerMAXのローレベルフォーマットは、不良セクタを見つけて代価セクタに置き換える作業がありますので、「HDDのセクタに直接0を書き込む」だけでは同じにならないと気が…

編集 削除
通りすがり  2007-10-25 03:03:43  No: 66450  IP: 192.*.*.*

format(0x04)コマンド発行すればいいんじゃない?

編集 削除
れい  2007-10-25 12:05:00  No: 66451  IP: 192.*.*.*

>SPTI とか ASPI とかっすね

そですね。
ASPIの時代はまだお子様だったので私には分かりかねますが。
IOCTL_SCSI_PASS_THROUGH_DIRECT使ってSPTIをガシガシするようです。

>format(0x04)コマンド発行すればいいんじゃない?

これってどういう意味でしょう?わからないです。

>SPTIやASPIで、HDDのセクタに直接0を書き込む用に命令を出す、

なんで0にこだわるのかよくわからないんだけども。
とりあえず、ローレベルフォーマットはセクタ配置からやりなおすので
セクタに直接かけないですよ。

ちなみに、日本語で参考になるサイトはないです。

SCSIドライバを叩くところまではMSDNで。
http://msdn2.microsoft.com/en-us/library/ms802380.aspx

その後は
http://www.osronline.com/
で調べてください。
ちょっと見たところ過去ログにあるようです。

編集 削除
PSB  2007-10-25 23:21:32  No: 66452  IP: 192.*.*.*

>>format(0x04)コマンド発行すればいいんじゃない?
>これってどういう意味でしょう?わからないです。

SCSIコマンドのFormatUnit(OpCode=0x04)のCDBを出すという
ことでしょう。

編集 削除
どら  2007-10-26 10:23:21  No: 66453  IP: 192.*.*.*

お さん、通りすがりさん、れいさん、PSBさん、レスありがとうございます。
参考にしていろいろやっています。
目処が立つか、あきらめたら(汗)ご報告の上解決フラグをあげさせていただきます。

編集 削除