【发布时间】:2017-03-01 09:02:34
【问题描述】:
我基本上是在尝试检测一个简单的 USB 检测并从中检索某些信息。
对于普通的USB FLASH 驱动器,这样做非常简单,正如大多数 MSDN 示例所示。
HDEVNOTIFY hDevNotify;
DEV_BROADCAST_DEVICEINTERFACE NotificationFilter;
ZeroMemory( &NotificationFilter, sizeof(NotificationFilter) );
NotificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
NotificationFilter.dbcc_classguid = GUID_DEVINTERFACE_USB_DEVICE;
hDevNotify = RegisterDeviceNotification(hWnd, &NotificationFilter, DEVICE_NOTIFY_WINDOW_HANDLE);
稍后,等待带有DBT_DEVICEARRIVAL 的WM_DEVICECHANGE 消息
我实际上收到了 2 条连续消息:
第一条消息的dbcc_name:
\\?\USB#VID_0781&PID_5597#4C530001210518100555#{a5dcbf10-6530-11d2-901f-00c04fb951ed}
第二条消息的dbcc_name:
\\?\USBSTOR#Disk&Ven_SanDisk&Prod_Cruzer_Glide_3.0&Rev_1.00#4C530001210518100555&0#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}
从这个,我实际上可以检索到朋友的名字等等。
现在,当我尝试对电话连接执行相同操作时,就会出现问题。
当我使用普通的 USB 数据线插入手机时,我得到了
\\?\USB#VID_18D1&PID_4EE2#00c5c6f0839a25d4#{a5dcbf10-6530-11d2-901f-00c04fb951ed}
SetupDiGetDeviceRegistryProperty 与 SPDRP_DEVICEDESC 返回 USB Composite Device
当我在我的手机上授予文件传输存储权限时,我收到第二条消息:
\\?\USB#VID_18D1&PID_4EE2#00c5c6f0839a25d4#{a5dcbf10-6530-11d2-901f-00c04fb951ed}
没有友好的名字,使用
SetupDiGetDeviceRegistryProperty(hDevInfo, &spDevInfoData,
SPDRP_DEVICEDESC, &DataT, (PBYTE)buf, sizeof(buf), &nSize)
功能。
这里有几个问题:
-
Windows 如何将其识别为移动设备,甚至在通知栏中显示其名称(Nexus 5x,选择此设备会发生什么)?
假设我想从中复制某些文件或向其中复制某些文件。如何获取 WriteFile / CreateFile 的设备句柄或设备路径
为什么
GetLogicalDrivesStrings会为普通的 USB 闪存驱动器检索一个新驱动器(“c:\\\0d:\\\0”),但对移动连接却没有?
【问题讨论】: