当我们附加可移动驱动器时,操作系统会为其分配驱动器号。另一种方法是使用 subst 命令将本地文件夹映射到任何驱动器。 我正在编写资源管理器的 Hook ,我需要在其中区分这两个驱动器。 我尝试使用 GetVolumePathName,但它无法为虚拟驱动器正常工作。
最佳答案
我通过添加一个额外的验证步骤找到了问题的答案。
假设我将 c:\Folder1 映射到 z:。
我有一个路径 z:\file1.txt。如果我尝试使用 API GetVolumePathName() 获取挂载点,那么它会失败,所以我可以猜测 z:\只不过是指向其他驱动器中某个文件夹的虚拟驱动器。
但是如果我有一个路径 z:\Folder2\file1.txt,那么 GetVolumePathName() 会给我安装点作为 z:\Folder2。我不懂为什么。但是为了验证它是否真的指向任何设备卷,我使用了 API GetVolumeNameForVolumeMountPoint() 来获取上面返回的挂载点的卷名。如果挂载点用于任何设备,则它会返回该设备的实际卷名 GUID,否则它会失败(对于虚拟驱动器)。
现在要知道上面的挂载点返回是 FIXED 还是 REMOVABLE,如果它返回,请使用 GetDriveType() DRIVE_FIXED 那么它是固定驱动器 DRIVE_REMOVABLE 然后它是可移动的。
它解决了我的目的。
关于c++ - 如何以编程方式区分 subst 命令创建的虚拟驱动器和实际可移动驱动器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26968447/