ИСПОЛЬЗУЙТЕ WMI и WMQ, чтобы получить информацию о логическом диске и разделе из Win32_PnPEntity типа SERVICE USBSTOR - PullRequest
5 голосов
/ 02 августа 2010

Я обнаруживаю, когда наше запатентованное USB-устройство подключено к ПК.Когда мы обнаруживаем это, мы получаем Win32_PnPEntity .Мы хотим использовать эту Win32_PnPEntity в качестве источника следующей информации:
- VID дескриптора USB, PID, REV, версия прошивки.
- Информация о томе логического диска и разделе для получения буквы дискаИнформация.

Проблема, с которой я столкнулся, заключается в попытке выяснить, как использовать WMI и WMQ для получения информации о логическом диске и разделах из Win32_PnPEntity . Win32_PnPEntity имеет значение Служба Тип USBSTOR (USB-хранилище я думаю?)

Ниже приводится описание процесса, через который я сейчас прохожу:

Я слушаю Win32_USBControllerDevice с помощью средства просмотра событий, чтобы определить, подключено ли USB-устройство к ПК или отсоединено от него.Я использую следующий запрос для ограничения того, что происходит с событием:

"SELECT * FROM
__InstanceOperationEvent WITHIN 1 WHERE TargetInstance ISA
'Win32_USBControllerDevice' AND
TargetInstance .__ RELPATH L'% DeviceId =% VID_1111%' "

Когда это событие проходит, я извлекаю свойство" Win32_USBControllerDevice.Dependent"и извлекаю" DeviceId " значение.Затем я использую это значение " DeviceId " с классом Win32_PNPEntity , чтобы получить связанный экземпляр.

Здесь все становится сложнее для меня ...

Мне нужно добраться до Win32_DiskDrive , к которому относится экземпляр Win32_PnPEntity .Мне нужен этот экземпляр, чтобы получить информацию о томе, чтобы я мог получить букву диска для каждого раздела.Но я понятия не имею, как туда добраться.

Я прохожу этот процесс, поскольку Win32_PnPEntity предоставляет VID, PID для ограничения на прослушивание и поиск событий ... но такжепредоставляет версию прошивки, которая мне нужна.Итак, с этого момента я хочу получить Win32_DiskDrive для Win32_PnPEntity .

Любой ввод будет оценен.

--- ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ ДЛЯЛУЧШЕ ОПИСАНИЕ ПРОБЛЕМЫ:

Шаги, которые я до сих пор работал, следующие:
- Прослушайте '__InstanceModificaitionEvent' для 'Win32_USBControllerDevice'
- Получите 'Win32_PnPEntity' из 'TargetInstnace 'из __InstanceModificaitionEvent'
- Получить «DeviceId» из «Win32_PnPEntity», который содержит PID, информацию VID.

Проблема, с которой я столкнулся сейчас, заключается в попытке найти ссылку «Win32_LogicalDisk» И / ИЛИ «Win32_DiskDrive» И / ИЛИ «Win32_DiskPartition» ИЛИ какой-нибудь другой АССОЦИАТОР или ССЫЛКИ на букву диска, для которой назначено подключенное устройство USB.экземпляр "Массового ущелья".

Лучший способ, которым я могу думать об этой проблеме, описан на следующей «диаграмме»:

           USB DEVICE  
          |         |  
----------|         |----  
| Win32_DiskDrive       | Win32_PnPEntity  

Что я пытаюсь сделать, это выяснить, как получить из Win32_PnPEntity'представление устройства USB в представлении' Win32_DiskDrive '.

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


PS C: \ Users \ USER.DOMAIN> gwmi Win32_PNPEntity |?{($ _. DeviceId -match 'VEN_MYCOMPANY &') -or ($ _. DeviceId -match 'VID_XXXX')}

