找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3556|回复: 0
收起左侧

从系统中卸载 USB 设备

[复制链接]
ID:90014 发表于 2015-9-13 16:46 | 显示全部楼层 |阅读模式
          测试的过程中需要用到自动从系统中卸载 USB 设备,就从网上找来资料,查看 USB 设备的卸载过程。一般情况下,先查找总线类型,如果是 USB 设备,则可以考虑卸载。另外,需要检查这个设备是属于哪一种类型。用GetDriveType来获取存储设备的类型,必须是2(可移动设备)或5(CDROM)类型。因为这两种设备都涉及到了是否存在介质的问题,如果只是简单的采用Dir列举目录的方法,可能都会出错。甚至对于要列举的目录下没有文件存在时,采用列举目录方法来判断一个驱动器是否正常,都会出现误判。在判断完驱动器类型后,还可以通过GetVolumeInformation 来获取文件卷的信息,如磁盘序列号,文件系统类型等内容,进而通过GetDiskFreeSpaceEx这个函数,取得磁盘容量的大小及剩余容量的大小。至此,对于一个文件卷的基本信息都可以取得了。
下面要做的事情是检查该文件是否有被系统的其他进程占用。这个操作比较繁杂。首先取得当前进程的ProcessID,由此查找到系统的进程列表,并且采用循环的方法,从系统的进程列表中找出的所有使用该设备的进程。如果没有其他进程使用,则可以关闭该设备。否则失败。
当没有其他进程使用时,查找该设备的连接关系,即从磁盘接口类中找到该设备的物理设备名称,如...\\Device\Harddisk1\(lp2)VID_0x1023....类似的设备名称,通过查找其详细接口信息,找到其上层连接关系(CM_Get_Parent),即属于哪一个USB Storage接口,最后通过给该端口发送CM_Request_Device_Eject请求,完成卸载过程。
需要注意的是,当一个USB 端口安装有多个设备时,其中的一个设备卸载,会导致全部连接到该端口的设备都卸载掉,而不是单一的指定的设备。当然,如果其中有的设备在工作中,被系统的其他进程占用,都会导致卸载的失败。                                                                                                                    
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表