You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

407 lines
14 KiB
Plaintext

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

Test wince
http://blog.csdn.net/achellies/article/details/4533881
http://blog.csdn.net/CoolSlob/article/details/3348147
1、可根据dbch_devicetypeDBT_DEVTYP_DEVICEINTERFACE和DBT_DEVTYP_VOLUME分别得到PID/VID/SN和盘符号。
2、当USB设备不是存储设备时只出发一次WM_DEVICECHANGEdevicetype是DBT_DEVTYP_DEVICEINTERFACE
3、当USB设备是存储设备时会触发两次WM_DEVICECHANGE一次是DBT_DEVTYP_DEVICEINTERFACE、一次是DBT_DEVTYP_VOLUME
4、插入时先DBT_DEVTYP_DEVICEINTERFACE后DBT_DEVTYP_VOLUME
5、拔出时先DBT_DEVTYP_VOLUME后DBT_DEVTYP_DEVICEINTERFACE
6、即使是存储设备有时也不会触发DBT_DEVTYP_VOLUME这个问题还没搞清楚。
case WM_DEVICECHANGE:
{
DbgPrint(_T("WM_DEVICECHANGE/n"));
switch (wParam)
{
case DBT_DEVICEARRIVAL:
{
PDEV_BROADCAST_HDR pDBHdr = (PDEV_BROADCAST_HDR)lParam;
switch(pDBHdr->dbch_devicetype)
{
case DBT_DEVTYP_DEVICEINTERFACE:
{
PDEV_BROADCAST_DEVICEINTERFACE pDBInteface = (PDEV_BROADCAST_DEVICEINTERFACE)pDBHdr;
LPOLESTR pGuid = NULL;
StringFromCLSID(pDBInteface->dbcc_classguid,&pGuid);
DbgPrint(_T("DBT_DEVTYP_DEVICEINTERFACE,Device CLSID = %s,Device Name = %s/n"),pGuid,pDBInteface->dbcc_name);
CoTaskMemFree(pGuid);
break;
}
case DBT_DEVTYP_HANDLE:
{
PDEV_BROADCAST_HANDLE pDBHandler = (PDEV_BROADCAST_HANDLE)pDBHdr;
LPOLESTR pGuid = NULL;
StringFromCLSID(pDBHandler->dbch_eventguid,&pGuid);
DbgPrint(_T("DBT_DEVTYP_HANDLE,Device CLSID = %s/n"),pGuid);
CoTaskMemFree(pGuid);
break;
}
case DBT_DEVTYP_OEM:
DbgPrint( _T("DBT_DEVTYP_OEM!/n"));
break;
case DBT_DEVTYP_PORT:
{
PDEV_BROADCAST_PORT pDBPort = (PDEV_BROADCAST_PORT)pDBHdr;
DbgPrint(_T("DBT_DEVTYP_PORT = %s/n"),pDBPort->dbcp_name);
break;
}
case DBT_DEVTYP_VOLUME:
DbgPrint( _T("DBT_DEVTYP_VOLUME!/n"));
break;
}
break;
}
case DBT_DEVICEREMOVECOMPLETE:
{
PDEV_BROADCAST_HDR pDBHdr = (PDEV_BROADCAST_HDR)lParam;
switch(pDBHdr->dbch_devicetype)
{
case DBT_DEVTYP_DEVICEINTERFACE:
{
PDEV_BROADCAST_DEVICEINTERFACE pDBInteface = (PDEV_BROADCAST_DEVICEINTERFACE)pDBHdr;
LPOLESTR pGuid = NULL;
StringFromCLSID(pDBInteface->dbcc_classguid,&pGuid);
DbgPrint(_T("DBT_DEVICEREMOVECOMPLETE,Device CLSID = %s,Device Name = %s/n"),pGuid,pDBInteface->dbcc_name);
CoTaskMemFree(pGuid);
break;
}
case DBT_DEVTYP_HANDLE:
{
PDEV_BROADCAST_HANDLE pDBHandler = (PDEV_BROADCAST_HANDLE)pDBHdr;
LPOLESTR pGuid = NULL;
StringFromCLSID(pDBHandler->dbch_eventguid,&pGuid);
DbgPrint(_T("DBT_DEVTYP_HANDLE,Device CLSID = %s/n"),pGuid);
CoTaskMemFree(pGuid);
break;
}
case DBT_DEVTYP_OEM:
DbgPrint( _T("DBT_DEVTYP_OEM!/n"));
break;
case DBT_DEVTYP_PORT:
{
PDEV_BROADCAST_PORT pDBPort = (PDEV_BROADCAST_PORT)pDBHdr;
DbgPrint(_T("DBT_DEVTYP_PORT = %s/n"),pDBPort->dbcp_name);
break;
}
case DBT_DEVTYP_VOLUME:
DbgPrint( _T("DBT_DEVTYP_VOLUME!/n"));
break;
}
break;
}
}
return LRESULT(TRUE);
}
rpath.pri
OTHER PLATFORM
Use QAbstractEventDispatcher. See QxtGlobalShortcut
other device
windows and other platforms. See QDrive
watch /etc/mtab for linux 2.4
GUI example
from armv6:
tid=0x4001fe20 HotplugWatcher::HotplugWatcher(QObject*)
Hotplug watcher started
parseDeviceInfo: "read fro socket 239 bytes"
parseLine: "add@/devices/platform/tcc-ohci/usb1/1-1/1-1.2"
parseLine: "ACTION=add"
parseLine: "DEVPATH=/devices/platform/tcc-ohci/usb1/1-1/1-1.2"
parseLine: "SUBSYSTEM=usb"
parseLine: "MAJOR=189"
parseLine: "MINOR=4"
parseLine: "DEVTYPE=usb_device"
parseLine: "PHYSDEVBUS=usb"
parseLine: "PRODUCT=125f/312a/a00"
parseLine: "TYPE=0/0/0"
parseLine: "BUSNUM=001"
parseLine: "DEVNUM=005"
parseLine: "SEQNUM=755"
parseDeviceInfo: "read fro socket 294 bytes"
parseLine: "add@/devices/platform/tcc-ohci/usb1/1-1/1-1.2/1-1.2:1.0"
parseLine: "ACTION=add"
parseLine: "DEVPATH=/devices/platform/tcc-ohci/usb1/1-1/1-1.2/1-1.2:1.0"
parseLine: "SUBSYSTEM=usb"
parseLine: "DEVTYPE=usb_interface"
parseLine: "PHYSDEVBUS=usb"
parseLine: "PRODUCT=125f/312a/a00"
parseLine: "TYPE=0/0/0"
parseLine: "INTERFACE=8/6/80"
parseLine: "MODALIAS=usb:v125Fp312Ad0A00dc00dsc00dp00ic08isc06ip50"
parseLine: "SEQNUM=756"
parseDeviceInfo: "read fro socket 205 bytes"
parseLine: "add@/class/scsi_host/host5"
parseLine: "ACTION=add"
parseLine: "DEVPATH=/class/scsi_host/host5"
parseLine: "SUBSYSTEM=scsi_host"
parseLine: "PHYSDEVPATH=/devices/platform/tcc-ohci/usb1/1-1/1-1.2/1-1.2:1.0"
parseLine: "PHYSDEVBUS=usb"
parseLine: "PHYSDEVDRIVER=usb-storage"
parseLine: "SEQNUM=757"
parseDeviceInfo: "read fro socket 251 bytes"
parseLine: "add@/class/usb_endpoint/usbdev1.5_ep02"
parseLine: "ACTION=add"
parseLine: "DEVPATH=/class/usb_endpoint/usbdev1.5_ep02"
parseLine: "SUBSYSTEM=usb_endpoint"
parseLine: "MAJOR=253"
parseLine: "MINOR=20"
parseLine: "PHYSDEVPATH=/devices/platform/tcc-ohci/usb1/1-1/1-1.2/1-1.2:1.0"
parseLine: "PHYSDEVBUS=usb"
parseLine: "PHYSDEVDRIVER=usb-storage"
parseLine: "SEQNUM=758"
parseDeviceInfo: "read fro socket 251 bytes"
parseLine: "add@/class/usb_endpoint/usbdev1.5_ep81"
parseLine: "ACTION=add"
parseLine: "DEVPATH=/class/usb_endpoint/usbdev1.5_ep81"
parseLine: "SUBSYSTEM=usb_endpoint"
parseLine: "MAJOR=253"
parseLine: "MINOR=21"
parseLine: "PHYSDEVPATH=/devices/platform/tcc-ohci/usb1/1-1/1-1.2/1-1.2:1.0"
parseLine: "PHYSDEVBUS=usb"
parseLine: "PHYSDEVDRIVER=usb-storage"
parseLine: "SEQNUM=759"
parseDeviceInfo: "read fro socket 233 bytes"
parseLine: "add@/class/usb_endpoint/usbdev1.5_ep00"
parseLine: "ACTION=add"
parseLine: "DEVPATH=/class/usb_endpoint/usbdev1.5_ep00"
parseLine: "SUBSYSTEM=usb_endpoint"
parseLine: "MAJOR=253"
parseLine: "MINOR=22"
parseLine: "PHYSDEVPATH=/devices/platform/tcc-ohci/usb1/1-1/1-1.2"
parseLine: "PHYSDEVBUS=usb"
parseLine: "PHYSDEVDRIVER=usb"
parseLine: "SEQNUM=760"
parseDeviceInfo: "read fro socket 262 bytes"
parseLine: "add@/devices/platform/tcc-ohci/usb1/1-1/1-1.2/1-1.2:1.0/host5/target5:0:0/5:0:0:0"
parseLine: "ACTION=add"
parseLine: "DEVPATH=/devices/platform/tcc-ohci/usb1/1-1/1-1.2/1-1.2:1.0/host5/target5:0:0/5:0:0:0"
parseLine: "SUBSYSTEM=scsi"
parseLine: "DEVTYPE=scsi_device"
parseLine: "PHYSDEVBUS=scsi"
parseLine: "MODALIAS=scsi:t-0x00"
parseLine: "SEQNUM=761"
parseDeviceInfo: "read fro socket 227 bytes"
parseLine: "add@/class/scsi_disk/5:0:0:0"
parseLine: "ACTION=add"
parseLine: "DEVPATH=/class/scsi_disk/5:0:0:0"
parseLine: "SUBSYSTEM=scsi_disk"
parseLine: "PHYSDEVPATH=/devices/platform/tcc-ohci/usb1/1-1/1-1.2/1-1.2:1.0/host5/target5:0:0/5:0:0:0"
parseLine: "PHYSDEVBUS=scsi"
parseLine: "PHYSDEVDRIVER=sd"
parseLine: "SEQNUM=762"
parseDeviceInfo: "read fro socket 315 bytes"
parseLine: "change@/devices/platform/tcc-ohci/usb1/1-1/1-1.2/1-1.2:1.0/host5/target5:0:0/5:0:0:0"
parseLine: "ACTION=change"
parseLine: "DEVPATH=/devices/platform/tcc-ohci/usb1/1-1/1-1.2/1-1.2:1.0/host5/target5:0:0/5:0:0:0"
parseLine: "SUBSYSTEM=scsi"
parseLine: "SDEV_MEDIA_CHANGE=1"
parseLine: "DEVTYPE=scsi_device"
parseLine: "DRIVER=sd"
parseLine: "PHYSDEVBUS=scsi"
parseLine: "PHYSDEVDRIVER=sd"
parseLine: "MODALIAS=scsi:t-0x00"
parseLine: "SEQNUM=763"
parseDeviceInfo: "read fro socket 225 bytes"
parseLine: "add@/block/sdc"
parseLine: "ACTION=add"
parseLine: "DEVPATH=/block/sdc"
parseLine: "SUBSYSTEM=block"
parseLine: "MAJOR=8"
parseLine: "MINOR=32"
parseLine: "DEVTYPE=disk"
parseLine: "PHYSDEVPATH=/devices/platform/tcc-ohci/usb1/1-1/1-1.2/1-1.2:1.0/host5/target5:0:0/5:0:0:0"
parseLine: "PHYSDEVBUS=scsi"
parseLine: "PHYSDEVDRIVER=sd"
parseLine: "SEQNUM=764"
parseDeviceInfo: "read fro socket 240 bytes"
parseLine: "add@/block/sdc/sdc1"
parseLine: "ACTION=add"
parseLine: "DEVPATH=/block/sdc/sdc1"
parseLine: "SUBSYSTEM=block"
parseLine: "MAJOR=8"
parseLine: "MINOR=33"
parseLine: "DEVTYPE=partition"
parseLine: "PHYSDEVPATH=/devices/platform/tcc-ohci/usb1/1-1/1-1.2/1-1.2:1.0/host5/target5:0:0/5:0:0:0"
parseLine: "PHYSDEVBUS=scsi"
parseLine: "PHYSDEVDRIVER=sd"
parseLine: "SEQNUM=765"
parseDeviceInfo: "read fro socket 80 bytes"
parseLine: "add@/class/bdi/8:32"
parseLine: "ACTION=add"
parseLine: "DEVPATH=/class/bdi/8:32"
parseLine: "SUBSYSTEM=bdi"
parseLine: "SEQNUM=766"
parseDeviceInfo: "read fro socket 233 bytes"
parseLine: "add@/class/scsi_device/5:0:0:0"
parseLine: "ACTION=add"
parseLine: "DEVPATH=/class/scsi_device/5:0:0:0"
parseLine: "SUBSYSTEM=scsi_device"
parseLine: "PHYSDEVPATH=/devices/platform/tcc-ohci/usb1/1-1/1-1.2/1-1.2:1.0/host5/target5:0:0/5:0:0:0"
parseLine: "PHYSDEVBUS=scsi"
parseLine: "PHYSDEVDRIVER=sd"
parseLine: "SEQNUM=767"
parseDeviceInfo: "read fro socket 245 bytes"
parseLine: "add@/class/scsi_generic/sg2"
parseLine: "ACTION=add"
parseLine: "DEVPATH=/class/scsi_generic/sg2"
parseLine: "SUBSYSTEM=scsi_generic"
parseLine: "MAJOR=21"
parseLine: "MINOR=2"
parseLine: "PHYSDEVPATH=/devices/platform/tcc-ohci/usb1/1-1/1-1.2/1-1.2:1.0/host5/target5:0:0/5:0:0:0"
parseLine: "PHYSDEVBUS=scsi"
parseLine: "PHYSDEVDRIVER=sd"
parseLine: "SEQNUM=768"
parseDeviceInfo: "read fro socket 257 bytes"
parseLine: "remove@/class/usb_endpoint/usbdev1.5_ep02"
parseLine: "ACTION=remove"
parseLine: "DEVPATH=/class/usb_endpoint/usbdev1.5_ep02"
parseLine: "SUBSYSTEM=usb_endpoint"
parseLine: "MAJOR=253"
parseLine: "MINOR=20"
parseLine: "PHYSDEVPATH=/devices/platform/tcc-ohci/usb1/1-1/1-1.2/1-1.2:1.0"
parseLine: "PHYSDEVBUS=usb"
parseLine: "PHYSDEVDRIVER=usb-storage"
parseLine: "SEQNUM=769"
parseDeviceInfo: "read fro socket 257 bytes"
parseLine: "remove@/class/usb_endpoint/usbdev1.5_ep81"
parseLine: "ACTION=remove"
parseLine: "DEVPATH=/class/usb_endpoint/usbdev1.5_ep81"
parseLine: "SUBSYSTEM=usb_endpoint"
parseLine: "MAJOR=253"
parseLine: "MINOR=21"
parseLine: "PHYSDEVPATH=/devices/platform/tcc-ohci/usb1/1-1/1-1.2/1-1.2:1.0"
parseLine: "PHYSDEVBUS=usb"
parseLine: "PHYSDEVDRIVER=usb-storage"
parseLine: "SEQNUM=770"
parseDeviceInfo: "read fro socket 251 bytes"
parseLine: "remove@/class/scsi_generic/sg2"
parseLine: "ACTION=remove"
parseLine: "DEVPATH=/class/scsi_generic/sg2"
parseLine: "SUBSYSTEM=scsi_generic"
parseLine: "MAJOR=21"
parseLine: "MINOR=2"
parseLine: "PHYSDEVPATH=/devices/platform/tcc-ohci/usb1/1-1/1-1.2/1-1.2:1.0/host5/target5:0:0/5:0:0:0"
parseLine: "PHYSDEVBUS=scsi"
parseLine: "PHYSDEVDRIVER=sd"
parseLine: "SEQNUM=771"
parseDeviceInfo: "read fro socket 239 bytes"
parseLine: "remove@/class/scsi_device/5:0:0:0"
parseLine: "ACTION=remove"
parseLine: "DEVPATH=/class/scsi_device/5:0:0:0"
parseLine: "SUBSYSTEM=scsi_device"
parseLine: "PHYSDEVPATH=/devices/platform/tcc-ohci/usb1/1-1/1-1.2/1-1.2:1.0/host5/target5:0:0/5:0:0:0"
parseLine: "PHYSDEVBUS=scsi"
parseLine: "PHYSDEVDRIVER=sd"
parseLine: "SEQNUM=772"
parseDeviceInfo: "read fro socket 233 bytes"
parseLine: "remove@/class/scsi_disk/5:0:0:0"
parseLine: "ACTION=remove"
parseLine: "DEVPATH=/class/scsi_disk/5:0:0:0"
parseLine: "SUBSYSTEM=scsi_disk"
parseLine: "PHYSDEVPATH=/devices/platform/tcc-ohci/usb1/1-1/1-1.2/1-1.2:1.0/host5/target5:0:0/5:0:0:0"
parseLine: "PHYSDEVBUS=scsi"
parseLine: "PHYSDEVDRIVER=sd"
parseLine: "SEQNUM=773"
parseDeviceInfo: "read fro socket 246 bytes"
parseLine: "remove@/block/sdc/sdc1"
parseLine: "ACTION=remove"
parseLine: "DEVPATH=/block/sdc/sdc1"
parseLine: "SUBSYSTEM=block"
parseLine: "MAJOR=8"
parseLine: "MINOR=33"
parseLine: "DEVTYPE=partition"
parseLine: "PHYSDEVPATH=/devices/platform/tcc-ohci/usb1/1-1/1-1.2/1-1.2:1.0/host5/target5:0:0/5:0:0:0"
parseLine: "PHYSDEVBUS=scsi"
parseLine: "PHYSDEVDRIVER=sd"
parseLine: "SEQNUM=774"
parseDeviceInfo: "read fro socket 86 bytes"
parseLine: "remove@/class/bdi/8:32"
parseLine: "ACTION=remove"
parseLine: "DEVPATH=/class/bdi/8:32"
parseLine: "SUBSYSTEM=bdi"
parseLine: "SEQNUM=775"
parseDeviceInfo: "read fro socket 231 bytes"
parseLine: "remove@/block/sdc"
parseLine: "ACTION=remove"
parseLine: "DEVPATH=/block/sdc"
parseLine: "SUBSYSTEM=block"
parseLine: "MAJOR=8"
parseLine: "MINOR=32"
parseLine: "DEVTYPE=disk"
parseLine: "PHYSDEVPATH=/devices/platform/tcc-ohci/usb1/1-1/1-1.2/1-1.2:1.0/host5/target5:0:0/5:0:0:0"
parseLine: "PHYSDEVBUS=scsi"
parseLine: "PHYSDEVDRIVER=sd"
parseLine: "SEQNUM=776"
parseDeviceInfo: "read fro socket 268 bytes"
parseLine: "remove@/devices/platform/tcc-ohci/usb1/1-1/1-1.2/1-1.2:1.0/host5/target5:0:0/5:0:0:0"
parseLine: "ACTION=remove"
parseLine: "DEVPATH=/devices/platform/tcc-ohci/usb1/1-1/1-1.2/1-1.2:1.0/host5/target5:0:0/5:0:0:0"
parseLine: "SUBSYSTEM=scsi"
parseLine: "DEVTYPE=scsi_device"
parseLine: "PHYSDEVBUS=scsi"
parseLine: "MODALIAS=scsi:t-0x00"
parseLine: "SEQNUM=777"
parseDeviceInfo: "read fro socket 211 bytes"
parseLine: "remove@/class/scsi_host/host5"
parseLine: "ACTION=remove"
parseLine: "DEVPATH=/class/scsi_host/host5"
parseLine: "SUBSYSTEM=scsi_host"
parseLine: "PHYSDEVPATH=/devices/platform/tcc-ohci/usb1/1-1/1-1.2/1-1.2:1.0"
parseLine: "PHYSDEVBUS=usb"
parseLine: "PHYSDEVDRIVER=usb-storage"
parseLine: "SEQNUM=778"
parseDeviceInfo: "read fro socket 300 bytes"
parseLine: "remove@/devices/platform/tcc-ohci/usb1/1-1/1-1.2/1-1.2:1.0"
parseLine: "ACTION=remove"
parseLine: "DEVPATH=/devices/platform/tcc-ohci/usb1/1-1/1-1.2/1-1.2:1.0"
parseLine: "SUBSYSTEM=usb"
parseLine: "DEVTYPE=usb_interface"
parseLine: "PHYSDEVBUS=usb"
parseLine: "PRODUCT=125f/312a/a00"
parseLine: "TYPE=0/0/0"
parseLine: "INTERFACE=8/6/80"
parseLine: "MODALIAS=usb:v125Fp312Ad0A00dc00dsc00dp00ic08isc06ip50"
parseLine: "SEQNUM=779"
parseDeviceInfo: "read fro socket 239 bytes"
parseLine: "remove@/class/usb_endpoint/usbdev1.5_ep00"
parseLine: "ACTION=remove"
parseLine: "DEVPATH=/class/usb_endpoint/usbdev1.5_ep00"
parseLine: "SUBSYSTEM=usb_endpoint"
parseLine: "MAJOR=253"
parseLine: "MINOR=22"
parseLine: "PHYSDEVPATH=/devices/platform/tcc-ohci/usb1/1-1/1-1.2"
parseLine: "PHYSDEVBUS=usb"
parseLine: "PHYSDEVDRIVER=usb"
parseLine: "SEQNUM=780"
parseDeviceInfo: "read fro socket 245 bytes"
parseLine: "remove@/devices/platform/tcc-ohci/usb1/1-1/1-1.2"
parseLine: "ACTION=remove"
parseLine: "DEVPATH=/devices/platform/tcc-ohci/usb1/1-1/1-1.2"
parseLine: "SUBSYSTEM=usb"
parseLine: "MAJOR=189"
parseLine: "MINOR=4"
parseLine: "DEVTYPE=usb_device"
parseLine: "PHYSDEVBUS=usb"
parseLine: "PRODUCT=125f/312a/a00"
parseLine: "TYPE=0/0/0"
parseLine: "BUSNUM=001"
parseLine: "DEVNUM=005"
parseLine: "SEQNUM=781"