2017-12-13 30 views
0

ハードディスクには4つのプライマリ(MBR)パーティションがあり、すべてNTFSでフォーマットされています。それらのうちの1つにのみ起動可能なオペレーティングシステム(Windows XP、Windows Vista、Windows 7、Windows 8またはWindows 10)が含まれています。私のブートローダプログラムはどのファイルシステムがブート可能であるかをどのように把握していますか?ファイルシステムのブートセクタ(つまり最初の512バイト)を読むだけで可能ですか?ブート可能なNTFSファイルシステムを検出するには?

パーティションテーブルのアクティブビットが失われました。

バイト0が0xebまたは0xe9で、バイト510が0x55で、バイト511が0xAAであることを確認するだけでは不十分です。Linux上のmkfs.ntfsツールで作成されたブート可能でないNTFSファイルシステムでもこのテストに合格し、この場合に必要な出力は起動できません。

私のプログラムがNTFSファイルシステムのルートディレクトリにファイルをリストすることができる場合、どのファイルまたはディレクトリを探してください(NTLDR)か?

私のプログラムがすべてファイルシステムの最初の40960バイトである場合、パーティションが起動可能かどうかはまだ判断できますか? (好ましくは、できるだけ簡単なロジックを持つ)

は、この正しいです:ファイルは\場合BOOTMGRまたは\ NTLDRは、NTFSファイルシステム上に存在し、それは(おそらく)ブート可能です。

+0

参考:http://wiki.osdev.org/Partition_Table – Caramiriel

+0

@Caramiriel:どのようにリンクしているページのヘルプは、NTFSファイルシステムがブート可能であるか否かを検出するのでしょうか?私はそこに関連するものは見つけられませんでした。 – pts

+0

パーティションテーブルレコード(バイトオフセット0)は、パーティションがブート可能かどうかを示します。それ以外の場合は、[NTFS Boot Sector](https://technet.microsoft.com/en-us/library/cc977221.aspx)が利用可能かどうかを確認してください。しかし、ブート可能な定義に依存します。 – Caramiriel

答えて

0

NTFSファイルシステムにブート可能なWindowsが含まれているかどうかを検出する最も簡単な方法は、BOOTMGRまたはNTLDRファイルがルートディレクトリに存在するかどうかをチェックすることです。これらのファイルの1つはブートコード。

NTFSのブートセクタ(ファイルシステムの最初の512バイト)には、起動可能なファイルシステムと起動できないファイルシステムではまったく同じである可能性があるため、起動可能性に関する明確な情報は含まれていません。

(ファイルBOOTMGRとNTLDRの役割を持つ)、Windowsの起動に関するいくつかの詳細情報:それはまたos-proberのソースコードを見て価値がある

os-probes/mounted/x86/20microsoftでは、実際にはファイルBOOTMGRとNTLDR(どちらも小文字)を探しています。また、BOOTMGRの場合と同様にboot/bcdファイルをチェックし、NTLDRの場合はntdetect.comとboot.iniファイルをチェックします。

関連する問題