我正在检测我们的专有 USB 设备何时连接到 PC。当我们检测到这一点时,我们会得到相关的Win32_PnPEntity。我们希望将此Win32_PnPEntity用作以下信息的来源:
- USB 描述符 VID、PID、REV、固件版本。
- 逻辑磁盘驱动器卷和分区信息以获取驱动器号信息。
我遇到的问题是试图弄清楚如何使用 WMI 和 WMQ 从Win32_PnPEntity获取逻辑磁盘和分区信息。Win32_PnPEntity属于服务类型USBSTOR (我认为是USB 存储?)
以下是我目前经历的过程的描述:
我使用事件观察器监听Win32_USBControllerDevice以检测 USB 设备何时与 PC 连接或分离。我使用以下查询来限制事件发生的内容:
“SELECT * FROM
__InstanceOperationEvent WITHIN 1 WHERE TargetInstance ISA
'Win32_USBControllerDevice' AND
TargetInstance.__RELPATH LIKE '%DeviceId=%VID_1111%'”
当此事件发生时,我拉出“ Win32_USBControllerDevice.Dependent ”属性并拉出“ DeviceId ”值。然后,我将这个“ DeviceId ”值与Win32_PNPEntity类一起使用来获取关联的实例。
这就是事情对我来说变得棘手的地方......
我需要找到与Win32_PnPEntity实例相关的Win32_DiskDrive 。我需要这个实例来获取卷信息,这样我就可以获得每个分区分配的驱动器号。但我不知道如何到达它。
我经历了这个过程,因为Win32_PnPEntity提供了 VID、PID 以限制事件侦听和搜索……但它也提供了我需要的固件版本。所以从这一点开始,我想获得Win32_PnPEntity的Win32_DiskDrive。
任何输入将不胜感激。
--- 更好地描述问题的额外信息:
到目前为止我的工作步骤如下:
- 收听“
Win32_USBControllerDevice”的“__InstanceModificaitionEvent” - 从“__InstanceModificaitionEvent”的“TargetInstnace”获取“Win32_PnPEntity” - 从“Win32_PnPEntity”
获取“DeviceId” ' 其中包含PID、VID信息。
我现在遇到的问题是试图找到 'Win32_LogicalDisk' AND/OR 'Win32_DiskDrive' AND/OR 'Win32_DiskPartition' 或其他一些 ASSOCIATOR 或 REFERENCES 链接到已为“Mass Storge”实例分配的 USB 设备所连接的驱动器号.
下面的“图表”描述了我能想到这个问题的最佳方式:
USB DEVICE
| |
----------| |----
| Win32_DiskDrive | Win32_PnPEntity
我想要做的是弄清楚如何从 USB 设备的“Win32_PnPEntity”表示到“Win32_DiskDrive”表示。
以下是我在连接设备时运行的 powershell 脚本。它为我提供了属于 USB 设备的所有实例。我知道它们属于一个设备,因为我只连接了其中一个设备,并且通过我们对 USB 描述符的自定义编辑,我知道会发生什么。
PS C:\Users\USER.DOMAIN> gwmi Win32_PNPEntity |? { ($_.DeviceId -match 'VEN_MYCOMPANY&') -or ($_.DeviceId -match 'VID_XXXX')}
__GENUS : 2
__CLASS : Win32_PnPEntity
__SUPERCLASS : CIM_LogicalDevice
__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 : root\cimv2
__PATH : \BYDEFAULT\ root\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_08}
ConfigManagerErrorCode
: 0
ConfigManagerUserConfig : False
CreationClassName : Win32_PnPEntity
Description _X USB Mass Storage Device
ErrorCleared :
ErrorDescription :
HardwareID : {USB\VID_XXXX&PID_0001&REV_0001, USB\VID_XXXX&PID_0001} 安装
日期 :
LastErrorCode :
制造商 : 兼容的 USB 存储设备
名称:USB 大容量存储设备
PNPDeviceID:USB\VID_XXXX&PID_0001\YYYY
PowerManagementCapabilities:
PowerManagementSupported:
服务:USBSTOR
状态:OK
StatusInfo:
SystemCreationClassName:Win32_ComputerSystem
SystemName:BYDEFAULT
__GENUS : 2
__CLASS : Win32_PnPEntity
__SUPERCLASS : CIM_LogicalDevice
__DYNASTY : CIM_ManagedSystemElement
__RELPATH : Win32_PnPEntity.DeviceID="WPDBUSENUMROOT\UMB\2&37C186B&0&STORAGE#VOLUME#_??_USBSTOR#DISK&VEN_MYCOMPANY&PROD_ZZZZ_-_STORAGE&REV_5678#YYYY&0#"
__PROPERTY_COUNT : 24
__DERIVATION : {CIM_LogicalDevice, CIM_LogicalElement, CIM_ManagedSystemElement }
__SERVER : BYDEFAULT
__NAMESPACE : root\cimv2
__path:\ bydefault \ root \ cimv2: win32_pnpentity.deviceid =“
wpdbusenumroot \
umb
\ umb \ umb \ 2&37c186b&0&storage#卷#dabf3de3f69a}
CompatibleID : {wpdbusenum\fs}
ConfigManagerErrorCode : 10
ConfigManagerUserConfig : False
CreationClassName : Win32_PnPEntity
Description : MYCOMPANY - Storage
DeviceID : WPDBUSENUMROOT\UMB\2&37C186B&0&STORAGE#VOLUME#_??_USBSTOR#DISK&VEN_MYCOMPANY&PROD_ZZZZ_-_STORAGE&REV_5678#YYYY&0#
错误清除:
ErrorDescription :
HardwareID :
InstallDate :
LastErrorCode :
Manufacturer : MYCOMPANY
Name : ZZZZ
PNPDeviceID : WPDBUSENUMROOT\UMB\2&37C186B&0&STORAGE#VOLUME#_??_USBSTOR#DISK&VEN_MYCOMPANY&PROD_ZZZZ_-_STORAGE&REV_5678#YYYY&0#
PowerManagementCapabilities :
PowerManagementSupported :
Service : WUDFRd
Status : Error
StatusInfo :
SystemCreationClassName : Win32_ComputerSystem
系统名称:默认
__GENUS : 2
__CLASS : Win32_PnPEntity
__SUPERCLASS : CIM_LogicalDevice
__DYNASTY : CIM_ManagedSystemElement
__RELPATH : Win32_PnPEntity.DeviceID="STORAGE\VOLUME\_??_USBSTOR#DISK&VEN_MYCOMPANY&PROD_ZZZZ_-_STORAGE&REV_5678#YYYY&0#{53F56307-B6BF-11D0-94F2-00A0C91EFB8B}"
__PROPERTY_COUNT : 24
__DERIVATION :{CIM_LogicalDevice,CIM_LogicalElement,CIM_ManagedSystemElement}
__SERVER:BYDEFAULT
__NAMESPACE:root\cimv2
__PATH : \BYDEFAULT\root\cimv2:Win32_PnPEntity.DeviceID="STORAGE\VOLUME\_??_USBSTOR#DISK&VEN_MYCOMPANY&PROD_ZZZZ_-_STORAGE&REV_5678#YYYY&0#{53F56307-B6BF-11D0-94F2-00A0C91EFB8B}"类
可用性
:{
标题:
71a27cdd-812a-11d0-bec7-08002be2092f}
CompatibleID:
ConfigManagerErrorCode:0
ConfigManagerUserConfig:False
CreationClassName:Win32_PnPEntity
描述:通用卷
DeviceID:STORAGE\VOLUME_??_USBSTOR#DISK&VEN_MYCOMPANY&PROD_ZZZZ_-_STORAGE&REV_50#{53F56307-B6BF-11D0-94F2-00A0C91EFB8B}
错误已清除:
错误描述:
HardwareID:{STORAGE\Volume}
InstallDate:
LastErrorCode:
制造商:Microsoft
名称:通用卷
PNPDeviceID:STORAGE\VOLUME_??_USBSTOR#DISK&VEN_MYCOMPANY&PROD_ZZZZ_-_STORAGE&REV_5678#YYYY&0#{53F56307-B6BF-11D0-94F2-0mentCapSupportedPowerCapabilities
:管理
EFB8B9 }
服务:volsnap
状态:OK
StatusInfo:
SystemCreationClassName:Win32_ComputerSystem
SystemName:BYDEFAULT
GENUS : 2
__CLASS : Win32_PnPEntity
__SUPERCLASS : CIM_LogicalDevice
__DYNASTY : CIM_ManagedSystemElement
__RELPATH : Win32_PnPEntity.DeviceID="USBSTOR\DISK&VEN_MYCOMPANY&PROD_ZZZZ_-_STORAGE&REV_5678\YYYY&0"
__PROPERTY_COUNT : 24
__DERIVATION : {CIM_LogicalDevice, CIM_LogicalElement, CIM_ManagedSystemElement}
__SERVER : BYDEFAULT
__NAMESPACE : root\cimv2
__PATH : \ BYDEFAULT\root\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\RAW}
ConfigManagerErrorCode:0
ConfigManagerUserConfig:False
CreationClassName:Win32_PnPEntity
描述:磁盘驱动器
Device_ID:USBSTOR_MYCOMPANY&VEN -_STORAGE&REV_5678\YYYY&0
ErrorCleared :
ErrorDescription :
HardwareID : {USBSTOR\DiskMYCOMPANY___ZZZZ_-_Storage5678, USBSTOR\DiskMYCOMPANY___ZZZZ_-存储, USBSTOR\DiskMYCOMPANY , USBSTOR\MYCOMPANY___ZZZZ_-_Storage5...}
安装日期:
LastErrorCode:
制造商:(标准磁盘驱动器)
名称:MYCOMPANY ZZZZ - 存储 USB 设备
PNPDeviceID:USBSTOR\DISK&VEN_MYCOMPANY&PROD_ZZZZ_-_STORAGE&REV_5678\YYYY&0
PowerManagementCapabilities:
PowerManagementSupported:
服务:磁盘
状态:OK
StatusInfo:
SystemCreationClassName:Win32_ComputerSystem
SystemName:
上面的结果集显示了很多信息。
结果 1 -“服务类型”为“USBSTOR”。这是我在收听“__InstanceModificaitionEvent”时要使用的 Win32_PnPEntity,因为它为我提供了 VID 和 PID。
结果 2 - 是我不感兴趣的复合设备表示。
结果 3 - 'SERVICE TYPE' 是 'volsnap'。这是体积实体,我对此很感兴趣。
结果 4 -“服务类型”是“磁盘”。这是磁盘实体,我对此感兴趣。
如何获得“结果 1”和“结果 3”和/或“结果 4”之间的关系?
我曾尝试使用“Win32_PnPDevice”关联类,但它似乎并没有让我达到我需要的程度。我是这个 powershell WMI 和 WMQ 环境的新手,所以很可能我没有正确使用“Win32_PnPDevice”。
我运行以下查询来确定相关“Win32_PnPDevice”实体的“SameElement”和“SystemElement”属性上的内容:
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 - {MYCOMPANY ZZZZ - 存储 USB 设备, 磁盘驱动器, USBSTOR_DISK&VEN_MYCOMPANY&PROD_ZZZZ_-_STORAGE&REV_5678_YYYY&0, OK}
Win32_PNPDevice.SameElement - {USB 海量存储设备,USB 海量存储设备,USB_VID_XXXX&PID_0001_YYYY,OK}
Win32_PNPDevice.SystemElement - {USB 海量存储设备,USB 海量存储设备,USB_VID_XXXX&PID_0001_YYYY,OK}
也许我错误地使用了“Win32_PnPDevice”类,但似乎我无法将“Win32_PnPEntity”连接到“Win32_DiskDrive”......
我希望这些额外的信息能更好地描述我的问题。