Как использовать WMI, чтобы получить ОБА числовой VID / PID и букву диска с USB-диска - PullRequest
0 голосов
/ 05 июля 2019

Я пытаюсь показать vid / pid и букву диска USB-накопителя при подключении его к компьютеру. Я на самом деле могу сделать и то и другое, но не одновременно.

1: я могу использовать Win32_DiskDrive, чтобы перейти к Win32_LogicalDisk и извлечь букву диска. Но идентификатор устройства имеет не числовой pid / vid, который я не могу использовать.

2: я могу использовать Win32_USBHub или Win32_PnPEntity для извлечения vid / pid, но не могу найти связь между ними и буквой диска.

public void CheckForUsbDevice()
        {
            string text =
                "SELECT * FROM __InstanceCreationEvent " +
                "WITHIN 2 "
              + "WHERE TargetInstance ISA 'Win32_PnPEntity'";


            ManagementEventWatcher watcher = new ManagementEventWatcher();
            WqlEventQuery query = new WqlEventQuery(text);

            watcher.EventArrived += new EventArrivedEventHandler(watcher_EventArrived);

            watcher.Query = query;
            watcher.Start();

            Console.ReadKey();
        }

        static readonly Guid GUID_DEVCLASS_USB = new Guid("{36fc9e60-c465-11cf-8056-444553540000}");

        static void watcher_EventArrived(object sender, EventArrivedEventArgs e)
        {
            ManagementBaseObject instance = (ManagementBaseObject)e.NewEvent["TargetInstance"];
            if ((new Guid((string)instance["ClassGuid"]) == GUID_DEVCLASS_USB) && ((string)instance.Properties["Name"].Value == "USB Mass Storage Device"))
            {
                // we're only interested by USB devices, dump all props
                foreach (var property in instance.Properties)
                {
                    Console.WriteLine(property.Name + " = " + property.Value);
                }
            }
        }

Это имеет вывод:

Availability =
Caption = USB Mass Storage Device
ClassGuid = {36fc9e60-c465-11cf-8056-444553540000}
CompatibleID = System.String[]
ConfigManagerErrorCode = 0
ConfigManagerUserConfig = False
CreationClassName = Win32_PnPEntity
Description = USB Mass Storage Device
DeviceID = USB\VID_0911&PID_1F40&MI_00\6&27CAD51B&0&0000
ErrorCleared =
ErrorDescription =
HardwareID = System.String[]
InstallDate =
LastErrorCode =
Manufacturer = Compatible USB storage device
Name = USB Mass Storage Device
PNPClass = USB
PNPDeviceID = USB\VID_0911&PID_1F40&MI_00\6&27CAD51B&0&0000
PowerManagementCapabilities =
PowerManagementSupported =
Present = True
Service = USBSTOR
Status = OK
StatusInfo =
SystemCreationClassName = Win32_ComputerSystem
SystemName = WINDEV1905EVAL

Мне нужна ссылка между классифицированной WMI, содержащая числовой pid / vid и букву диска, или другой способ достижения этой цели.

Я думаю, что можно использовать DeviceIoControl, но я не знаю, с чего начать.

Любая помощь высоко ценится.

...