当我们连接可移动驱动器时,操作系统会为其分配驱动器号。其他方法是使用subst命令将本地文件夹映射到任何驱动器。 我正在为Explorer编写钩子,我需要区分这两个驱动器。 我尝试使用GetVolumePathName,但它无法正常运行虚拟驱动器。
如果有人知道解决方法,请告诉我。
谢谢。
答案 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然后它是可移动的。
它解决了我的目的。