每个卷都有自己的卷标,但不同卷的卷标有可能是相同的,所以操作系统使用卷GUID路径来唯一标识一个卷
系统将驱动器的盘符和卷名保存在注册表"HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices"路径下,当操作系统启动后就会根据这些信息创建与设备相对应的符号链接
"\\?\Volume{GUID}"和"盘符(C、D、E等等):"其实都是符号链接,它们链接的设备都是"\Device\HarddiskVolumeX",X为数字,"\Device\HarddiskVolume1"为第一个逻辑驱动器、"\Device\HarddiskVolume2"为第2个逻辑驱动器以此类推。这些由系统创建的符号链接都在对象目录"\GLOBAL??"下
可以使用DefineDosDevice函数将dwFlags参数设置为DDD_REMOVE_DEFINITION来删除符号链接(驱动器盘符或者卷名),比如:
//以下代码移除符号链接"D:",移除符号链接后将不能通过该盘符来访问文件了
DefineDosDevice(DDD_REMOVE_DEFINITION, _T("D:"), NULL);
也可以使用DefineDosDevice函数将lpTargetPath参数设置为设备名来创建符号链接(驱动器盘符或者卷名),比如:
//以下代码创建符号链接"Z:",以后可以使用盘符"Z:"来访问第2个逻辑驱动器
DefineDosDevice(DDD_RAW_TARGET_PATH, _T("Z:"), _T("\\Device\\HarddiskVolume2"));
不过需要注意的是DefineDosDevice函数创建的盘符只是临时的,系统重新启动后就没有了。如果想要永久的更改驱动器盘符使用SetVolumeMountPoint函数,因为系统规定一个驱动器只能分配一个驱动器号,所以如果要更改盘符的驱动器已经分配了驱动器号,需要使用DeleteVolumeMountPoint先删除当前盘符再使用SetVolumeMountPoint设置新盘符。