すみません、かなりマニアックな質問なのですが・・・
Windows PE 2.0(Vista BaseのPE)のコマンドラインからHDDの物理フォーマットをしようと思っています。
使えそうなツールが見当たらないので、作るしかないのかな〜と思っています。
根本的な疑問なのですが、実現可能なのでしょうか?
可能な場合、使える関数でも参考サイトでもかまいませんので情報をいただけると幸いです。
開発する環境はWindows XP with SP2 + VS.NET 2003 Enterprise です。
本当の物理フォーマットができるHDDは普通ありません。
いわゆる物理フォーマット、Low Level Format(本当は論理だよね)なら
ドライバからできます。
ユーザーモードからなら
DeviceIoControlをがしがし叩く筈ですが…。
この辺はVistaでも変更ないと思います。
もちろん実行時に管理者権限がいります。
れいさん、レスありがとうございます。
実際にやりたいことは、HDDメーカーなどが提供しているローレベルフォーマットツール
(MaxtorのPower MAXみたいなやつ)と同じことを、Windows PEから行いたい
んです(CD
ブートではなくネットワークブート[WDSを利用]から行いたかったので・・・)
なのでおっしゃるとおり
> Low Level Format(本当は論理だよね)
とイコールかなと(同じことですよね?)。
となると、
1.物理ディスクを列挙し、そのサイズをバイト単位で求める。
2.DeviceIoControlをFSCTL_SET_ZERO_DATAですべて0にする。
という流れでいけるのかな・・・。
試してみます、本当にありがとうございます!!
うまく行ったらUp & 解決フラグをたてさせていただきます!!
FSCTL_SET_ZERO_DATAは
FSCTLですから、ファイルに対して行う操作ですので、
たぶんダメです。
私はよく知りませんので、嘘かもしれませんが、
SCSIドライバをIOCTLで叩くのだと思いますが…
SPTI とか ASPI とかっすね
れいさん、tetrapodさん。
レスありがとうございます。
なるほど・・・。
SPTIやASPIで、HDDのセクタに直接0を書き込む用に命令を出す、と言った感じなんでしょうね・・・
これらの開発の参考になる書籍やサイトなどがあったら教えていただけないでしょうか?
図々しくてすみません・・・。
PowerMAXのローレベルフォーマットは、不良セクタを見つけて代価セクタに置き換える作業がありますので、「HDDのセクタに直接0を書き込む」だけでは同じにならないと気が…
format(0x04)コマンド発行すればいいんじゃない?
>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/
で調べてください。
ちょっと見たところ過去ログにあるようです。
>>format(0x04)コマンド発行すればいいんじゃない?
>これってどういう意味でしょう?わからないです。
SCSIコマンドのFormatUnit(OpCode=0x04)のCDBを出すという
ことでしょう。
お さん、通りすがりさん、れいさん、PSBさん、レスありがとうございます。
参考にしていろいろやっています。
目処が立つか、あきらめたら(汗)ご報告の上解決フラグをあげさせていただきます。
ツイート | ![]() |