Winapi 从驱动器号获取特定的设备类型

Winapi 从驱动器号获取特定的设备类型,winapi,Winapi,我想检测SD(或其他卡)何时插入读卡器。我知道WM_DEVICECHANGE,但我需要获得给定驱动器号的特定设备类型信息。例如,我想区分读卡器中的任何卡和“普通”闪存驱动器GetDriveType()似乎不够精细。我的其他选择是什么 我对Windows7解决方案很满意。我不需要向后兼容 这种类型的细化可能吗 我发现这并不能提供令人满意的答案。感觉就像是要走的路,但是没有示例代码或指向示例代码的指针。令人难以置信的是,没有人为这样一个共同的请求拼凑出一个工作样本 [编辑] 我也有。提供的样本有一些

我想检测SD(或其他卡)何时插入读卡器。我知道WM_DEVICECHANGE,但我需要获得给定驱动器号的特定设备类型信息。例如,我想区分读卡器中的任何卡和“普通”闪存驱动器<代码>GetDriveType()似乎不够精细。我的其他选择是什么

我对Windows7解决方案很满意。我不需要向后兼容

这种类型的细化可能吗

我发现这并不能提供令人满意的答案。感觉就像是要走的路,但是没有示例代码或指向示例代码的指针。令人难以置信的是,没有人为这样一个共同的请求拼凑出一个工作样本

[编辑]


我也有。提供的样本有一些错误,但修复后,我仍然没有得到任何结果。对于插入SD卡的设备,我在
pDeviceDesc.BusType
中得到的是
BusTypeUnknown
而不是
BusTypeSd
。这似乎很简单,但仍然失败。

我认为这是不可能的,因为读卡器向操作系统提供存储的方式与常规闪存驱动器相同。它们都是USB大容量存储类设备。下面是关于这个设备类的详细信息。操作系统无法区分这两种设备类型。

这看起来很有用:

strComputer=“”
设置objWMIService=GetObject(“winmgmts:\\”&strComputer&“\root\cimv2”)
Set colDevices=objWMIService.ExecQuery_
(“从Win32\U USBControllerDevice中选择*)
对于设备中的每个OBJ设备
strDeviceName=objDevice.Dependent
strQuotes=Chr(34)
strDeviceName=Replace(strDeviceName,strQuotes,“”)
arrDeviceNames=拆分(strDeviceName,“=”)
strDeviceName=arrDeviceNames(1)
设置colUSBDevices=objWMIService.ExecQuery_
(“从Win32_pPentity中选择*,其中DeviceID=”&strDeviceName&“”)
对于Colusb设备中的每个OBJUSB设备
Wscript.Echo objUSBDevice.Description
下一个
下一个
示例输出(应为树):

USB根集线器
微软USB智能鼠标网站
微软USB智能鼠标网站
磁盘驱动器
磁盘驱动器
通用卷
根集线器
根集线器
我希望不是所有的USB存储都自称为“USB大容量存储设备”。如果有,请检查卷名或autorun.inf(如果有)


微软是USB的发明者之一,你不太可能需要它,但它可以被搜索到,比如“Pendrive”和“Flash Drive”。

你试过WMI了吗?Win32_LogicalDrive和Win32_PhysicalMedia看起来很有前途。在写入任何代码之前,请先使用WMI代码创建者实用程序。否。我以前只患过头痛。只要可能,我就尽量避免。WMI可以在Windows服务中工作吗?嗨,你得到这个问题的答案了吗?我需要这样做才能在没有安装API的情况下获得卷/磁盘类型