Win32 API 日本語リファレンス
ホームSystem.Wmi › IWbemObjectAccess

IWbemObjectAccess

COM
IID49353c9a-516b-11d1-aea6-00c04fb68820継承元IWbemClassObject自前メソッド開始 vtbl27

公式ドキュメント

オブジェクトのメソッドおよびプロパティへのアクセスを提供します。

解説(Remarks)

データの読み書きを行う IWbemObjectAccess のメソッドは、データの検証をほとんど行いません。 IWbemObjectAccess のメソッドはプロパティに直接アクセスするため、 IWbemClassObject::GetIWbemClassObject::Put といった標準的なオブジェクトアクセス手法よりも大幅に高速にプロパティを取得・設定できます。

メモ 速度を最大化するため、 IWbemObjectAccess は一切のチェックを行いません。すべてのハンドルが正しいこと、および書き込みバッファーのサイズが正しいことを保証するのは利用者の責任です。読み取りおよび書き込み操作は本質的にスレッドセーフではありません。複数のスレッドから IWbemObjectAccess オブジェクトへ同時アクセスされることを防ぐため、 IWbemObjectAccess::Lock メソッドと IWbemObjectAccess::Unlock メソッドを呼び出してください。
プロパティハンドルは、クラスのすべてのインスタンスで同一です。したがって、ハンドルの取得は一度だけ行えば十分です。

メソッド 10

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 27 HRESULT GetPropertyHandle(LPWSTR wszPropertyName, INT* pType, INT* plHandle)

GetPropertyHandle メソッドは、プロパティを識別する一意のハンドルを返します。このハンドルは、IWbemObjectAccess のメソッドでプロパティ値を読み書きする際にプロパティを識別するために使用できます。

wszPropertyNameLPWSTRinプロパティ名を格納した、16 ビット Unicode 文字による定数の null 終端文字列です。
pTypeINT*outプロパティの CIM 型を返すために使用する CIMTYPE へのポインターです。
plHandleINT*outプロパティハンドルを返すために使用する整数へのポインターです。

戻り値

このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。次の一覧は、HRESULT に格納される値を示します。

解説(Remarks)

ハンドルは、CIM_OBJECT および CIM_ARRAY 以外のすべてのデータ型について取得できます。返されたハンドルは、そのクラスのすべてのインスタンスで有効です。

vtbl 28 HRESULT WritePropertyValue(INT lHandle, INT lNumBytes, BYTE* aData)

WritePropertyValue メソッドは、プロパティハンドルで識別されるプロパティに、指定したバイト数のデータを書き込みます。文字列やその他の DWORD・QWORD 以外のデータを設定する場合に、このメソッドを使用します。

lHandleINTinこのプロパティを識別するハンドルを格納した整数です。
lNumBytesINTinプロパティに書き込むバイト数を格納した整数です。文字列以外のプロパティ値の場合、lNumBytes は指定したプロパティ型の正しいデータサイズでなければなりません。reference、string、datetime などの文字列型プロパティ値の場合、lNumBytes は指定した文字列のバイト単位の長さでなければならず、文字列自体はバイト長が偶数で、null 終端文字が後に続いている必要があります。
aDataBYTE*inデータを格納した定数バイト型配列へのポインターです。

戻り値

このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。次の一覧は、HRESULT に格納される値を示します。

vtbl 29 HRESULT ReadPropertyValue(INT lHandle, INT lBufferSize, INT* plNumBytes, BYTE* aData)

ReadPropertyValue メソッドは、プロパティハンドルに関連付けられたプロパティのデータを、指定したバイト数だけ返します。

lHandleINTinこのプロパティを識別するハンドルを格納した整数です。
lBufferSizeINTinバッファーサイズを格納した整数です。
plNumBytesINT*out読み取ったバイト数を返すために使用する整数へのポインターです。
aDataBYTE*outプロパティのデータを返すために使用する配列へのポインターです。

戻り値

成功した場合、このメソッドは WBEM_S_NO_ERROR を返します。それ以外の場合は、次のいずれかの値を持つ HRESULT を返します。

解説(Remarks)

文字列データは、null 終端の WCHAR データとして返されます。

vtbl 30 HRESULT ReadDWORD(INT lHandle, DWORD* pdw)

ReadDWORD メソッドは、プロパティハンドルを使用して 32 ビットのプロパティデータを読み取ります。

lHandleINTinこのプロパティを識別するハンドルを格納した整数です。
pdwDWORD*outデータを返すために使用する 32 ビット符号なし整数へのポインターです。

戻り値

このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。次の一覧は、HRESULT に格納される値を示します。

vtbl 31 HRESULT WriteDWORD(INT lHandle, DWORD dw)

WriteDWORD メソッドは、プロパティハンドルで識別されるプロパティに 32 ビットのデータを書き込みます。

lHandleINTinこのプロパティを識別するハンドルを格納した整数です。
dwDWORDin書き込むデータを格納した 32 ビット符号なし整数です。

戻り値

成功した場合、このメソッドは WBEM_S_NO_ERROR を返します。

vtbl 32 HRESULT ReadQWORD(INT lHandle, ULONGLONG* pqw)

ReadQWORD メソッドは、プロパティハンドルで識別される 64 ビットのプロパティデータを読み取ります。

lHandleINTinプロパティを識別するハンドルを格納した整数です。
pqwULONGLONG*out読み取ったデータを返すために使用する 64 ビット符号なし整数へのポインターです。

戻り値

成功した場合、このメソッドは WBEM_S_NO_ERROR を返します。プロパティが NULL であった場合は、WBEM_S_FALSE を返します。

vtbl 33 HRESULT WriteQWORD(INT lHandle, ULONGLONG pw)

WriteQWORD メソッドは、プロパティハンドルを使用してプロパティに 64 ビットのデータを書き込みます。

lHandleINTinこのプロパティを識別するハンドルを格納した整数です。
pwULONGLONGin指定したプロパティに書き込むデータを格納した 64 ビット符号なし整数です。

戻り値

成功した場合、このメソッドは WBEM_S_NO_ERROR を返します。

vtbl 34 HRESULT GetPropertyInfoByHandle(INT lHandle, LPWSTR* pstrName, INT* pType)

GetPropertyInfoByHandle メソッドは、プロパティハンドルに関連付けられたプロパティの名前とデータ型を返します。

lHandleINTinプロパティを識別するハンドルを格納した整数です。
pstrNameLPWSTR*out指定したプロパティの名前を返すために使用する文字列へのポインターです。
pTypeINT*outプロパティの型を返すために使用する CIMTYPE へのポインターです。

戻り値

このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。次の一覧は、HRESULT に格納される値を示します。

vtbl 35 HRESULT Lock(INT lFlags)

Lock メソッドは、IWbemObjectAccess オブジェクトのロックが解除されるまで、他のスレッドによる更新を禁止します。

lFlagsINTin予約されています。このパラメーターは現在無視され、将来の使用のために予約されています。

戻り値

成功した場合、このメソッドは WBEM_S_NO_ERROR を返します。

vtbl 36 HRESULT Unlock(INT lFlags)

Unlock メソッドは、他のスレッドが IWbemObjectAccess オブジェクトのプロパティ値を更新できるようにします。

lFlagsINTin予約されています。このパラメーターは現在無視され、将来の使用のために予約されています。

戻り値

成功した場合、このメソッドは WBEM_S_NO_ERROR を返します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 方式にも切替可。