IWbemObjectAccess
COM公式ドキュメント
オブジェクトのメソッドおよびプロパティへのアクセスを提供します。
解説(Remarks)
データの読み書きを行う IWbemObjectAccess のメソッドは、データの検証をほとんど行いません。 IWbemObjectAccess のメソッドはプロパティに直接アクセスするため、 IWbemClassObject::Get や IWbemClassObject::Put といった標準的なオブジェクトアクセス手法よりも大幅に高速にプロパティを取得・設定できます。
メソッド 10
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
GetPropertyHandle メソッドは、プロパティを識別する一意のハンドルを返します。このハンドルは、IWbemObjectAccess のメソッドでプロパティ値を読み書きする際にプロパティを識別するために使用できます。
| wszPropertyName | LPWSTR | in | プロパティ名を格納した、16 ビット Unicode 文字による定数の null 終端文字列です。 |
| pType | INT* | out | プロパティの CIM 型を返すために使用する CIMTYPE へのポインターです。 |
| plHandle | INT* | out | プロパティハンドルを返すために使用する整数へのポインターです。 |
戻り値
このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。次の一覧は、HRESULT に格納される値を示します。
解説(Remarks)
ハンドルは、CIM_OBJECT および CIM_ARRAY 以外のすべてのデータ型について取得できます。返されたハンドルは、そのクラスのすべてのインスタンスで有効です。
WritePropertyValue メソッドは、プロパティハンドルで識別されるプロパティに、指定したバイト数のデータを書き込みます。文字列やその他の DWORD・QWORD 以外のデータを設定する場合に、このメソッドを使用します。
| lHandle | INT | in | このプロパティを識別するハンドルを格納した整数です。 |
| lNumBytes | INT | in | プロパティに書き込むバイト数を格納した整数です。文字列以外のプロパティ値の場合、lNumBytes は指定したプロパティ型の正しいデータサイズでなければなりません。reference、string、datetime などの文字列型プロパティ値の場合、lNumBytes は指定した文字列のバイト単位の長さでなければならず、文字列自体はバイト長が偶数で、null 終端文字が後に続いている必要があります。 |
| aData | BYTE* | in | データを格納した定数バイト型配列へのポインターです。 |
戻り値
このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。次の一覧は、HRESULT に格納される値を示します。
ReadPropertyValue メソッドは、プロパティハンドルに関連付けられたプロパティのデータを、指定したバイト数だけ返します。
| lHandle | INT | in | このプロパティを識別するハンドルを格納した整数です。 |
| lBufferSize | INT | in | バッファーサイズを格納した整数です。 |
| plNumBytes | INT* | out | 読み取ったバイト数を返すために使用する整数へのポインターです。 |
| aData | BYTE* | out | プロパティのデータを返すために使用する配列へのポインターです。 |
戻り値
成功した場合、このメソッドは WBEM_S_NO_ERROR を返します。それ以外の場合は、次のいずれかの値を持つ HRESULT を返します。
解説(Remarks)
文字列データは、null 終端の WCHAR データとして返されます。
ReadDWORD メソッドは、プロパティハンドルを使用して 32 ビットのプロパティデータを読み取ります。
| lHandle | INT | in | このプロパティを識別するハンドルを格納した整数です。 |
| pdw | DWORD* | out | データを返すために使用する 32 ビット符号なし整数へのポインターです。 |
戻り値
このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。次の一覧は、HRESULT に格納される値を示します。
WriteDWORD メソッドは、プロパティハンドルで識別されるプロパティに 32 ビットのデータを書き込みます。
| lHandle | INT | in | このプロパティを識別するハンドルを格納した整数です。 |
| dw | DWORD | in | 書き込むデータを格納した 32 ビット符号なし整数です。 |
戻り値
成功した場合、このメソッドは WBEM_S_NO_ERROR を返します。
ReadQWORD メソッドは、プロパティハンドルで識別される 64 ビットのプロパティデータを読み取ります。
| lHandle | INT | in | プロパティを識別するハンドルを格納した整数です。 |
| pqw | ULONGLONG* | out | 読み取ったデータを返すために使用する 64 ビット符号なし整数へのポインターです。 |
戻り値
成功した場合、このメソッドは WBEM_S_NO_ERROR を返します。プロパティが NULL であった場合は、WBEM_S_FALSE を返します。
WriteQWORD メソッドは、プロパティハンドルを使用してプロパティに 64 ビットのデータを書き込みます。
| lHandle | INT | in | このプロパティを識別するハンドルを格納した整数です。 |
| pw | ULONGLONG | in | 指定したプロパティに書き込むデータを格納した 64 ビット符号なし整数です。 |
戻り値
成功した場合、このメソッドは WBEM_S_NO_ERROR を返します。
GetPropertyInfoByHandle メソッドは、プロパティハンドルに関連付けられたプロパティの名前とデータ型を返します。
| lHandle | INT | in | プロパティを識別するハンドルを格納した整数です。 |
| pstrName | LPWSTR* | out | 指定したプロパティの名前を返すために使用する文字列へのポインターです。 |
| pType | INT* | out | プロパティの型を返すために使用する CIMTYPE へのポインターです。 |
戻り値
このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。次の一覧は、HRESULT に格納される値を示します。
Lock メソッドは、IWbemObjectAccess オブジェクトのロックが解除されるまで、他のスレッドによる更新を禁止します。
| lFlags | INT | in | 予約されています。このパラメーターは現在無視され、将来の使用のために予約されています。 |
戻り値
成功した場合、このメソッドは WBEM_S_NO_ERROR を返します。
Unlock メソッドは、他のスレッドが IWbemObjectAccess オブジェクトのプロパティ値を更新できるようにします。
| lFlags | INT | in | 予約されています。このパラメーターは現在無視され、将来の使用のために予約されています。 |
戻り値
成功した場合、このメソッドは WBEM_S_NO_ERROR を返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IWbemObjectAccess "{49353C9A-516B-11D1-AEA6-00C04FB68820}" #usecom global IWbemObjectAccess IID_IWbemObjectAccess "{}" #comfunc global IWbemObjectAccess_GetPropertyHandle 27 wstr,var,var #comfunc global IWbemObjectAccess_WritePropertyValue 28 int,int,var #comfunc global IWbemObjectAccess_ReadPropertyValue 29 int,int,var,var #comfunc global IWbemObjectAccess_ReadDWORD 30 int,var #comfunc global IWbemObjectAccess_WriteDWORD 31 int,int #comfunc global IWbemObjectAccess_ReadQWORD 32 int,var #comfunc global IWbemObjectAccess_WriteQWORD 33 int,int64 #comfunc global IWbemObjectAccess_GetPropertyInfoByHandle 34 int,var,var #comfunc global IWbemObjectAccess_Lock 35 int #comfunc global IWbemObjectAccess_Unlock 36 int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IWbemObjectAccess "{49353C9A-516B-11D1-AEA6-00C04FB68820}" #usecom global IWbemObjectAccess IID_IWbemObjectAccess "{}" #comfunc global IWbemObjectAccess_GetPropertyHandle 27 wstr,sptr,sptr #comfunc global IWbemObjectAccess_WritePropertyValue 28 int,int,sptr #comfunc global IWbemObjectAccess_ReadPropertyValue 29 int,int,sptr,sptr #comfunc global IWbemObjectAccess_ReadDWORD 30 int,sptr #comfunc global IWbemObjectAccess_WriteDWORD 31 int,int #comfunc global IWbemObjectAccess_ReadQWORD 32 int,sptr #comfunc global IWbemObjectAccess_WriteQWORD 33 int,int64 #comfunc global IWbemObjectAccess_GetPropertyInfoByHandle 34 int,sptr,sptr #comfunc global IWbemObjectAccess_Lock 35 int #comfunc global IWbemObjectAccess_Unlock 36 int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。