Я изучаю архитектуру Windows NT. Я хотел бы знать, какова связь между пространством имен "Win32" и "\Global??"пространство имен в пространстве имен NT? Насколько я понимаю, пространство имен win32 отображается в "\Global??"пространство имен.
1 ответ
Я не уверен, что скажу, что пространство имен Win32 "отображается в \Global??
"пространство имен. Скорее символические ссылки в \Global??
каталог используется для интерпретации имен устройств, передаваемых в CreateFile
.
При попытке открыть файловый объект на устройстве символические ссылки в \Global??
определить эквивалентные внутренние имена устройств. Происходит странный перевод: допустим, вы хотите открыть дескриптор того, что мы обычно называем COM1:
Имя, которое вы должны передать CreateFile, будет \\.\COM1
. \\.
изменяется на \Global??
и затем выполняется поиск символической ссылки с именем \Global??\COM1
Символическая ссылка говорит, что имя соответствующего объекта устройства - \Device\Serial0
(или как оно там).
Обратите внимание, что \\
на самом деле является синтаксисом, который вводит имя UNC (Universal Name Convention). Точка после \\
означает "на этой машине". Возможно, вы знаете, что для файлов имя удаленного сервера может указываться после \\
.
В любом случае значение объекта символьной ссылки - это имя объекта устройства, созданного драйвером последовательного порта, который представляет конкретный последовательный порт. Вы можете найти эти имена в каталоге \Device
пространства имен объекта. Когда он создает объект устройства и имя этого объекта, драйвер последовательного порта также создает соответствующий объект символической ссылки.
Этот механизм не используется для других Win32-видимых объектов. Например, если вы создаете именованный объект события с помощью CreateEvent, его имя будет отображаться в \Sessions\<your session number>\BaseNamedObjects
по умолчанию. Здесь нет символических ссылок.