Подтвердить что ты не робот

Получить определенный тип устройства с буквы диска

Я хочу определить, когда SD (или другая карта) вставлена ​​в устройство чтения карт. Я знаю о WM_DEVICECHANGE, но мне нужно получить конкретную информацию о типе устройства, учитывая букву диска. Например, я хочу различать любую карту в кард-ридере от "обычной" флеш-накопителя. GetDriveType(), похоже, недостаточно утончен. Каковы мои другие варианты?

Я доволен решением для Windows 7. Мне не нужна обратная совместимость.

Возможно ли этот тип уточнения?

Я нашел этот раздел, который не дает удовлетворительного ответа. Этот вариант кажется способным, но нет образца кода или указателей для примера кода. Невероятно, что никто не собрал рабочий образец для такого общего запроса.

[EDIT]

Я также нашел это. Представленный образец имеет несколько ошибок, но после его исправления я все равно не получаю никакого результата. Для устройства, на котором установлена ​​SD-карта, я получаю BusTypeUnknown вместо BusTypeSd в pDeviceDesc.BusType. Это казалось простым и до сих пор не удалось.

4b9b3361

Ответ 1

Это выглядит полезно: Как определить, какие USB-устройства подключены к компьютеру?

strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colDevices = objWMIService.ExecQuery _
    ("Select * From Win32_USBControllerDevice")

For Each objDevice in colDevices
    strDeviceName = objDevice.Dependent
    strQuotes = Chr(34)
    strDeviceName = Replace(strDeviceName, strQuotes, "")
    arrDeviceNames = Split(strDeviceName, "=")
    strDeviceName = arrDeviceNames(1)
    Set colUSBDevices = objWMIService.ExecQuery _
        ("Select * From Win32_PnPEntity Where DeviceID = '" & strDeviceName & "'")
    For Each objUSBDevice in colUSBDevices
        Wscript.Echo objUSBDevice.Description
    Next    
Next

Образец вывода (должен быть деревом):

USB Root Hub
Microsoft USB IntelliMouse Web
Microsoft USB IntelliMouse Web
USB Mass Storage Device
Disk drive
Generic volume
USB Root Hub
USB Root Hub

Я надеюсь, что не все USB-накопители описывают себя как "USB Mass Storage Device". Если это так, проверьте имя тома или autorun.inf, если они есть.

Microsoft, являющаяся одним из изобретателей USB, вряд ли вам понадобится эту информацию в Linux, но ее можно собрать для поисковых запросов, таких как "Pendrive" и "Flash Drive".

Ответ 2

Я не думаю, что это возможно, так как считыватели карт представляют свое хранилище так же, как обычный флеш-накопитель для ОС. Они оба являются устройствами USB с большой памятью. Здесь статья Википедии в этом классе устройства. ОС не имеет возможности различать эти два типа устройств.