如何判断Windows用于启动哪个磁盘

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

Windows公开了一个接口来发现这个? 与Windows API有多大,我希望有埋在那里可能会做的伎俩。

特里

ps刚刚读取硬盘的第一个扇区是不是陶醉于任何东西。 在我的开发箱中,我有两个硬盘,当我查看硬盘上的第一对扇区的内容时,我有一个标准的锅炉板MBR。

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

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

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

  1. 进入Control Panel
  2. System and Security
  3. Administrative Tools
  4. 启动System Configuration工具

如果您安装了多个Windows副本,那么您使用的将被命名为:

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

这取决于您用于启动Windows的磁盘驱动器的定义。 我可以在一个标准的BIOS系统上想到3个不同的答案(谁知道什么是EFI系统):

  1. 包含活动MBR的驱动器
  2. 活动分区与NTLDR(系统分区)
  3. Windows上的分区(启动分区)

2和3应该很容易找到 – 我不太确定1.尽管可以通过原始磁盘读取来查找MBR,但这并不意味着这次是BIOS启动设备,甚至下次(可以有多个带有MBR的磁盘)。

你甚至不能确定PC是从硬盘启动的 – 完全可以从软盘启动Windows。 在这种情况下,1和2在技术上都是软盘,但是3仍然是C:\ Windows。

您可能需要针对您的要求或目标更具体一点。

在安装了Vista的机器上没有boot.ini。

你想如何识别驱动器/分区:通过它被映射到的驱动器盘符(例如c:\,d :),或者通过它的硬件签名(哪个总线等)。

对于简单的情况检查出GetSystemDirectory

尝试HKEY_LOCAL_MACHINE \ SYSTEM \ Setup \ SystemPartition

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

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

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

无论如何,XP可以看看boot.ini文件。