Поделиться через


Определение имени устройства MS-DOS

Имя устройства MS-DOS — это соединение, указывающее на путь устройства MS-DOS. Эти соединения составляют пространство имен устройства MS-DOS. Вызовите функции DefineDosDevice и SetVolumeMountPoint для создания и изменения этих переходов. DeleteVolumeMountPoint удаляет соединение, созданное SetVolumeMountPoint, а DefineDosDevice удаляет соединения, которые он создает.

После определения имени устройства MS-DOS оно остается видимым для всех процессов.

  • Все устройства MS-DOS определяются Windows с помощью идентификатора аутентификации. Идентификатор проверки подлинности — это LUID (локальный уникальный идентификатор), связанный с каждым сеансом входа при процессе создания.
  • Видимость имени устройства MS-DOS классифицируется как глобальная или локальная и определяется по его включению в пространства имен Глобальных устройств MS-DOS и Локальных устройств MS-DOS. Доступ к содержимому устройств MS-DOS в глобальном пространстве имен можно получить всеми пользователями, а содержимое MS-DOS устройств в локальном пространстве имен можно получить только пользователю, маркер доступа которого содержит идентификатор проверки подлинности, связанный с этим локальным пространством имен MS-DOS устройства.

Несколько локальных пространств имен устройств MS-DOS и только одно глобальное пространство имен устройств MS-DOS может существовать одновременно и на одном компьютере.

Обратите внимание, что только процессы, выполняемые в контексте LocalSystem, могут вызывать DefineDosDevice для создания устройства MS-DOS в пространстве имен глобального MS-DOS устройства. Кроме того, локальное пространство имен устройства MS-DOS, соответствующее определенному идентификатору аутентификации, удаляется, когда удаляется последняя ссылка на этот идентификатор аутентификации.

Когда код запрашивает существующее имя устройства MS-DOS путем вызова QueryDosDevice, он сначала выполняет поиск в пространстве имен локального MS-DOS устройства. Если он не найден, функция будет выполнять поиск по пространству имен глобального устройства MS-DOS. Когда код запрашивает все существующие имена устройств MS-DOS с помощью этой функции, список возвращаемых имен зависит от того, выполняется ли он в контексте LocalSystem. В этом случае будут возвращены только имена устройств MS-DOS, включенные в глобальное пространство имен MS-DOS устройства. В противном случае будет возвращено объединение имен устройств в глобальных и локальных MS-DOS пространствах имен устройств. Если имя устройства существует в обоих пространствах имен, QueryDosDevice вернет запись в пространстве имен локального MS-DOS устройства. Это также относится к списку всех имен устройств MS-DOS, возвращаемых GetLogicalDrives и GetLogicalDriveStrings.

Обратите внимание, что может возникнуть следующий сценарий:

  1. Пользователь A, который не работает в контексте LocalSystem, создает имя устройства в соответствующем пространстве имен локального MS-DOS устройства, и это имя устройства не существует в глобальном пространстве имен MS-DOS устройства.
  2. Пользователь B, работающий в контексте LocalSystem, создает то же имя устройства в пространстве имен устройства Global MS-DOS.

В этом сценарии пользователь A не получит доступ к имени устройства в глобальном пространстве имен MS-DOS устройства, пока он не удаляет или переименовывает имя устройства в своем локальном пространстве имен MS-DOS устройства. Чтобы снизить вероятность возникновения этого сценария, MS-DOS буквы дисковых устройств должны быть выделены в пространстве имен глобальных устройств MS-DOS, начиная с C: и заканчивая Z:. Эта последовательность должна быть изменена на обратную для выделения букв диска MS-DOS в пространстве имен устройства MS-DOS локальной системы.

Если вы не работаете в контексте LocalSystem, DefineDosDevice не позволит вам определить имя устройства в пространстве имен локального MS-DOS устройства, если это имя устройства уже существует в ваших локальных или глобальных пространствах имен MS-DOS устройств. Вызовите QueryDosDevice перед вызовом DefineDosDevice, чтобы определить, существует ли имя устройства в пространствах имен устройств MS-DOS.

Наименования Файлов, Путей и Пространств Имен