注意前提:插入电脑的u盘是处于“禁用”状态的!!当u盘没有被禁用时,插入到电脑,windows会发送 WM_DEVICECHANGE 消息。
但是如果u盘是被禁用的,就不会发送此消息了,那么此时发送的是什么消息呢?我发现,当一只被禁用的u盘插入电脑时,设备管理器那里会立即刷新并显示这只u盘,当拔出u盘的时候,这只禁用的u盘又会立即消失,如果不是设备管理器在后台不断扫描usb设备列表的话(我相信不可能这样做),就是说明当u盘(已经被禁用的u盘)插入电脑时,系统肯定有消息通知各个应用程序。补充:所谓的“插入禁用的u盘”,是指,一只u盘在设备管理器被禁用之后,没有启用就被拔出电脑。当同一台电脑重新插入这只u盘的时候,该u盘的状态依然是“禁用”的,只有到设备管理器“启用”后才能使用。

解决方案 »

  1.   

    从驱动层解释的话,U盘插入时是通过WDK驱动收到一个PNP的电源神马即插即用消息的,那些都是驱动层的IRP消息,设备驱动处理好消息后,挂载在其上的功能驱动就会接收到其返回,这些功能驱动一般都有接口,应用程序只需要读取其接口就能检测到,貌似是这个样
      

  2.   

    插入U盘的时候,
    因为本身是属于 USB接口,那么首先会有 USB 设备 的消息.
    接下来,因为是存储类设备,所以会有一个 USBSTOR 设备的消息,这个在注册表里有节点,但 SetupDiXXX函数不认他,我研究过,和 DiskDrive 靠近(通过WDM的 类过滤驱动)。如果设备管理器没有找到匹配的设备配置信息(注册表某项),那么就会提示发现新硬件(前一步也如此),然后继续安装驱动,对于U盘,系统自带驱动,就是个配置过程。
    如果发现了对应的配置信息,那么就应用,当前是禁用,那么就直接禁用了。否则继续后续的驱动加载,比如文件系统。