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 设备名称。

驱动程序使用 IoCreateSymbolicLink 例程为设备对象提供 MS-DOS 设备名称,以创建指向设备的符号链接。 例如,下面的代码示例创建从 \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。