__ GENUS: 2
__CLASS: Win32_PnPEntity
__SUPERCLASS: CIM_LogicalD__DYNASTY: CIM_ManagedSystemElement
__RELPATH: Win32_PnPEntity.DeviceID = "USB \ VID_XXXX & PID_0001 \ YYYY"
__PROPERTY_COUNT: 24
__DERIVATION: {CIM_LogicalDevice, CIM_LogicalElement, CIM_ManagedSystemElement}
__SERVER: BYDEFAULT
__NAMESPACE: корень \ cimv2
__PATH: \ BYDEFAULT \ корень \ cimv2: Win32_PnPEntity.DeviceID = "USB \ VID_XXXX & PID_0001 \ YYYY"
Доступность:
Заголовок: запоминающее USB-устройство
ClassGuid: {36fc9e60-c465-11cf-8056-444553540000}
CompatibleID: {USB \ Class_08 & SubClass_06 & Prot_50, USB \ Class_08 & SubClass_06, USB \ Class_08rM0: 0EE: 092 *
ConfigManagerUserConfig: False
CreationClassName: Win32_PnPEntity
Описание: запоминающее устройство USB
Идентификатор устройства: USB \ VID_XXXX & PID_0001 \ YYYY
Обнаружено сообщение об ошибке:
ИД USB-идентификатора_идентификатора: * 1099_X_X_ID_ID: * 1099 \ ID_X_XX:
VID: * 1099_ID_ID: * 1099_ID_ID:, USB \ VID_XXXX & PID_0001}
Дата установки:
LastErrorCode:
Производитель: совместимое запоминающее устройство USB
Название: USB Mass Storage Device
PNPDeviceID: USB \ VID_XXXX & PID_0001 \ YYYY
PowerMan* Управление энергопотреблениемПоддерживается:
Служба: USBSTOR
Статус: ОК
StatusInfo:
SystemCreationClassName: Win32_ComputerSystem
SystemName: BYDEFAULT

__ GENUS: 2
__CLASS: Win32_PnPEntS
11CL * 11 * CL *: CIM_LogicalDevice
__DYNASTY: CIM_ManagedSystemElement
__RELPATH: Win32_PnPEntity.DeviceID = "WPDBUSENUMROOT \ UMB \ 2 & 37C186B & 0 & ХРАНЕНИЯ # ОБЪЕМ #_ ?? _ USBSTOR # DISK & VEN_MYCOMPANY & PROD_ZZZZ _-_ ХРАНЕНИЯ & REV_5678 # YYYY & 0 #"
__PROPERTY_COUNT: 24
__DERIVATION: {CIM_LogicalDevice, CIM_LogicalElement, CIM_ManagedSystemElement}
__SERVER: BYDEFAULT
__NAMESPACE: корень \ cimv2
__PATH: \ BYDEFAULT \ корень \ cimv2: Win32_PnPEntity.DeviceID = "WPDBUSENUMROOT \ UMB \ 2 & 37C186B & 0 & ХРАНЕНИЯ # ОБЪЕМ #_ ?? _ USBSTOR #DISK & VEN_MYCOMPANYI & PROD_ZZZZ _-_ ХРАНИЛИЩЕ & REV_5678 # YYYY & 0 # "
Доступность:
Заголовок: ZZZZ
ClassGuid: {eec5ad98-8080-425f-922a-dabf3de3f27}: 11-й перепутчик
ConfigManagerUserConfig: False
CreationClassName: Win32_PnPEntity
Описание: MYCOMPANY - Хранилище
DeviceID: WPDBUSENUMROOT \ UMB \ 2 & 37C186B & 0 & STORAGE # ОБЪЁМ:
HardwareID:
Дата установки:
LastErrorCode:
Производитель: MYCOMPANY
Имя: ZZZZ
PNPDeviceID: WPDBUSENUMROOT \ UMB \ 2 & 37C186B & 0 & STORAGE # VOLUME # _ _ _ ST_Z_Z_WRZ_Z_Z_WRZ_Z_Z_Z_Z_Z_Z_Z_Z_Z_Z_Z_Z_Z_Z_W_RZ_Z_Z_Z_Z_Z_Z_Z_Z_Z_Z____ _ГГГГ & 0 #
PowerManagementCapabilities:
PowerManagementSupported:
Служба: WUDFRd
Состояние: ошибка
StatusInfo:
SystemCreationClassName: Win32_ComputerSystem
Имя системы: BYDEFAULT

