gpt4 book ai didi

c++ - 使用 WinApi 可靠地知道卷是否可移动

转载 作者:行者123 更新时间:2023-11-27 22:44:14 26 4
gpt4 key购买 nike

我在用

DeviceIoControl(dev, IOCTL_DISK_GET_DRIVE_GEOMETRY, NULL, 0, &driveInfo, sizeof(driveInfo), &dwResult, NULL)

检查 driveInfo.MediaTypeRemovableMedia 还是 FixedMedia,但似乎我所有的卷都“被视为”固定的:

\\.\C:      NTFS Fixed, this is ok - internal hard drive
\\.\D: NTFS Fixed, this is ok - internal hard drive
\\.\E: NTFS Fixed, this is ok - internal hard drive
\\.\F: NTFS Fixed, this is NOT ok, this is a USB external 2.5" hard drive

因此我的问题是:

是否有可靠的方法来了解卷是否可移动?

应该有办法,因为 Windows 确实区分可移动的(它们在时钟附近有一个图标“安全移除硬件并弹出媒体”)。

最佳答案

问题是您问错了问题。当他们使用术语时,“可移动”意味着媒体和媒体驱动器是分开的(如软盘驱动器或 CD-ROM)。任何不允许单个驱动器在不同时间保存不同媒体的东西都是“固定”驱动器。

根据你似乎想要的,我相信你想使用 SetupDiGetDeviceRegistryProperty使用 SPDRP_CAPABILITIES 标志。这将告诉您驱动器是否可以弹出其媒体(几乎等同于您已经找到的“可移动”),以及设备本身是否是可移动的(CM_DEVCAP_REMOVABLE).

不幸的是,Microsoft 的 SetupDi* 函数使用起来有点乱(我知道怎么说得好听)。他们有一些demo code它使用正确的函数并检索非常相似的信息,但代码也有些难看,因此可能需要一些研究和实验来修改它以获得您想要的。

关于c++ - 使用 WinApi 可靠地知道卷是否可移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45045670/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com