我需要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)。
Control Panel
System and Security
Administrative Tools
System Configuration
工具 如果您安装了多个Windows副本,那么您使用的将被命名为:
Windows 7 (F:\Windows) Windows 7 (C:\Windows) : Current OS, Default OS
这取决于您用于启动Windows的磁盘驱动器的定义。 我可以在一个标准的BIOS系统上想到3个不同的答案(谁知道什么是EFI系统):
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并键入bcdedit
或bcdedit \v
,这在XP上不起作用,但希望这不是问题。
无论如何,XP可以看看boot.ini
文件。