基于Windows NT的操作系统如何寻址设备?


9

我对像这样的符号感到困惑

多(0)磁盘(0)rdisk(0)分区(1)\ ...

\ Device \ HardDisk1 \ DR1
\ Device \ Video0

我只能在基于Windows NT的操作系统(例如Windows XP和Windows 7)的上下文中看到这些地址。这些地址的含义是什么,它们如何用于指代设备,例如硬盘,图形适配器,人机界面设备(键盘) ,鼠标等),网络适配器和其他硬件?


您打算在哪里以及如何计划提及他们?
KCotreau

有时,我收到使用这些名称引用设备的消息。我想了解的是这些地址的含义,如何使用这些符号来寻址其他设备,以及应用程序可能如何使用它们直接访问硬件(如果可能)。
bwDraco

Linux使用/dev节点来允许直接访问硬件。我想了解的是一种类似于Windows下寻址和访问硬件的机制。
bwDraco

就我所知,从Windows NT开始,Windows不允许您直接访问硬件。这就是它保护自己的方式。使用Windows 95/98 / ME,任何程序员都可以,并且允许他们使操作系统不稳定。解决方案是使所有内容都通过内核,然后让它确定执行是否安全。如果不是这样,它可能会引发错误,但至少可以在更大程度上保护自己免受不良编程的侵害。
KCotreau

@KCotreau:是的,但是无关紧要。您现在必须询问内核。但是,如果硬盘没有这样的名称,那么您根本就不会询问内核。它不会知道您在谈论哪个硬盘。
MSalters 2011年

Answers:


9

与普遍的看法相反,Windows内核确实有一个根目录文件(“文件”)系统。在* nix中,根为/,在Windows中为\。但是,Win32子系统不会公开它。您可以使用WinObj进行探索。

一些(可能是熟悉的)NT设备名称(M并且N只是整数):

  • \Device\HarddiskM\DRN:磁盘
  • \Device\HarddiskVolumeN:分区
  • \Device\CdRomN:光盘驱动器
  • \Device\KeyboardClassN:键盘
  • \Device\MountPointManager:不是设备,但是会跟踪存储设备
  • \Device\Null:消耗数据并输出空值(零)

\Device\HardDisk1\DR1Windows磁盘的真实名称,并且是旧名称-与Windows指代设备的方式无关,但与引导加载程序指代磁盘的方式无关。我不知道它是如何工作的(本页解释了其中的部分内容),但是Windows启动后并没有真正关心Windows。 multi(0)disk(0)rdisk(0)partition(1)

Windows的较新版本使用“启动配置数据”(BCD),该文件名为,BCD其格式类似于注册表的格式,而不是Boot.ini。它通常使用唯一标识符(GUID)来引用卷,而不是驱动器号或文件系统路径,这就是Windows的较新版本所使用的。


除了存储设备(例如\Device\Video0)以外的其他硬件呢?
bwDraco

@DragonLord:...那呢?不明白你的意思。
user541686 2011年

使用什么名称来指代键盘,鼠标,网络适配器和其他设备?
bwDraco

@DragonLord:好点,我补充一下。我只是专注于引导加载,没有注意到这个问题更笼统。
user541686 2011年

您提到的“根文件系统”称为对象管理器名称空间。通过单击WinObj链接并进行一些研究后,我发现了这一点。Windows NT在内部的工作方式非常有趣……
bwDraco

1

第一行来自Windows XP或Server 2003的boot.ini文件,位于Windows Vista,Windows 7和Server 2008中,已被BCD(引导配置数据存储)过时。系统驱动器。这样可以告诉Windows去哪里(磁盘和分区是什么)以查找需要引导的系统文件。

看看这里的“多”和“rdisk中”的详细说明。其余的意味着查看磁盘0(它们从0开始并从那里向上移动,您可以在磁盘管理器中看到它们的编号),分区1(与磁盘不同,这些磁盘从1开始编号并向上移动)。

http://support.microsoft.com/kb/102873

就设备枚举而言,这是一个非常复杂的编程主题,如果您希望爆炸,请在此处进行说明。您提供的格式是在注册表中如何将设备作为硬件ID进行寻址。

实际上,您可以查看此注册表项

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Enum

为了与任何错误匹配,您可能会在子键之一中获得“硬件ID”值,从而确定该错误可能指向的设备。


1
在第4.2.7 高级RISC计算规范由NetBSD Foundation在此转载,讲述了一个一切关于ARC路径。
JdeBP 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.