Определение имени устройства 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 в локальном пространстве имен может обращаться только пользователь, чей маркер доступа содержит идентификатор authenticationID, связанный с этим локальным пространством имен устройств MS-DOS.
Одновременно и на одном компьютере может существовать несколько локальных пространств имен устройств MS-DOS и только одно глобальное пространство имен устройств MS-DOS.
Обратите внимание, что только процессы, выполняющиеся в контексте LocalSystem, могут вызывать DefineDosDevice , чтобы создать устройство MS-DOS в глобальном пространстве имен устройства MS-DOS. Кроме того, при удалении последней ссылки на этот идентификатор authenticationID удаляется локальное пространство имен устройства 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.
- Пользователь Б, работающий в контексте LocalSystem, создает то же имя устройства в глобальном пространстве имен устройств MS-DOS.
В этом сценарии пользователь А не будет иметь доступа к имени устройства в пространстве имен глобального устройства MS-DOS, пока он не удалит или не переименует имя устройства в своем локальном пространстве имен ms-DOS Device. Чтобы снизить вероятность возникновения этого сценария, в глобальном пространстве имен устройств MS-DOS должны быть выделены буквы диска MS-DOS, начиная с C: и заканчивая Z:. Эта последовательность должна быть отменена для выделения букв диска MS-DOS в пространстве имен локального устройства MS-DOS.
Если вы не работаете в контексте LocalSystem, DefineDosDevice не позволит определить имя устройства в пространстве имен локального устройства MS-DOS, если это имя устройства уже существует в локальном или глобальном пространствах имен устройств MS-DOS. Вызовите QueryDosDevice перед вызовом DefineDosDevice , чтобы определить, существует ли имя устройства в пространствах имен устройств MS-DOS.
Связанные темы