*1147*
__CLASS: Win32_PnPEntity
__SUPERCLASS: CIM_LogicalDevice
__DYNASTY: CIM_ManagedSystemElement
__RELPATH: Win32_PnPEntity.DeviceID = "STORAGE \ ОБЪЕМ \ _ ?? _ USBSTOR # DISK & VEN_MYCOMPANY & PROD_ZZZZ _-_ ХРАНЕНИЯ & REV_5678 # YYYY & 0 # {53F56307-B6BF-11D0-94F2-00A0C91EFB8B}"
__PROPERTY_COUNT: 24
__DERIVATION: {CIM_LogicalDevice, CIM_LogicalElement,CIM_ManagedSystemElement}
__SERVER: BYDEFAULT
__NAMESPACE: корень \ cimv2
__PATH: \ BYDEFAULT \ корень \ cimv2: Win32_PnPEntity.DeviceID = "STORAGE \ ОБЪЕМ \ _ ?? _ USBSTOR # DISK & VEN_MYCOMPANY & PROD_ZZZZ _-_ ХРАНЕНИЯ & REV_5678 # YYYY & 0 # {53F56307-B6BF-11D0-94F2-00A0C91EFB8B} "
Доступность:
Подпись: общий том
ClassGuid: {71a27cdd-812a-11d0-bec7-08002be2092f}
CompatibleID:
ConfigManager 0 Ошибка1163 * ConfigManagerUserConfig: Ложные
CreationClassName: Win32_PnPEntity
Описание: Общий объем
DeviceID: STORAGE \ оБЪЕМ _ ?? _ USBSTOR # DISK & VEN_MYCOMPANY & PROD_ZZZZ _-_ ХРАНЕНИЯ & REV_5678 # YYYY & 0 # {53F56307-B6BF-11D0-94F2-00A0C91EFB8B}
ErrorCleared:
ErrorDescription:
HardwareID: {STORAGE \ Volume}
InstallDate:
LastErrorCode:
Производитель: Microsoft
Название: Общий объем
PNPDeviceID: STORAGE \ ОБЪЕМ _ ?? _ USBSTOR # DISK & VEN_MYCOMPANY & PROD_ZZZZ _-_ ХРАНЕНИЯ & REV_5678 # YYYY & 0 # {53F56307-B6BF-11D0-94F2-00A0C91EFB8B}
PowerManagementCapabilities:
PowerManagementSupported:
Служба: volsnap
Статус: ОК
StatusInfo:
SystemCreationClassName: Win32_ComputerSystem
Имя_системы *1181* имя_системы: 118183EEFNULT: 118383EULT BY: 1182* рОД: 2
__CLASS: Win32_PnPEntity
__SUPERCLASS: CIM_LogicalDevice
__DYNASTY: CIM_ManagedSystemElement
__RELPATH: Win32_PnPEntity.DeviceID = "USBSTOR \ DISK & VEN_MYCOMPANY & PROD_ZZZZ _-_ ХРАНЕНИЯ & REV_5678 \ YYYY & 0"
__PROPERTY_COUNT: 24
__DERIVATION: {CIM_LogicalDevice, CIM_LogicalElement, CIM_ManagedSystemElement}
__SERVER: BYDEFAULT
__NAMESPACE: корень \ cimv2
__PATH: \ BYDEFAULT \ корень \ cimv2: Win32_PnPEntity.DeviceID = "USBSTOR \ DISK & VEN_MYCOMPANY & PROD_ZZZZ _-_ StoragE & REV_5678 \ YYYY & 0 "
Доступность:
Заголовок: MYCOMPANY ZZZZ - USB-накопитель
ClassGuid: {4d36e967-e325-11ce-bfc1-08002be10318}
CompatibleID: {USBSTOR \ Disk} USBSTOR \ USB, USBSTOR
ConfigManagerErrorCode: 0
ConfigManagerUserConfig: Ложные
CreationClassName: Win32_PnPEntity
Описание: диск
DeviceID: USBSTOR \ DISK & VEN_MYCOMPANY & PROD_ZZZZ _-_ ХРАНЕНИЯ & REV_5678 \ YYYY & 0
ErrorCleared:
ErrorDescription:
HardwareID: {USBSTOR \ DiskMYCOMPANY ___ ZZZZ _-_ Storage5678, USBSTOR \ DiskMYCOMPANY ___ ZZZZ _- Хранилище, USBSTOR \ DiskMYCOMPANY
, USBSTOR \ MYCOMPANY ___ 120 * * * * * * * * * * * * 12 * * 12 * * * * * * * * * * * 12 * * * * * * * * *Производитель: (Стандартные дисковые накопители)
Имя: MYCOMPANY ZZZZ - USB-устройство хранения данных
PNPDeviceID: USBSTOR \ DISK & VEN_MYCOMPANY & PROD_ZZZZ _-_ STORAGE & REV_5678 \ YYYY & 0
Состояние питания * * 12 * Состояние службы: * 12 * Service17: 12 * * 1515S: OK
StatusInfo:
SystemCreationClassName: Win32_ComputerSystem
SystemName: BYDEFAULT

Приведенный выше набор результатов показывает много информации.

Результат 1 - «ТИП ОБСЛУЖИВАНИЯ» - «USBSTOR».Это Win32_PnPEntity, которую я хочу использовать при прослушивании «__InstanceModificaitionEvent», так как он дает мне VID и PID.
Результат 2 - Представление «Составное устройство», которое мне не интересно.
Результат 3 - «ТИП СЕРВИСА»'это' volsnap '.Это сущность тома, и я заинтересован в этом.
Результат 4 - «ТИП ОБСЛУЖИВАНИЯ» - это «диск».Это сущность диска, и я заинтересован в этом.

Как получить связь между «Результатом 1» и «Результатом 3» И / ИЛИ «Результатом 4»?

Я пытался использовать ассоциирующий класс 'Win32_PnPDevice', но, похоже, я не достиг того, что мне нужно.Я новичок в этой среде PowerShell WMI и WMQ, поэтому вполне возможно, что я не правильно использую 'Win32_PnPDevice'.

Я выполнил следующий запрос, чтобы определить, что было в "SameElement" и "SystemElement"свойства соответствующего объекта Win32_PnPDevice:

gwmi Win32_PNPDevice |% {[wmi] ( $ .SameElement )} |выберите {$ .Name, $ .Description, $ .DeviceId, $ _. Status}
gwmi Win32_PNPDevice |% {[wmi] ( $ .SystemElement )} |выберите {$ .Name, $ .Description, $ .DeviceId, $ _. Status}

Результаты можно прочитать следующим образом:

Win32_PNPDevice.SameElement - {PhysicalDrive1, накопитель, PhysicalDrive1, OK} Win32_PNPDevice.SystemElement - {моякомп ZZZZ - Хранение устройства USB, диск, USBSTOR_DISK & VEN_MYCOMPANY & PROD_ZZZZ _-_ хРАНЕНИЯ & REV_5678_YYYY & 0, OK}

Win32_PNPDevice.SameElement - {USB-накопитель, USB-накопитель, USB_VID_XXXX & PID_0001_YYYY, OK}
Win32_PNPDevice.SystemElement - {USB Mass StorageUSB Mass Storage Device, USB_VID_XXXX & PID_0001_YYYY, OK}

Возможно, я неправильно использую класс 'Win32_PnPDevice', но может показаться, что я не могу подключить 'Win32_PnPEntity' к 'Win32_DiskDrive' ...

Надеюсь, эта дополнительная информация лучше описывает мою проблему.

...