快速插入和拔出 USB 时卡住 GetVolumeInformationW

GetVolumeInformationW stuck when plugging USB in and out quickly

我试图在使用 Microsoft minispy 示例附加文件系统之前确定文件系统是否可访问。为了简短起见,我提供了一个设备名称路径,例如 \Device\HarddiskVolume4\。我想我可以使用 FilterGetDosName 获取一致的根路径,然后使用 GetVolumeInformationW 确定是否实际附加了该卷;

BOOL result = GetVolumeInformationW(rootPath, NULL, 0, NULL, NULL, NULL, NULL, 0);

但是,我的问题是,如果我快速插入和拔出 USB。它在尝试获取数据时卡在此处,但卷已断开连接。在连接我的微过滤器之前,我如何安全地确定是否连接了一个卷?

有一个名为:GetLogicalDriveStringsW 的函数,用于获取设备的路径名,而不是像 OP 中所述那样使用非持久性设备名。在单独处理每个驱动器并确定差异的一些逻辑之后,以便您可以连接到新设备,您使用 GetVolumeInformationW(letter.c_str(), NULL, NULL, NULL, NULL, NULL, NULL, NULL);

我在写这篇文章时遇到的其他错误 post 与这个问题无关。要点是:使用 GetLogicalDriveStringsWGetVolumeInformationW.