![基于 Windows NT 的操作系统如何寻址设备?](https://linux22.com/image/1282349/%E5%9F%BA%E4%BA%8E%20Windows%20NT%20%E7%9A%84%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%A6%82%E4%BD%95%E5%AF%BB%E5%9D%80%E8%AE%BE%E5%A4%87%EF%BC%9F.png)
我对这样的符号感到困惑
多(0)磁盘(0)rdisk(0)分区(1)\...
和
\设备\硬盘1\DR1 \设备\视频0
我仅在基于 Windows NT 的操作系统(例如 Windows XP 和 Windows 7)环境中看到这些地址。这些地址是什么意思,它们如何用来指代硬盘、图形适配器、人机接口设备(键盘、鼠标等)、网络适配器和其他硬件?
答案1
与普遍看法相反,Windows 内核做有一个根文件(“文件”)系统。在 *nix 中,根是/
,在 Windows 中是\
。不过,Win32 子系统不会公开它。您可以使用程序运行对象。
一些(可能熟悉的) NT 设备名称(M
和N
只是整数):
\Device\HarddiskM\DRN
:磁盘\Device\HarddiskVolumeN
:分区\Device\CdRomN
:光盘驱动器\Device\KeyboardClassN
:键盘\Device\MountPointManager
:不是设备,但跟踪存储设备\Device\Null
:消耗数据并输出空值(零)
\Device\HardDisk1\DR1
是个真的磁盘名称到 Windows并且multi(0)disk(0)rdisk(0)partition(1)
是遗产——这与如何视窗指的是设备,但如何引导加载程序指的是磁盘。它是如何工作的,我不知道(本页解释了其中的部分内容),但这并不是 Windows 在启动后真正关心的事情。
较新版本的 Windows 使用启动配置数据 (BCD),这是一种BCD
格式与注册表类似的文件,而不是Boot.ini
。它通常使用唯一标识符 (GUID) 来引用卷,而不是驱动器号或文件系统路径,这也是较新版本的 Windows 所使用的。
答案2
第一行来自 Windows XP 或 Server 2003 的 boot.ini 文件,位于系统驱动器的根目录中,该行已被 Windows Vista、Windows 7 和 Server 2008 中的 BCD(启动配置数据存储)所淘汰。它告诉 Windows 去哪里(哪个磁盘和分区)查找启动所需的系统文件。
看这里详细解释“multi”和“rdisk”。其余的意思是查看磁盘 0(它们从 0 开始向上移动,您可以在磁盘管理器中看到它们的编号),分区 1(与磁盘不同,它们从 1 开始编号并向上移动)。
http://support.microsoft.com/kb/102873
就设备枚举而言,它是一个非常复杂的编程主题,其解释如下这里如果你想让你的头爆炸。你给出的格式是如何在注册表中将设备寻址为硬件 ID。
实际上,您可以查看此注册表项
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum
为了匹配任何错误,您可以在其中一个子键中获得“硬件ID”值,以准确确定错误可能涉及哪个设备。