当社独自の USB デバイスが PC に接続されていることを検出しています。これを検出すると、関連するWin32_PnPEntityを取得します。このWin32_PnPEntityを次の情報のソースとして使用します。
- USB 記述子 VID、PID、REV、ファームウェア バージョン。
- ドライブ文字情報を取得するための論理ディスク ドライブ ボリュームおよびパーティション情報。
私が抱えている問題は、WMI と WMQ を使用して、 Win32_PnPEntityから論理ディスクとパーティション情報にアクセスする方法を見つけようとしていることです。Win32_PnPEntityはServiceタイプのUSBSTOR (USB Storage だと思いますか?)
以下は、私が現在行っているプロセスの説明です。
USB デバイスが PC に接続または切断されたことを検出するために、イベント ウォッチャーでWin32_USBControllerDeviceをリッスンします。次のクエリを使用して、イベントで発生するものを制限します。
「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」および/または「Win32_DiskDrive」および/または「Win32_DiskPartition」または、接続された USB デバイスが「Mass Storge」インスタンスに割り当てられているドライブ文字への他の ASSOCIATOR または REFERENCES リンクを見つけようとすることです。 .
この問題について私が考える最善の方法は、次の「図」で説明されています。
USB DEVICE
| |
----------| |----
| Win32_DiskDrive | Win32_PnPEntity
私がやろうとしているのは、USB デバイスの「Win32_PnPEntity」表現から「Win32_DiskDrive」表現に取得する方法を理解することです。
以下は、デバイスが接続されているときに実行する powershell スクリプトです。USB デバイスに属するすべてのインスタンスが表示されます。私はデバイスの 1 つだけを接続しているので、それらが 1 つのデバイスに属していることを知っています。
PS C:\Users\USER.DOMAIN> gwmi Win32_PNPEntity |? { ($_.DeviceId -match 'VEN_MYCOMPANY&') -または ($_.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
ErrorCleared :
ErrorDescription :
HardwareID : {USB\VID_XXXX&PID_0001&REV_0001, USB\VID_XXXX&PID_0001}
InstallDate :
LastCode :
メーカー : 互換性のある USB ストレージ デバイス
名前 : USB 大容量記憶装置
PNPDeviceID : USB\VID_XXXX&PID_0001\YYYY
PowerManagementCapabilities :
PowerManagementSupported :
Service : USBSTOR
Status : 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\2&37C186B&0&STORAGE#VOLUME#_??_USBSTOR#DISK&VEN_MYCOMPANYI&PROD_ZZZZ_-_STORAGE&REV_5678#YYYY&0#"
dabf3de3f69a}
CompatibleID: {wpdbusenum\fs}
ConfigManagerErrorCode: 10
ConfigManagerUserConfig
: False
CreationClassName:
Win32_PnPEntity0#
エラークリア:
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
システム名 : BYDEFAULT
__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_ZZ_-_STORAGE&REVYY_5678#0#{53F56307-B6BF-11D0-94F2-00A0C91EFB8B}
エラークリア済み:
ErrorDescription:
HardwareID: {STORAGE\Volume}
InstallDate
:
LastErrorCode
:
メーカー
: Microsoft
名前: 汎用ボリューム
サービス: 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 -_STORAGE&REV_5678\YYYY&0
ErrorCleared:
ErrorDescription:
HardwareID: {USBSTOR\DiskMYCOMPANY___ZZZZ_-_Storage5678, USBSTOR\DiskMYCOMPANY___ZZZZ_- Storage, USBSTOR\DiskMYCOMPANY
, USBSTOR\MYCOMPANY___ZZZZ_-_Storage5...}
InstallDate :
LastErrorCode :製造元 : (標準
ディスク
ドライブ)名前
:
MYCOMPANY
ZZZZ - ストレージ USB デバイス
PNPDeviceID
:
USBSTOR \DISK&
VEN_MYCOMPANY
&PROD_ZZZZ_-_STORAGE&REV_5678\YYYY&0
上記の結果セットは、多くの情報を示しています。
結果 1 - 'SERVICE TYPE' は 'USBSTOR' です。これは、VID と PID が得られるので、'__InstanceModificaitionEvent' をリッスンするときに使用したい Win32_PnPEntity です。
結果 2 - 興味のない複合デバイス表現です。
結果 3 - 「SERVICE TYPE」は「volsnap」です。これはボリューム エンティティであり、私はこれに興味があります。
結果 4 - 'SERVICE TYPE' は 'disk' です。これはディスクエンティティであり、私はこれに興味があります。
「結果 1」と「結果 3」および/または「結果 4」の関係を取得するにはどうすればよいですか?
「Win32_PnPDevice」関連付けクラスを使用してみましたが、必要なポイントに達していないようです。私はこの PowerShell WMI および WMQ 環境に慣れていないため、'Win32_PnPDevice' を正しく使用していない可能性があります。
次のクエリを実行して、関連する「Win32_PnPDevice」エンティティの「SameElement」および「SystemElement」プロパティにあるものを特定しました。
gwmi Win32_PNPDevice |%{[wmi]
(
$ .SameElement)
} | select {$ .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」に接続できないようです...
この追加情報が私の問題をよりよく説明してくれることを願っています。