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


Общие сведения об именах устройств 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.