我正在研究 Windows NT 架构。我想知道“Win32”命名空间和 nt 命名空间中的“\Global??”命名空间之间的关系是什么?据我所知,win32 命名空间映射到“\Global??”命名空间。
答案1
我不确定我是否会说 Win32 命名空间“映射到\Global??
”命名空间。相反,目录中的符号链接 \Global??
用于解释传递给的设备名称CreateFile
。
当您尝试打开文件对象到设备时,中的符号链接\Global??
定义等效的内部设备名称。会发生一种奇怪的转换:假设您要打开一个我们通常称为的句柄COM1:
。您必须传递给 CreateFile 的名称将是\\.\COM1
。\\.
将更改为\Global??
,然后搜索名为的符号链接。\Global??\COM1
符号链接表示相应设备对象的名称是\Device\Serial0
(或任何名称)。
请注意,\\
实际上是引入 UNC(通用名称约定)名称的语法。后面的句点\\
表示“在此机器上”。您可能知道,对于文件,后面可以显示远程服务器名称\\
。
无论如何,符号链接对象的值是串行端口驱动程序创建的代表特定串行端口的设备对象的名称。您可以在\Device
对象命名空间的目录中找到这些名称。当它创建设备对象和该对象的名称时,串行端口驱动程序还会创建相应的符号链接对象。
此机制不适用于其他 Win32 可见对象。例如,如果您使用 CreateEvent 创建命名事件对象,则其名称将默认显示\Sessions\<your session number>\BaseNamedObjects
。这里不涉及符号链接。