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。