【问题标题】:Working with USB in C (Windows)在 C 中使用 USB (Windows)
【发布时间】:2009-04-04 03:06:23
【问题描述】:

这是几个问题汇编成一篇文章。

1) 判断 USB 大容量存储设备是否已插入的最佳方法是什么。

2) 将数据写入 USB 驱动器的最佳方法是什么

3) 你能像对待普通内存一样对待 USB 驱动器上的内存吗? (我可以像 malloc 一样使用和或直接用值 / 和或将其归零吗?)

【问题讨论】:

    标签: c windows usb


    【解决方案1】:

    USB 驱动器显示为驱动器号。您可以使用GetDriveType API 检测它可能是 USB 设备。然而,这只告诉你它是可移动的,而不是它实际上是一个 USB 驱动器。要说明这一点,您可能需要查看 SetupDiGetDeviceRegistryProperty 函数(引用自 GetDriveType MSDN 参考)。此外,可能安装的磁盘不是驱动器号,或者驱动器号不代表磁盘安装,因此要查找所有 USB 驱动器,您需要查看其他一些 SetupDi... 功能。

    因为它是一个驱动器号,所以读取和写入 USB 驱动器的常用方法是使用文件系统函数,例如 fopen 或 Windows CreateFile。如果您想像记忆一样直接写入它,您可以创建一个跨越整个设备的文件,然后对该文件进行内存映射。但是,我不建议这样做,除非在专门的应用程序中,因为如果出现 I/O 错误(包括例如用户拔出驱动器),那么您的程序将出现 SEH 异常,这会带来很多复杂性最好避免。

    【讨论】:

      【解决方案2】:

      您可能想看看HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR。它会告诉您哪些 USB 存储设备是已知的。这些条目都包含一个 ParentIdPrefix。如果驱动器当前存在,则可以在 HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices 值的数据部分找到。

      【讨论】:

        猜你喜欢
        • 2011-01-12
        • 2011-05-03
        • 1970-01-01
        • 1970-01-01
        • 2018-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-17
        相关资源
        最近更新 更多