如何以编程方式区分由subst命令创建的虚拟驱动器和实际可移动驱动器

时间:2014-11-17 08:31:06

标签: c++ windows winapi hook

当我们连接可移动驱动器时,操作系统会为其分配驱动器号。其他方法是使用subst命令将本地文件夹映射到任何驱动器。 我正在为Explorer编写钩子,我需要区分这两个驱动器。 我尝试使用GetVolumePathName,但它无法正常运行虚拟驱动器。

如果有人知道解决方法,请告诉我。

谢谢。

1 个答案:

答案 0 :(得分:1)

我通过添加一个额外的验证步骤找到了问题的答案。

假设我将c:\ Folder1映射到z:。

我有一个路径z:\ file1.txt。如果我尝试使用API​​ GetVolumePathName()来获取挂载点,那么它会失败,所以我猜测z:\只不过是指向其他驱动器中某个文件夹的虚拟驱动器。

但如果我有一个路径z:\ Folder2 \ file1.txt,那么GetVolumePathName()会将Mount Point作为z:\ Folder2。我不懂为什么。但要验证它是否实际指向任何设备卷,我使用API​​ GetVolumeNameForVolumeMountPoint()来获取Mount Point的卷名返回上方。如果Mount Point适用于任何设备,则它返回该设备的实际卷名GUID,否则它将失败(对于虚拟驱动器)。

现在要知道如果返回上面的挂载点是FIXED还是REMOVABLE,请使用GetDriveType() DRIVE_FIXED然后它是固定驱动器其他 DRIVE_REMOVABLE然后它是可移动的。

它解决了我的目的。