OnDeviceChange nEventType总是返回7

USB 每次插入拔出,nEventType总是返回7

static const GUID GUID_DEVINTERFACE_LIST[] = 

{

    // GUID_DEVINTERFACE_USB_DEVICE

    { 0xA5DCBF10, 0x6530, 0x11D2, { 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED } },

 

    // GUID_DEVINTERFACE_DISK

    { 0x53f56307, 0xb6bf, 0x11d0, { 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b } },

 

    // GUID_DEVINTERFACE_HID, 

    { 0x4D1E55B2, 0xF16F, 0x11CF, { 0x88, 0xCB, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30 } },

              

    // GUID_NDIS_LAN_CLASS

    { 0xad498944, 0x762f, 0x11d0, { 0x8d, 0xcb, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c } }

 

};

 

//注册插拔事件

HDEVNOTIFY hDevNotify;

DEV_BROADCAST_DEVICEINTERFACE NotificationFilter;

ZeroMemory( &NotificationFilter, sizeof(NotificationFilter) );

NotificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);

NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;

for(int i=0; i<sizeof(GUID_DEVINTERFACE_LIST)/sizeof(GUID); i++) 

{

    NotificationFilter.dbcc_classguid = GUID_DEVINTERFACE_LIST[i];

    hDevNotify = RegisterDeviceNotification(this->GetSafeHwnd(), &NotificationFilter, DEVICE_NOTIFY_WINDOW_HANDLE);

    if( !hDevNotify ) 

        {

        return FALSE;

    }

}

 

 

OnDeviceChange(UINTnEventType, DWORD dwData)

{

PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)dwData;

char cDrive;

TRACE("OnDeviceChange: %u\n",nEventType);

switch(nEventType)

{

case DBT_DEVICEARRIVAL:

TRACE("OnDeviceChange: DBT_DEVICEARRIVAL\n");

if(DBT_DEVTYP_VOLUME == lpdb->dbch_devicetype)

{

 

 

 

 

//Logical volume has been inserted and becomes available

PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;

if(0 == lpdbv->dbcv_flags)

{

cDrive = FirstDriveFromMask(lpdbv->dbcv_unitmask);

RemovableDiskArrival(cDrive);

}

}

break;

case DBT_DEVICEQUERYREMOVE:

break;

case DBT_DEVICEQUERYREMOVEFAILED:

break;

case DBT_DEVICEREMOVEPENDING:

break;

case DBT_DEVICEREMOVECOMPLETE:

TRACE("OnDeviceChange:DBT_DEVICEREMOVECOMPLETE\n");

if(DBT_DEVTYP_VOLUME == lpdb->dbch_devicetype)

{

//Logical volume has been physically removed

PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;

if(0 == lpdbv->dbcv_flags)

{

 

 

 

 

 

TRACE("OnDeviceChange: DBT_DEVICEREMOVECOMPLETERefreshTree\n");

cDrive = FirstDriveFromMask(lpdbv->dbcv_unitmask);

RemovableDiskRemove(cDrive);

 

 

 

 

}

}

 

break;

case DBT_DEVICETYPESPECIFIC:

break;

case DBT_CONFIGCHANGED:

break;

case DBT_DEVNODES_CHANGED:

break;

}

 

return TRUE;

}

 

 将消息添加到消息map表中

BEGIN_MESSAGE_MAP(CAutoDownDlg,CDialog)

ON_WM_DEVICECHANGE()

END_MESSAGE_MAP()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值