如何检测可引导的 NTFS 文件系统?

How to detect a bootable NTFS filesystem?

一个硬盘有4个主分区(MBR),都是NTFS格式。其中只有一个包含 bootable 操作系统(Windows XP、Windows Vista、Windows 7、Windows 8 或 Windows 10) .我的引导加载程序如何确定哪个文件系统是 bootable?是否可以仅通过读取文件系统的引导扇区(即前 512 个字节)?

分区 table 中的活动位已丢失。

检查字节 0 是 0xeb 或 0xe9,字节 510 是 0x55,字节 511 是 0xAA 是不够的,因为即使 mkfs.ntfs 工具在 Linux 通过这个测试,这个案例的预期和要求的输出是非 bootable.

如果我的程序能够列出 NTFS 文件系统根目录中的文件,我应该查找哪些文件或目录 (NTLDR)?

如果我的程序只有文件系统的前 40960 字节,它还能判断分区是否为 bootable? (最好逻辑尽可能简单。)

这是否正确:如果文件 \BOOTMGR 或 \NTLDR 存在于 NTFS 文件系统中,那么它(可能)是 bootable。

据我所知,检测 NTFS 文件系统是否包含可引导文件的最简单方法 Windows 是检查根目录中是否存在 BOOTMGR 或 NTLDR 文件,因为这些文件之一将由引导代码加载。

NTFS 引导扇区(即文件系统的前 512 个字节)不包含有关可引导性的明确信息,因为对于可引导和不可引导的文件系统,它可能完全相同。

关于 Windows 引导的更多信息(具有文件 BOOTMGR 和 NTLDR 的作用):

os-prober. In os-probes/mounted/x86/20microsoft 的源代码也值得一看,它确实在寻找文件 BOOTMGR 和 NTLDR(均为小写)。它还有一些额外的检查,比如对于 BOOTMGR,它检查文件 boot/bcd,对于 NTLDR,它检查文件 ntdetect.com 和 boot.ini.