На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

Пространство имен Windows


Существует две основные категории соглашений о пространствах имен, используемых в API-интерфейсах Windows, обычно называемые пространствами имен NT и пространствами имен Win32. Пространство имен NT было разработано как пространство имен самого низкого уровня, на котором могли существовать другие подсистемы и пространства имен, включая подсистему Win32 и, в целом, пространства имен Win32. POSIX - это еще один пример подсистемы в Windows, построенной поверх пространства имен NT. Ранние версии Windows также определяли несколько предопределенных или зарезервированных имен для определенных специальных устройств, таких как порты связи (последовательные и параллельные) и консоль отображения по умолчанию, как часть пространства имен устройства NT, и по-прежнему поддерживаются в текущих версиях Windows для обратной совместимости.

Пространства имен файлов Win32

Обратите внимание, что эти примеры работы использования с функциями API Windows не обязательно работают с приложениями оболочки Windows, такими как проводник Windows. По этой причине существует более широкий диапазон возможных путей, чем обычно доступно из приложений оболочки Windows, и приложения Windows, которые используют это преимущество, могут быть разработаны с использованием этих соглашений о пространствах имен.

Для файлового ввода и вывода,"\\?\ "префикс строки пути указывает API-интерфейсам Windows отключить весь разбор строк и отправить строку, которая следует за ним прямо в файловую систему. Например, если файловая система поддерживает большие пути и имена файлов, можно превысить ограничения MAX_PATH, которые в противном случае применяются API-интерфейсами Windows. Дополнительные сведения об ограничении нормального максимального пути смотри в предыдущей статье.

Потому что он отключает автоматическое расширение строки пути,"\\?\ "префикс также позволяет использовать".." и." "в именах путей, которые могут быть полезны, если вы пытаетесь выполнить операции с файлом с этими в противном случае зарезервированными описателями относительного пути как часть полного пути. Многие, но не все API ввода/вывода поддерживают"\\?\ "; чтобы быть уверенным, вы должны посмотреть справочный раздел для каждого API.

Пространства имен устройств Win32

“\\.\ "префикс дает доступ к пространству имен устройств Win32 вместо пространства имен файлов Win32. Таким образом, доступ к физическим дискам и томам осуществляется напрямую, без использования файловой системы, если API поддерживает этот тип доступа. Таким образом можно получить доступ ко многим устройствам, кроме дисков (например, с помощью функций CreateFile и DefineDosDevice).

Например, если вы хотите открыть последовательный порт связи системы 1, Вы можете использовать "COM1" в вызове функции CreateFile. Это работает, потому что COM1-COM9 являются частью зарезервированных имен в пространстве имен NT, хотя с помощью"\\.\ "префикса все также будет работать с этими именами устройств. Для сравнения, если у вас установлена 100-Портовая плата последовательного расширения и вы хотите открыть COM56, Вы не можете открыть ее с помощью "COM56", потому что нет предопределенного пространства имен NT для COM56. Вам нужно будет открыть его с помощью"\\.\ COM56 "потому что"\\.\ "переходит непосредственно в пространство имен устройства, не пытаясь найти предопределенный псевдоним.

Другой пример использования пространства имен устройств Win32 - использование функции CreateFile с"\\.\PhysicalDiskX" (где x-действительное целое число) или "\\.\CdRomX". Это позволяет получить доступ к этим устройствам напрямую, минуя файловую систему. Это работает, потому что эти имена устройств создаются системой, поскольку эти устройства перечисляются, и некоторые драйверы также создают другие псевдонимы в системе. Например, драйвер устройства, реализующий имя " c:\", имеет собственное пространство имен, которое также является файловой системой.

API-интерфейсы, которые проходят через функции createfile, как правило, работают с "\\.\ "префиксом, потому что CreateFile-это функция, используемая для открытия файлов и устройств, в зависимости от используемых параметров.

Если вы работаете с функциями API Windows, вы должны использовать"\\.\ "префикс только для устройств доступа, а не для файлов. Большинство API не поддерживают"\\.\"; распознавать его будут только те, которые предназначены для работы с пространством имен устройства. Всегда проверяйте справки для каждого API, чтобы быть уверенным.

Пространства имен NT

Есть также API, которые позволяют использовать соглашение о пространстве имен NT, но Диспетчер объектов Windows делает это ненужным в большинстве случаев. Для иллюстрации, это полезно для просмотра пространств имен Windows в обозревателе объектов системы с помощью Windows утилиты sysinternals утилиту WinObj. Когда вы запустите этот инструмент, что вы видите, является пространством имен НТ, начиная с корневого, или "\". Подпапка под именем "Global??" где находится пространство имен Win32.

Именованные объекты устройства будут находиться в пространстве имен NT в «устройство» подкаталог. Здесь вы также можете найти Serial0 и Serial1, объектов устройства, представляющее первые два com-порта, если они присутствуют на вашей системе. Объект устройства, представляющий том, будет что-то вроде "HarddiskVolume1", хотя числовой суффикс может отличаться. Имя " DR0 "в подкаталоге" Harddisk0 " является примером объекта устройства, представляющего диск и так далее.

Чтобы сделать эти объекты устройств доступными для приложений Windows, драйверы устройств создают символическую ссылку (символическую ссылку) в пространстве имен Win32 " Global?? "для их устройства объектов. Например, COM0 и COM1 в разделе " Global?? "подкаталог просто симлинки на Serial0 и Serial1, "С:" - это симлинк на HarddiskVolume1, "Physicaldrive0" - это симлинк на DR0, и так далее. Без символической ссылки указанное устройство " Xxx " не будет доступно ни одному приложению Windows, использующему соглашения о пространстве имен Win32, как описано выше. Однако дескриптор может быть открыт для этого устройства с помощью любых API, которые поддерживают абсолютный путь пространства имен NT формата "\Device\Xxx".

С добавлением многопользовательской поддержки через службы терминалов и виртуальные машины возникла необходимость виртуализации корневого устройства в рамках всей системы в пространстве имен Win32. Это было сделано путем добавления символьной ссылки с именем "GLOBALROOT" в пространство имен Win32, которое вы можете увидеть в " Global??"подкаталоге и можете получить доступ через путь"\\?\GLOBALROOT". Этот префикс гарантирует, что следующий за ним путь будет выглядеть в истинном корневом пути System object manager, а не в пути, зависящем от сеанса.



тегистатьи IT, windows, пространство имен, теория





Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Парсим xml отзывов яндекс маркета
Узнать Google Client ID с помощью JS и PHP


© upread.ru 2013-2019
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.