如何判断Windows用来引导哪个磁盘

时间:2020-03-05 18:46:40  来源:igfitidea点击:

我需要找到一种方法,以编程方式确定Windows正在使用哪个磁盘驱动器进行引导。换句话说,我需要Windows来确定BIOS用于引导整个系统的驱动器。

Windows是否公开接口来发现这一点? Windows API有多大,我希望其中埋藏一些可以解决问题的方法。

特里

p.s.仅读取硬盘的第一个扇区并不能说明任何问题。在我的开发箱中,我有两个硬盘,当我查看两个硬盘中前两个扇区的内容时,我有一个标准的样板MBR。

编辑以澄清一些事情。
我要标识设备的方式是使用一个字符串来标识物理磁盘驱动器(而不是逻辑磁盘驱动器)。物理磁盘驱动器的格式为" \。\ PHYSICALDRIVEx",其中x是数字。另一方面,逻辑驱动器由格式为" \。\ x"的字符串标识,其中x是驱动器号。

编辑以讨论一些被抛弃的想法。
知道Windows用来引导哪个逻辑卷并不能帮助我。这是原因。假设C:正在使用镜像RAID设置。现在,这意味着我们至少有两个物理驱动器。现在,我得到了从逻辑驱动器到物理驱动器的映射,发现该卷使用了两个物理驱动器。 Windows使用哪一个引导?当然,这是假定Windows用于引导的物理驱动器与包含MBR的物理驱动器相同。

解决方案

回答

除非C:不是Windows引导的驱动器。
解析%SystemRoot%变量,它包含Windows文件夹的位置(即c:\ windows)。

回答

仅安装Vista的计算机上没有boot.ini。

我们想如何识别驱动器/分区:通过Windows驱动器号映射到该驱动器/分区(例如c:\,d :)或者通过其硬件签名方式(使用哪个总线,等等)。

对于简单的情况,请查看GetSystemDirectory

回答

尝试使用HKEY_LOCAL_MACHINE \ SYSTEM \ Setup \ SystemPartition

回答

我们可以使用WMI来解决此问题。 Win32_BootConfiguration类将告诉我们Windows引导所在的逻辑驱动器和物理设备。具体来说,Caption属性将告诉我们要从哪个设备启动。

例如,在powershell中,只需键入gwmi Win32_BootConfiguration即可得到答案。

回答

这取决于我们对Windows用来引导的磁盘驱动器的定义。我可以在标准BIOS系统(他们知道EFI系统的功能)上想到3个不同的答案:

  • 包含活动MBR的驱动器
  • 使用NTLDR的活动分区(系统分区)
  • Windows所在的分区(引导分区)

2和3应该很容易找到,我不太确定1. 尽管我们可以读取原始磁盘来找到MBR,但这并不意味着这一次甚至是下一次都是BIOS引导设备(我们可能有多个磁盘) MBRs)。

我们甚至无法确定PC是从硬盘启动的,因此完全有可能从软盘启动Windows。在这种情况下,技术上1和2都将是软盘,尽管3仍为C:\ Windows。

我们可能需要在需求或者目标方面更具体一些。