llztt 发表于 2009-12-17 18:22:10

请教如何检测移动存储设备的存在与否??

本帖最后由 llztt 于 2009-12-17 23:36 编辑

机房有时需要禁用U盘、移动硬盘等移动存储,于是试图做个常驻内存的程序,循环检测是否存在这些设备然后直接锁定,但检测代码遇到难题。。

DriveGetDrive( "REMOVABLE" ):会包含软驱,因部分机器还有软驱(老机房),在循环检测时,软驱读盘一直响个不停。。。放弃之。。

Pusofalse大大的安全删除U盘,测试通过了,API好复杂,呵呵,不知道可否精简出个单函数,只返回个已有移动U盘的数组啊,因为要循环检测,怕占系统资源,呵呵

pusofalse 发表于 2009-12-17 19:07:28

插入或弹出U盘(或其他设备)时,系统会广播WM_DEVICECHANGE (0x219)消息,可以创建一个GUI窗口,并注册接收WM_DEVICECHANGE消息。当消息出现时,调用_CM_Enumerate_Physical_Disks函数枚举物理磁盘(不包含软盘),返回一个2维数组,其中的$aArray元素如果为TRUE,说明此盘是U盘或移动硬盘。如果要安全删除,用_CM_Query_And_Remove_SubTree/_CM_Request_Device_Eject两个函数。强制卸载用_SetupDiRemoveDevice(指定第3个参数为TRUE为强制卸载)。

llztt 发表于 2009-12-17 23:35:52

呵呵,万分感谢哈,先结贴,再细看
大大是总版主不缺钱,就不给你加了哈

星雨朝霞 发表于 2009-12-18 09:21:08

学习了:face (35):

jszsj 发表于 2009-12-19 14:55:52

很好啊,我也来学习一下,回去试试看
页: [1]
查看完整版本: 请教如何检测移动存储设备的存在与否??