とりあえず見てみるか...

MBR, PBR, 更に、ディレクトリ階層を辿って、目的のファイルにアクセスする事になるわけだけど、
仕様を調べているだけじゃ、やっぱり、ピンとこないので、
実際に中身を見てみる事にしよう。


と言うか、中身を見る準備って感じかな?


とりあえず、MBRから覗いてみよう。
しかし、これまた、細々と注意点が...
まず、MBRの構造体だけど、char型のみで構成されていれば、
基本的には、アラインメントの問題は無いかな?
念の為、確認はしておいた方が良いかも...
全体で512ByteになっていればOKね。
ふむ。


じゃ、次に、ディスクの先頭セクタを読み込みたいわけだけど...
さて... これは、どうしたもんかね?
一般的なファイル入出力では、ファイル単位でしょ?
ディスクそのものの、それも先頭セクタを読み込みたい場合、
低レベルのファイル入出力を使う必要があるみたいだな。


この辺は、かなり、環境依存と言うか、物理依存と言うか...
OSが隠蔽してくれている部分を、敢えて、直接いじりたいわけで、
そうすると、当然ながら、それぞれ、固有のやり方になってくると。
例えば、UnixLinuxであれば、open関数で、/dev/hdx辺りをオープンする事になるんだろうけど、
Windows上でcygwinとか、えせLinux環境の場合は、/dev/hdx自体存在しなかったりするので、
う〜む、とか、変に悩む事が多くなったりする。苦笑
結局、Windows上であれば、Windowsの作法に従って、"\\.\PHYSICALDRIVE0"とか指定すれば、
何となく、物理ディスクをオープンした気になれる模様。<いや、多分、それで良いはず!!(^^;;;
基本、VCなんかで、コンソールプログラム(普通のmainから始まるCUIベースのアプリケーション)を組もうとすると、
Windows的には、逆に、特別扱いされているようで(いや、実際、そうなんだろうけど)、
普通ではないWinMainから始まらないプログラムとして色々と雑多な手順が必要になる。
そういうのが面倒なので、小さいCプログラムなどは、cygwin上で、cc hoge.c とかで済ませている事が多いのだけれど、
低レベル入出力とかやろうとすると、素直に、Windows作法に従った方が良いのかなぁ?
いや、それでも、別に、ウィンドウが必要なわけでもないしなぁ...
この辺が、個人的に、Windowsの、なんか嫌なところ。苦笑


まぁ、とりあえず、そんな感じで、やってみた結果...

bootable = 80
firstSectorCHS = 01, 01, 00
type = 7
lastSectorCHS  = FE, FF, FF
firstSectorLBA = 3F, 00, 00, 00
sectors = CE, 2E, C0, 03

bootable = 00
firstSectorCHS = 00, C1, FF
type = 15
lastSectorCHS  = FE, FF, FF
firstSectorLBA = 0D, 2F, C0, 03
sectors = F3, 76, 90, 05

bootable = 00
firstSectorCHS = 00, 00, 00
type = 0
lastSectorCHS  = 00, 00, 00
firstSectorLBA = 00, 00, 00, 00
sectors = 00, 00, 00, 00

bootable = 00
firstSectorCHS = 00, 00, 00
type = 0
lastSectorCHS  = 00, 00, 00
firstSectorLBA = 00, 00, 00, 00
sectors = 00, 00, 00, 00

signature = 55, AA

ざっと見て、パーティションは2つ、1つめのパーティションがアクティブ(ブート可能)って感じですね。
CHS形式は、ちょっと変則的で、Head:8bit, Sector:6bit, Cylinder:10bit といった構成になっているようです。
それぞれの数値範囲は、Head=0〜254, Sector=1〜63, Cylinder=0〜1023という事らしいけれど、
この範囲を超える場合は、0xFE,0xFF,0xFFって事になるようです。
最近の大容量ディスクでは、CHS形式は事実上無効で、殆どがLBA形式での利用になると思います。
で、ファイルタイプを見てみると... 0x07... って、NTFSじゃん!!苦笑
こりゃいかん...
0x15って、何だっけ?拡張パーティション?あっれぇ?拡張パーティションなんて作ったっけかなぁ?
拡張パーティションって事は、更に、EBR(Extended Boot Record)を調べないといけないらしい... (^^;;;


んんん???
2つめのパーティションを調べる為にシークしようと思ったんだけど、30G強のシークは無理なのか?
こいつは参ったなぁ...