Общие сведения об именах устройств MS-DOS
Именованный объект устройства, созданный драйвером без WDM, обычно имеет имя устройства MS-DOS. Имя устройства MS-DOS — это символьная ссылка в диспетчере объектов с именем в формате \DosDevices\DosDeviceName.
Примером устройства с именем устройства MS-DOS является последовательный порт COM1. Он имеет имя устройства MS-DOS \DosDevices\COM1. Аналогичным образом диск C имеет имя \DosDevices\C:.
Драйверы WDM обычно не предоставляют имена устройств MS-DOS для своих устройств. Вместо этого драйверы WDM используют подпрограмму IoRegisterDeviceInterface для регистрации интерфейса устройства. Интерфейс устройства определяет устройства по их возможностям, а не по определенному соглашению об именовании. Дополнительные сведения см. в разделе Классы интерфейса устройства.
Драйверы должны указывать имя устройства MS-DOS только в том случае, если устройство должно иметь определенное известное имя устройства MS-DOS для работы с программами в пользовательском режиме.
Драйвер предоставляет имя устройства MS-DOS для объекта устройства с помощью процедуры IoCreateSymbolicLink для создания символической ссылки на устройство. Например, в следующем примере кода создается символьная ссылка из \DosDevices\DosDeviceName на \Device\DeviceName.
UNICODE_STRING DeviceName;
UNICODE_STRING DosDeviceName;
NTSTATUS status;
RtlInitUnicodeString(&DeviceName, L"\\Device\\DeviceName");
RtlInitUnicodeString(&DosDeviceName, L"\\DosDevices\\DosDeviceName");
status = IoCreateSymbolicLink(&DosDeviceName, &DeviceName);
if (!NT_SUCCESS(status)) {
/* Symbolic link creation failed. Handle error appropriately. */
}
Обратите внимание, что система поддерживает несколько версий каталога \DosDevices . Убедитесь, что драйвер создает символические ссылки в нужной версии. Дополнительные сведения см. в статье Локальные и глобальные имена устройств MS-DOS.
Чтобы получить доступ к пространству имен DosDevices из пользовательского режима, укажите \\.\ при открытии имени файла. Вы можете открыть соответствующее устройство в пользовательском режиме, вызвав CreateFile().
Например, в следующем примере кода устройство \\DosDevices\\DosDeviceName открывается в пользовательском режиме.
file = CreateFileW(L"\\\\.\\DosDeviceName",
GENERIC READ | GENERIC WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL);
Символьную ссылку также можно создать из приложения пользовательского режима с помощью процедуры DefineDosDevice в пользовательском режиме. Дополнительные сведения см. в Microsoft Windows SDK.