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


Общие сведения о 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 . Дополнительные сведения см. в пакете SDK для Microsoft Windows.