【我的】Window驱动开发——通过符号链接获取真实设备
作者:zcr214 时间:2016/5/5
我们想要把驱动绑定到指定的盘符,实际是绑定到它对应的真实设备卷,实际上windows用户看到的C盘D盘只是符号链接名,而真实设备通常是/Device/HarddiskVolume2,/Device/HarddiskVolume3等,符号链接名可以任意更改,但是真实设备卷却是不变的。而实际用户并不会知道哪个盘符对应哪个卷,所以需要我们通过符号链接来获取到真实设备卷。
1. 符号链接名与设备名
windows下的设备是以"\Device\[设备名]”形式命名的。例如磁盘分区的C盘,D盘的设备名称就是"\Device\HarddiskVolume2”,"\Device\HarddiskVolume3”。
当然也可以不指定设备名称,那么I/O管理器会自动分配一个数字作为设备的名称。例如"\Device\00000001",设备名并不容易记忆。
符号链接可以理解为设备的别名,更重要的是设备名,只能被内核模式下的其他驱动所识别,而别名可以被用户模式下的应用程序识别。“C:”就是一个符号链接名。而在驱动中,符号链接名是这样写的:
L”\\??\\c:” 对应 \??\c:
L”\\DosDevices\\HelloDDK” 对应 \DosDevices\HelloDDK
2. ZwOpenSymbolicLinkObject()打开符号链接对象
WDK提供了打开符号链接对象的接口函数ZwOpenSymbolicLinkObject(),其原型如下:
NTSTATUS
NTAPI
ZwOpenSymbolicLinkObject(
_Out_PHANDLE