关于mbr:如何确定Windows用来引导哪个磁盘

How to tell which disk Windows Used to Boot

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

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

特里

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

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

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


  • 进入Control Panel
  • System and Security
  • Administrative Tools
  • 启动System Configuration工具
  • 如果您安装了Windows的多个副本,则将使用以下名称进行启动:

    1
    2
    Windows 7 (F:\\Windows)
    Windows 7 (C:\\Windows) : Current OS, Default OS

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


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

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


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

  • 包含活动MBR的驱动器
  • 使用NTLDR的活动分区(系统分区)
  • Windows所在的分区(引导分区)
  • 2和3应该很容易找到-我不太确定1。虽然您可以读取原始磁盘来找到MBR,但这并不意味着它是BIOS引导设备,甚至是下次(您可能有多个)具有MBR的磁盘)。

    您甚至无法确定PC是从硬盘驱动器启动的-完全有可能从软盘启动Windows。在这种情况下,1和2从技术上来说都是软盘,尽管3仍然是C:\ Windows。

    您可能需要在需求或目标方面更加具体。


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

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

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


    尝试使用HKEY_LOCAL_MACHINE \ SYSTEM \ Setup \ SystemPartition


    您键入diskpart,列出磁盘并检查磁盘以进行引导。
    例如:

    1
    2
    3
    4
    dispart
    list disk
    select disk 0
    detail disk

    具有启动卷的磁盘是装有Windows的磁盘:

    enter image description here


    您可以尝试使用简单的命令行。 bcdedit是您所需要的,只需以管理员身份运行cmd并键入bcdeditbcdedit \\v,这在XP上不起作用,但希望这不是问题。

    无论如何,对于XP,您都可以查看boot.ini文件。


    推荐阅读