2008-09-02 89 views
8

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

Windows是否暴露了一个接口来发现它?随着Windows API的规模有多大,我希望有一些东西埋在那里,可以做到这一点。

特里

p.s.只是读取硬盘的第一个扇区并不会令人陶醉。在我的开发箱中,我有两个硬盘,当我查看两个硬盘中的第一对扇区的内容时,我有一个标准的锅炉板MBR。

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

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

+0

在命令行(即运行)中,输入cmd,输入systeminfo return。给它一分钟来编译列表和答案更详细。 – 2013-10-01 15:22:20

回答

5

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

1

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

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

对于简单的情况下,签出GetSystemDirectory

+0

简单案例: char path [MAX_PATH]; GetSystemDirectoryA(path,MAX_PATH); 更多信息:http://msdn.microsoft.com/en-us/library/ms724373(VS.85).aspx – 2009-04-27 16:48:45

1

尝试HKEY_LOCAL_MACHINE \ SYSTEM \ SETUP \ SYSTEMPARTITION

+0

您确定密钥表示uefi系统上的值吗?在我的,它指向hardiskvolume2这是winre分区。 – user2284570 2016-01-08 19:30:03

2

您可以使用WMI摸不着头脑。 Win32_BootConfiguration类将告诉您Windows引导的逻辑驱动器和物理设备。具体来说,标题属性会告诉你哪个设备您正在启动。

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

3

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

  1. 包含活动MBR
  2. 活动分区,用NTLDR(系统分区)
  3. 驱动
  4. 它(引导分区)

2和3的Windows分区应该很容易找到 - 我不太确定1.虽然你可以阅读找到一个MBR原始磁盘,即没有按这意味着这次是BIOS启动设备,甚至下一次(你可能有多个带有MBR的磁盘)。

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

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

6
  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 
0

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

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

相关问题