16,472
社区成员
发帖
与我相关
我的任务
分享
//// 查询属性输出的数据结构
//typedef struct _STORAGE_DEVICE_DESCRIPTOR {
// ULONG Version; // 版本
// ULONG Size; // 结构大小
// UCHAR DeviceType; // 设备类型
// UCHAR DeviceTypeModifier; // SCSI-2额外的设备类型
// BOOLEAN RemovableMedia; // 是否可移动
// BOOLEAN CommandQueueing; // 是否支持命令队列
// ULONG VendorIdOffset; // 厂家设定值的偏移
// ULONG ProductIdOffset; // 产品ID的偏移
// ULONG ProductRevisionOffset; // 产品版本的偏移
// ULONG SerialNumberOffset; // 序列号的偏移
// STORAGE_BUS_TYPE BusType; // 总线类型
// ULONG RawPropertiesLength; // 额外的属性数据长度
// UCHAR RawDeviceProperties[1]; // 额外的属性数据(仅定义了象征性的1个字节)
//} STORAGE_DEVICE_DESCRIPTOR, *PSTORAGE_DEVICE_DESCRIPTOR;
HDEVNOTIFY hDevNotify;
DEV_BROADCAST_DEVICEINTERFACE NotificationFilter;
ZeroMemory( ¬ificationFilter, 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(),¬ificationFilter, DEVICE_NOTIFY_WINDOW_HANDLE);
if( !hDevNotify )
{
return FALSE;
}
}
BOOL CUSBEventDlg::OnDeviceChange(UINT nEventType,DWORD dwData)
{
switch (nEventType)
{
case DBT_DEVICEARRIVAL:
{
DEV_BROADCAST_HDR* pDev=(DEV_BROADCAST_HDR*)dwData;
if(pDev->dbch_devicetype ==DBT_DEVTYP_VOLUME )//移动存储设备
{
DEV_BROADCAST_VOLUME* pDisk=(DEV_BROADCAST_VOLUME*)dwData;
DWORD mask=pDisk->dbcv_unitmask;
TCHAR diskname[MAX_PATH];
for(int i=0;i<32;i++)
{
if((mask>>i)==1)
{//获取盘符
diskname[0]='A'+i;
diskname[1]='\0';
break;
}
}
}
}break;
case DBT_DEVICEREMOVECOMPLETE:
{
}break;
}
return TRUE;
}