Определение имени устройства 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.
Обратите внимание, что может возникнуть следующий сценарий:
- Пользователь A, который не работает в контексте LocalSystem, создает имя устройства в соответствующем пространстве имен локального MS-DOS устройства, и это имя устройства не существует в глобальном пространстве имен MS-DOS устройства.
- Пользователь 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.
Связанные разделы