我需要找到一种方法来以编程方式确定 Windows 使用哪个磁盘驱动器启动。换句话说,我需要一种从 Windows 中确定 BIOS 使用哪个驱动器来启动整个系统的方法。
Windows 是否公开了一个接口来发现这一点?鉴于 Windows API 有多大,我希望其中埋藏着一些东西可以解决这个问题。
特里
附注仅读取硬盘的第一个扇区并不能带来任何好处。在我的开发盒上,我有两个硬盘,当我查看其中一个硬盘上前几个扇区的内容时,我有一个标准的样板 MBR。
编辑澄清一些事情。 我想要识别设备的方式是使用一个字符串来识别物理磁盘驱动器(而不是逻辑磁盘驱动器)。物理磁盘驱动器的格式为“\.\PHYSICALDRIVEx”,其中 x 是数字。另一方面,逻辑驱动器由“\.\x”形式的字符串标识,其中 x 是驱动器号。
编辑讨论一些被抛弃的想法。 知道 Windows 用于启动哪个逻辑卷在这里对我没有帮助。原因如下。假设 C: 使用镜像 RAID 设置。现在,这意味着我们至少有两个物理驱动器。现在,我获得了从逻辑驱动器到物理驱动器的映射,并且发现该卷使用了两个物理驱动器。 Windows 使用哪一个来启动?当然,这是假设 Windows 用于启动的物理驱动器与包含 MBR 的物理驱动器相同。
Control Panel
System and Security
Administrative Tools
System Configuration
工具如果您安装了多个 Windows 副本,则启动时使用的副本将被命名为:
Windows 7 (F:\Windows)
Windows 7 (C:\Windows) : Current OS, Default OS
除非 C: 不是 Windows 启动的驱动器。
解析 %SystemRoot% 变量,它包含 windows 文件夹的位置(即 c:\windows)。
您可以使用 WMI 来解决这个问题。 Win32_BootConfiguration 类将告诉您 Windows 启动的逻辑驱动器和物理设备。具体来说,标题属性将告诉您从哪个设备启动。
例如,在 powershell 中,只需输入 gwmi Win32_BootConfiguration 即可获得答案。
这取决于您对 Windows 用于启动的磁盘驱动器的定义。我可以在标准 BIOS 系统上想到 3 个不同的答案(谁知道 EFI 系统是做什么的):
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
更简单的方法 在开始菜单中搜索下载,然后单击搜索结果中的下载以查看它将带您到哪里,该驱动器将在资源管理器中突出显示。
在 Windows 10 上。 打开“计算机管理” 在“页面左上角”列表中查找“存储” 选择“磁盘管理” 在显示磁盘和分区列表的页面部分中,找到分区分配为驱动器 C 的磁盘: 在包含 C: 分区的磁盘上 使用鼠标右键选择包含磁盘编号、驱动器类型和大小(以 GB 为单位)的方形部分。当菜单打开时,选择属性。 将打开一个窗口,显示使用的驱动器硬件。
您可以尝试使用简单的命令行。 bcdedit就是你所需要的,只需以管理员身份运行cmd并输入
bcdedit
或bcdedit /v
,这在XP上不起作用,但希望这不是问题。
无论如何,对于 XP,您可以查看
boot.ini
文件。