windows下的设备是以"\Device\[设备名]”形式命名的。

例如磁盘分区的C盘,D盘的设备名称就是

"\Device\HarddiskVolume2”
"\Device\HarddiskVolume3”。

也可以不指定设备名称,那么I/O管理器会自动分配一个数字作为设备的名称。例如

"\Device\00000001"

设备名不容易记忆。

在驱动程序中,定义设备对象名称需要以L"\\device\\"开头,

定义符号链接的名称需要以L"\\dosDevices\\"开头,(注意dosDevices中的最后一个字符是s,然后IoCreateSymbolicLink函数返回失败,半天找不到原因);

或者以L"\\??\\"开头也可以。

符号链接可以理解为设备的别名,更重要的是,设备名只能被内核模式下的其他驱动所识别,而别名可以被用户模式下的应用程序识别。“C:”就是一个符号链接名。

而在驱动中,符号链接名是这样写的:

L”\\??\\c:”  ---> \??\c:
L"" --->\??\HelloDDK L”\\DosDevices\\HelloDDK” ---> \DosDevices\HelloDDK

在内核模式下,符号链接是以“\??\”开头的,如C盘就是"\??\C:",

在用户模式下,符号链接是以“\\.\”开头的,如C盘就是"\\.\C:".

因此在应用程序中,符号链接名:

L"\\\\.\\HelloDDK"-->\\.\HelloDDK
02-14 01:11