我先在用 wm_driverCHANGE得到usb的  HANDLE hDevice
   先请问高手,现在我需要维护一个LIST表来维护所有插上来的USB,  其中需提供删除功能。
   我的想法是  通过捕获DBT_DEVICEREMOVECOMPLETE消息来 维护删除LIST中的信息, 要怎样的代码才能使USB删除,并发送
   DBT_DEVICEREMOVECOMPLETE消息
       万分感谢,在线等。

解决方案 »

  1.   

    就是选那个方法能够移除USB,和拔出一样效果,能够发生DBT_DEVICEREMOVECOMPLETE事件。
      

  2.   

     SP_PROPCHANGE_PARAMS spPropChangeParams ;
      spPropChangeParams.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER);
      spPropChangeParams.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE ;
      spPropChangeParams.Scope = DICS_FLAG_GLOBAL ;
      spPropChangeParams.HwProfile = 0; // current hardware profile
      spPropChangeParams.StateChange = DICS_DISABLE   if( !SetupDiSetClassInstallParams(hDevInfo, &spDevInfoData,
      // note we pass spPropChangeParams as SP_CLASSINSTALL_HEADER
      // but set the size as sizeof(SP_PROPCHANGE_PARAMS)
      (SP_CLASSINSTALL_HEADER*)&spPropChangeParams, sizeof(SP_PROPCHANGE_PARAMS)) )
      {
      // handle error
      }
      else if(!SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, hDevInfo, &spDevInfoData))
      {
      // handle error
      }
      else
      {
      // ok, show disable success dialog
      // note, after that, the OS will post DBT_DEVICEREMOVECOMPLETE for the disabled device
      }
      

  3.   

    可以有办法通过HANDLE hDevice调用CM_Request_Device_Eject没?
    或者有什么参数能作为多个USB设备的唯一标示,  并且在应用CM_Request_Device_Eject方法时能用的上。
      

  4.   

    现在写个结贴,首先基本问题解决,我谈论下我所涉及的业务,首先,将所有的USB存储设备搜索到,用到删除句柄所涉及的API,的到的唯一标示符从注册表中取。  业务二, 需要屏蔽特定的端口, 方法用的是SPDRP_LOCATION_PATHS。但不确定其他机器会有不同路径,望高手求教。最后,乱插乱拔消息通过流程控制,但现在加了屏蔽端口的功能,  在屏蔽端口上也会有出现非安全插拔消息, 有高手也求解决。 好的,谢谢论坛帮助过我的人。