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

IWbemClassObject

COM
IIDdc12a681-737f-11cf-884d-00aa004b2e24継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

クラス定義とクラスオブジェクトのインスタンスの両方を保持し、操作します。

解説(Remarks)

ユーザーおよびプロバイダーがこのインターフェイスを実装することはありません。WMI が提供する実装のみが サポートされます。

WMI クライアントから見ると、このインターフェイスは常にインプロセスです。書き込み (Put) 操作はオブジェクトのローカルコピーにのみ影響し、 読み取り (Get) 操作は常にローカルコピーから 値を取得します。WMI に対する更新は、IWbemServices インターフェイスのメソッドを使用して オブジェクト全体を読み書きした場合にのみ行われます。そのような更新の例としては、 IWbemServices::PutInstanceIWbemServices::PutClass があります。

メソッド 24

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

vtbl 3 HRESULT GetQualifierSet(IWbemQualifierSet** ppQualSet)

IWbemClassObject::GetQualifierSet メソッドは、オブジェクトがインスタンスであるかクラス定義であるかにかかわらず、クラスオブジェクト全体の修飾子セットに対する読み取りおよび書き込み操作を可能にするインターフェイスポインターを返します。

ppQualSetIWbemQualifierSet**outクラスオブジェクトの修飾子にアクセスするためのインターフェイスポインターを受け取ります。返されるオブジェクトは、呼び出しから戻った時点で正の参照カウントを持ちます。呼び出し元は、オブジェクトが不要になった時点で IWbemQualifierSet::Release を呼び出す必要があります。このパラメーターを NULL にすることはできません。エラー時には、新しいオブジェクトは返されず、ポインターは変更されません。

戻り値

このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。以下のリストは HRESULT に格納される値を示します。一般的な HRESULT の値については、System Error Codes を参照してください。

vtbl 4 HRESULT Get(LPWSTR wszName, INT lFlags, VARIANT* pVal, INT* pType, INT* plFlavor)

IWbemClassObject::Get メソッドは、指定されたプロパティの値が存在する場合にそれを取得します。このメソッドはシステムプロパティも返すことができます。

wszNameLPWSTRin取得するプロパティの名前です。読み取り専用として扱われます。
lFlagsINTin予約されています。このパラメーターは 0 (ゼロ) でなければなりません。
pValVARIANT*inout成功した場合、このパラメーターには修飾子に対応する正しい型と値が設定され、pVal に対して VariantInit 関数が呼び出されます。値が不要になった時点で pVal に対して VariantClear を呼び出すのは呼び出し元の責任です。エラーが発生した場合、pVal が指す値は変更されません。初期化されていない pVal をメソッドに渡した場合、呼び出し元はメソッドの戻り値を確認し、成功した場合にのみ VariantClear を呼び出す必要があります。
pTypeINT*outoptionalNULL を指定できます。NULL でない場合、プロパティの CIM 型、すなわち CIM_SINT32CIM_STRING などの CIM 型定数のいずれかを受け取ります。これらの値の詳細については、CIMTYPE_ENUMERATION を参照してください。これは、VARIANT に格納されたプロパティ値の CIM 上の意味を示します。
plFlavorINT*outoptional

NULL を指定できます。NULL でない場合、指し示された LONG 値がプロパティの由来に関する情報を受け取ります。詳細については、Qualifier Flavors および WBEM_FLAVOR_TYPE を参照してください。

WBEM_FLAVOR_ORIGIN_SYSTEM

プロパティは標準のシステムプロパティです。

WBEM_FLAVOR_ORIGIN_PROPAGATED

クラスの場合のみ。プロパティは親クラスから継承されました。

インスタンスの場合のみ。プロパティは親クラスから継承されており、インスタンスレベルでは変更されていません。

WBEM_FLAVOR_ORIGIN_LOCAL

クラスの場合のみ。プロパティは派生した子クラスに属します。

インスタンスの場合のみ。プロパティはインスタンスレベルで変更されています。つまり、値が指定されたか、修飾子が追加または変更されています。

戻り値

このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。以下のリストは HRESULT に格納される値を示します。一般的な HRESULT の値については、System Error Codes を参照してください。

解説(Remarks)

プロパティの型がオブジェクトパス、日付/時刻文字列、その他の特殊な型である場合、VARIANT で返される値には真の型を特定するのに十分な情報が含まれません。out パラメーター pvtType がこれを示します。

プロパティの Common Information Model (CIM) 型の文字列形式を取得するには、そのプロパティの IWbemQualifierSet ポインターを取得し、Cimtype 修飾子を取得する必要があります。この修飾子は CIM 型の文字列形式であり、数値定数である CIM_SINT32 に対する sint32 のようなものです。

Note IWbemClassObject::SpawnInstance を使用して新しいオブジェクトを作成する場合、一部のシステムプロパティはオブジェクトが Windows Management Instrumentation (WMI) に書き込まれるまで設定されない点に注意してください。いずれの場合も IWbemClassObject::Get は要求されたシステムプロパティへのアクセスに成功しますが、返される VARIANT には VT_NULL が含まれることがあります。

C++ と WMI でクエリを実行する方法の詳しい解説と例については、CodeProject の WMI Queries In C++ を参照してください。

次の C++ の例は、システムプロパティ __CLASS を使用してオブジェクトから CIM クラス名を取得する方法を示しています。このコードをコンパイルするには、次の #include 文と参照が必要です。
#include <iostream>
using namespace std;
#include <wbemidl.h>
#pragma comment(lib, "wbemuuid.lib")
//Assumes that pObj is defined as a pointer
// to an IWbemClassObject object.

VARIANT v;
BSTR strClassProp = SysAllocString(L"__CLASS");
HRESULT hr;
hr = pObj->Get(strClassProp, 0, &v, 0, 0);
SysFreeString(strClassProp);

// check the HRESULT to see if the action succeeded.

if (SUCCEEDED(hr) && (V_VT(&v) == VT_BSTR))
{
    wprintf(L"The class name is %s\n.", V_BSTR(&v));
}
else
{
    wprintf(L"Error in getting specified object\n");
}
VariantClear(&v);


vtbl 5 HRESULT Put(LPWSTR wszName, INT lFlags, VARIANT* pVal, INT Type)

指定した名前のプロパティに新しい値を設定します。

wszNameLPWSTRin有効なプロパティ名を指す必要があるパラメーターです。このパラメーターを NULL にすることはできません。
lFlagsINTin予約されています。このパラメーターは 0 (ゼロ) でなければなりません。
pValVARIANT*in有効な VARIANT を指す必要があるパラメーターであり、その値が新しいプロパティ値になります。pValNULL であるか、型 VT_NULLVARIANT を指す場合、プロパティは NULL、すなわち値なしに設定されます。
TypeINTin

pVal が指す VARIANT の型です。

VT_NULLVARIANT で指定されるプロパティの NULL 値は、値が 0 (ゼロ) の VT_I4 型のプロパティとは区別されます。

新しいプロパティを作成する際に pValNULL であるか VT_NULL を指す場合、プロパティの型は vtType パラメーターから決定されます。

pVal に埋め込みの IWbemClassObject を格納する場合、呼び出し元は IID_IUnknown に対して IWbemClassObject::QueryInterface を呼び出し、得られたポインターを型 VT_UNKNOWN として VARIANT に格納する必要があります。元の埋め込みオブジェクトは Put 操作中にコピーされるため、この操作によって変更されることはありません。

このポインターは読み取り専用として扱われます。呼び出し元は、この呼び出しの完了後に VariantClear を呼び出す必要があります。

このパラメーターは、CIM クラス定義に新しいプロパティを作成し、かつ pValNULL であるか型 VT_NULLVARIANT を指す場合にのみ使用します。その場合、vtType パラメーターはプロパティの CIM 型を指定します。それ以外のすべての場合、vtType は 0 (ゼロ) でなければなりません。また、基になるオブジェクトがインスタンスである場合は、(pValNULL であっても) プロパティの型は固定されており変更できないため、vtType は 0 (ゼロ) でなければなりません。言い換えると、vtType を使用するのは、pValNULL であるか VT_NULLVARIANT を指し、かつ基になるオブジェクトが CIM クラスである場合に限られます。

IWbemClassObject::Put を使用してプロパティに空の配列値を代入する場合、正確な VT 型を指定する必要はありません。pVal には、バリアント型が VT_ARRAY|VT_VARIANTVARIANT を代入できます。

戻り値

このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。以下のリストは HRESULT に格納される値を示します。一般的な HRESULT の値については、System Error Codes を参照してください。

解説(Remarks)

IWbemClassObject::Put メソッドで設定するプロパティが親クラスに存在する場合、プロパティの型が親クラスの型と一致しない場合を除き、そのプロパティの既定値が変更されます。プロパティが存在せず、型の不一致もない場合は、プロパティが作成されます。

インスタンスに対してこのメソッドを実行した場合、プロパティは常に存在するため、常に上書きが発生します。

新しいクラスを作成する際に、プロパティの基になる型がオブジェクト参照、日付/時刻文字列、その他の特殊な型である場合は、その特殊な新しいクラスを示すためにプロパティの CIM 型パラメーターを変更する必要がある場合があります。インスタンスプロパティの CIMType 修飾子は読み取り専用で、クラスオブジェクトから継承されます。

pVal で指定されたバリアント型がプロパティの CIM 型と一致しない場合、WMI は通常のバリアント変換規則に従って、適切なバリアント型への変換を試みます。バリアントを変換できない場合は WBEM_E_TYPE_MISMATCH が返されます。以下のリストは、プロパティが uint32 型である場合の通常のバリアント変換規則の例外を示します。

渡すバリアント型 結果
VT_I4 S_OK
VT_I2 WBEM_TYPE_MISMATCH
VT_R8 S_OK

ただし、uint32[] 型のプロパティに VT_ARRAY|VT_R8 を渡すと失敗します。

__CLASS システムプロパティは、クラスの作成時にのみ書き込み可能であり、その際に空白のままにすることはできません。その他のシステムプロパティはすべて読み取り専用です。

次のコード例は、新しい CIM クラスにクラス名を設定する方法を示しています。

// pObj is an empty object from IWbemServices::GetObject
// Set up the property value.
VARIANT v;
VariantInit(&v);
V_VT(&v) = VT_BSTR;
V_BSTR(&v) = SysAllocString(L"MyClass");

// Write it.
LPCWSTR strClassProp = L"__CLASS";
pObj->Put(strClassProp, 0, &v, 0);

// Clean up.
VariantClear(&v);

次のコード例は、SomeUint64 プロパティの値を設定する方法を示しています。BSTR の値は 16 進数ではなく 10 進数の形式でなければならない点に注意してください。

// pObj is an instance containing a uint64 property
// Set up the property value.
VARIANT v;
VariantInit(&v);
V_VT(&v) = VT_BSTR;
V_BSTR(&v) = SysAllocString(L"1033"); // - decimal format, not hex

// Write it.
LPCWSTR strClassProp = L"SomeUint64";
pObj->Put(strClassProp, 0, &v, CIM_UINT64);

// Clean up.
VariantClear(&v);
vtbl 6 HRESULT Delete(LPWSTR wszName)

IWbemClassObject::Delete メソッドは、指定されたプロパティとそのすべての修飾子を CIM クラス定義から削除します。

wszNameLPWSTRin削除するプロパティ名です。有効な LPCWSTR を指す必要があります。読み取り専用として扱われます。

戻り値

このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。以下のリストは HRESULT に格納される値を示します。一般的な HRESULT の値については、System Error Codes を参照してください。

vtbl 7 HRESULT GetNames(LPWSTR wszQualifierName, WBEM_CONDITION_FLAG_TYPE lFlags, VARIANT* pQualifierVal, SAFEARRAY** pNames)

オブジェクト内のプロパティ名を取得します。

wszQualifierNameLPWSTRinNULL を指定できるパラメーターです。NULL でない場合、フィルターの一部として機能する修飾子名を指定する有効な LPCWSTR を指す必要があります。これは読み取り専用として扱われます。詳細については、「解説」を参照してください。
lFlagsWBEM_CONDITION_FLAG_TYPEin詳細については、「解説」を参照してください。
pQualifierValVARIANT*inNULL を指定できるパラメーターです。NULL でない場合、フィルター値に初期化された有効な VARIANT 構造体を指す必要があります。この VARIANT はメソッドによって読み取り専用として扱われます。そのため、必要に応じて呼び出し元が VariantClear を呼び出す必要があります。詳細については、「解説」を参照してください。
pNamesSAFEARRAY**outNULL にすることはできませんが、呼び出し時にはこのパラメーターは NULL を指している必要があります。新しい SAFEARRAY 構造体が常に割り当てられ、ポインターがそれを指すように設定されます。返される配列は要素数 0 になることもありますが、WBEM_S_NO_ERROR が返される場合は常に割り当てられます。エラー時には、新しい SAFEARRAY 構造体は返されません。

戻り値

このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。以下のリストは HRESULT に格納される値を示します。一般的な HRESULT の値については、System Error Codes を参照してください。

解説(Remarks)

返される名前は、フラグとパラメーターの組み合わせによって制御されます。たとえば、すべてのプロパティの名前をすべて指定することも、キープロパティのみを指定することもできます。主なフィルターは lFlags パラメーターで指定し、その他のパラメーターはそれに応じて変わります。

フラグの値はビットフィールドであり、組み合わせることができます。次の各グループから 1 つずつフラグを選び、他のグループのフラグと組み合わせることができます。同一グループ内のフラグは相互排他的です。

グループ 1 のフラグ 説明
WBEM_FLAG_ALWAYS すべてのプロパティ名を返します。strQualifierName および pQualifierVal パラメーターは使用されません。
WBEM_FLAG_ONLY_IF_TRUE パラメーター strQualifierName で指定された名前の修飾子を持つプロパティのみを返します。このフラグを使用する場合は、strQualifierName を指定する必要があります。
WBEM_FLAG_ONLY_IF_FALSE パラメーター strQualifierName で指定された名前の修飾子を持たないプロパティのみを返します。このフラグを使用する場合は、strQualifierName を指定する必要があります。
WBEM_FLAG_ONLY_IF_IDENTICAL パラメーター QualifierName で指定された名前の修飾子を持ち、かつその値が pQualifierVal が指す VARIANT 構造体で指定された値と一致するプロパティのみを返します。このフラグを使用する場合は、QualifierNamepQualifierVal の両方を指定する必要があります。
グループ 2 のフラグ 説明
WBEM_FLAG_KEYS_ONLY キーを定義するプロパティの名前のみを返します。
WBEM_FLAG_REFS_ONLY オブジェクト参照であるプロパティ名のみを返します。
グループ 3 のフラグ 説明
WBEM_FLAG_LOCAL_ONLY 最も派生したクラスに属するプロパティ名のみを返します。親クラスのプロパティは除外されます。
WBEM_FLAG_PROPAGATED_ONLY 親クラスに属するプロパティ名のみを返します。
WBEM_FLAG_SYSTEM_ONLY システムプロパティのみを返します。
WBEM_FLAG_NONSYSTEM_ONLY システムプロパティ以外のプロパティ名のみを返します。

指定されたフィルターに一致するプロパティがない場合に空のリストが返されることは、エラーではありません。

BSTR 値の SAFEARRAY 構造体の使用方法の詳細については、 Retrieving Part of a WMI Instance を参照してください。

vtbl 8 HRESULT BeginEnumeration(INT lEnumFlags)

列挙を列挙の先頭にリセットします。

lEnumFlagsINTin「解説」で説明するフラグの組み合わせです。

戻り値

このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。以下のリストは HRESULT に格納される値を示します。一般的な HRESULT の値については、System Error Codes を参照してください。

解説(Remarks)

次のフラグの組み合わせを指定することで、列挙に含めるプロパティを制御できます。各グループから 1 つのフラグを選び、他のグループの任意のフラグと組み合わせることができます。ただし、同一グループ内のフラグは相互排他的です。

GROUP 1

GROUP 2

vtbl 9 HRESULT Next(INT lFlags, LPWSTR* strName, VARIANT* pVal, INT* pType, INT* plFlavor)

IWbemClassObject::Next メソッドは、IWbemClassObject::BeginEnumeration で開始した列挙において、次のプロパティを取得します。

lFlagsINTin予約されています。このパラメーターは 0 でなければなりません。
strNameLPWSTR*inoutプロパティ名を格納した新しい BSTR を受け取ります。クライアントプロセスでのメモリリークを防ぐため、 呼び出し元は名前が不要になった時点で SysFreeString を呼び出す必要があります。名前が不要な場合は、このパラメーターに NULL を指定できます。
pValVARIANT*inout

この VARIANT にプロパティの値が格納されます。メソッドはこの VARIANT に対して VariantInit を呼び出すため、呼び出し元は呼び出し前に その VARIANT が有効な値を保持していないことを確認する必要があります。呼び出し元は、値が不要になった時点で VariantClear を使用する必要があります。

値が不要な場合は、このパラメーターに NULL を指定できます。エラーコードが返された場合、 pVal が指す VARIANT は変更されません。

pTypeINT*inoutこのパラメーターには NULL を指定できます。NULL でない場合は、 プロパティの型が格納される CIMTYPE 変数 (LONG) を指す必要があります。 このプロパティの値が VT_NULLVARIANT になることもあり、その場合は プロパティの実際の型を判断する必要があります。
plFlavorINT*inout

NULL を指定できます。NULL でない場合、指し示された LONG 値が、次のようにプロパティの由来に関する情報を受け取ります。詳細については、Qualifier Flavors および WBEM_FLAVOR_TYPE を参照してください。

WBEM_FLAVOR_ORIGIN_SYSTEM

プロパティは標準のシステムプロパティです。

クラスの場合:

WBEM_FLAVOR_ORIGIN_PROPAGATED

プロパティは親クラスから継承されました。

プロパティは親クラスから継承されていますが、インスタンスレベルでは変更されていません。

WBEM_FLAVOR_ORIGIN_LOCAL

プロパティは最も派生したクラスに属します。

プロパティはインスタンスレベルで変更されています (つまり、値が指定されたか、修飾子が追加または変更されています)。

インスタンスの場合:

戻り値

このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。 以下のリストは HRESULT に格納される値を示します。一般的な HRESULT の値については、 System Error Codes を参照してください。

解説(Remarks)

プロパティの基になる型がオブジェクトパス、日付や時刻、その他の特殊な型である場合、 返される型には十分な情報が含まれません。呼び出し元は、指定されたプロパティの CIMTYPE を調べ、 そのプロパティがオブジェクト参照、日付や時刻、その他の特殊な型であるかどうかを判断する必要があります。

このメソッドは システムプロパティも返します。

vtbl 10 HRESULT EndEnumeration()

IWbemClassObject::EndEnumeration メソッドは、IWbemClassObject::BeginEnumeration で開始した列挙シーケンスを終了します。

戻り値

このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。以下のリストは HRESULT に格納される値を示します。一般的な HRESULT の値については、System Error Codes を参照してください。

vtbl 11 HRESULT GetPropertyQualifierSet(LPWSTR wszProperty, IWbemQualifierSet** ppQualSet)

IWbemClassObject::GetPropertyQualifierSet メソッドは、クラスオブジェクト内の特定のプロパティの修飾子セットを取得します。このメソッドは、インスタンスまたはクラス定義のメンバーであるプロパティに対して使用できます。

wszPropertyLPWSTRin修飾子セットを取得する対象のプロパティです。NULL にすることはできず、有効な LPCWSTR を指す必要があります。プロパティはローカルのものでも、親クラスから伝播されたものでもかまいません。なお、システムプロパティには修飾子がないため、システムプロパティの IWbemQualifierSet ポインターを取得しようとすると、このメソッドはエラーコード WBEM_E_SYSTEM_PROPERTY を返します。
ppQualSetIWbemQualifierSet**out指定した名前のプロパティの修飾子にアクセスするためのインターフェイスポインターを受け取ります。呼び出し元は、オブジェクトへのアクセスが不要になった時点で、そのポインターに対して IWbemQualifierSet::Release を呼び出す必要があります。エラー時には、このパラメーターは NULL を指すように設定されます。新しいオブジェクトは返されません。

戻り値

このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。以下のリストは HRESULT に格納される値を示します。一般的な HRESULT の値については、System Error Codes を参照してください。

vtbl 12 HRESULT Clone(IWbemClassObject** ppCopy)

IWbemClassObject::Clone メソッドは、現在のオブジェクトの完全な複製である新しいオブジェクトを返します。新しいオブジェクトの COM 参照カウントは 1 です。

ppCopyIWbemClassObject**out

このパラメーターを NULL にすることはできません。現在のオブジェクトのコピーを受け取ります。このオブジェクトが不要になった時点で、IWbemClassObject::Release を呼び出す必要があります。

エラー時には、新しいオブジェクトは返されません。

戻り値

このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。以下のリストは HRESULT に格納される値を示します。一般的な HRESULT の値については、System Error Codes を参照してください。

解説(Remarks)

クラス定義を複製する場合や、インスタンスを複製する場合にこのメソッドを使用します。これは、新しいコピーを変更する一方で、元のオブジェクトのコピーをバックアップとして保持したい場合に便利です。同様に、単一のソースインスタンスから多数の新しいインスタンスを作成する場合にもこのメソッドを使用します。たとえば、 IWbemClassObject::SpawnInstance を使用して開始インスタンスを 1 つ作成し、 IWbemClassObject::Clone を使用してそのインスタンスのコピーを 100 個すばやく作成できます。各オブジェクトはその後、それぞれの値を持つように変更できます。

このメソッドを使用して、クラス定義をインスタンスに変換したり、インスタンスをクラス定義に変換したりすることはできません。

vtbl 13 HRESULT GetObjectText(INT lFlags, LPWSTR* pstrObjectText)

IWbemClassObject::GetObjectText メソッドは、オブジェクトを MOF 構文でテキスト表現したものを返します。

lFlagsINTin通常は 0 です。WBEM_FLAG_NO_FLAVORS を指定した場合、修飾子は伝播やフレーバーの情報なしで表示されます。
pstrObjectTextLPWSTR*out呼び出し時には NULL を指している必要があります。このパラメーターは、Windows Management から、SysAllocString で初期化された新しく割り当てられた BSTR を受け取ります。文字列が不要になった時点で、このポインターに対して SysFreeString を呼び出す必要があります。このポインターは、呼び出しから戻った時点でオブジェクトの MOF 構文表現を指します。これは出力パラメーターであり、ポインターの指す領域が解放されることはないため、このメソッドを呼び出す前に有効な文字列を指していてはなりません。

戻り値

このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。以下のリストは HRESULT に格納される値を示します。一般的な HRESULT の値については、System Error Codes を参照してください。

解説(Remarks)

メソッドのパラメーターのテキストを再構成するために、次のアルゴリズムが使用されます。

  1. パラメーターは識別子の値の順に並べ替えられます。
  2. [in] と [out] の両方が指定されたパラメーターは、単一のパラメーターにまとめられます。
vtbl 14 HRESULT SpawnDerivedClass(INT lFlags, IWbemClassObject** ppNewClass)

IWbemClassObject::SpawnDerivedClass メソッドを使用して、現在のオブジェクトから新しく派生したクラスオブジェクトを作成します。

lFlagsINTin予約されています。このパラメーターは 0 でなければなりません。
ppNewClassIWbemClassObject**outNULL にすることはできません。新しいクラス定義オブジェクトへのポインターを受け取ります。呼び出し元は、オブジェクトが不要になった時点 (通常はクラス定義を書き込むために IWbemServices::PutClass を呼び出した後) に IWbemClassObject::Release を呼び出す必要があります。エラー時には、新しいオブジェクトは返されず、ppNewClass は変更されません。

戻り値

このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。以下のリストは HRESULT に格納される値を示します。一般的な HRESULT の値については、System Error Codes を参照してください。

解説(Remarks)

ppNewClass で返される新しいオブジェクトは、自動的に現在のオブジェクトのサブクラスになります。この動作は変更できません。サブクラス (派生クラス) を作成する方法は他にありません。

自分のクライアントプロセス内にのみ存在するローカルなクラスから派生クラスを作成することはできません。派生クラスを作成するには、その前に親クラス (基底クラス) を IWbemServices::PutClass で作成して Windows Management に登録し、 IWbemServices::GetObject で取得しておく必要があります。

クラス階層を作成するには、まず IWbemServices::PutClass で最初のクラスを作成し、 IWbemServices::GetObject でそれを取得し、取得したオブジェクトを使用して新しい派生クラスを作成します。次に、この新しく派生したクラスを IWbemServices::PutClass で作成する必要があります。さらに別の派生クラスを作成するには、 IWbemServices::GetObject を呼び出し、次に IWbemClassObject::SpawnDerivedClass を呼び出す、という手順を派生レベルごとに繰り返す必要があります。バージョンエラーや同時実行の競合を防ぐため、この手順に従う必要があります。親を持たないクラスの作成の詳細については、 Creating a Class を参照してください。

vtbl 15 HRESULT SpawnInstance(INT lFlags, IWbemClassObject** ppNewInstance)

IWbemClassObject::SpawnInstance メソッドを使用して、クラスの新しいインスタンスを作成します。

lFlagsINTin予約されています。このパラメーターは 0 でなければなりません。
ppNewInstanceIWbemClassObject**outNULL にすることはできません。クラスの新しいインスタンスを受け取ります。呼び出し元は、ポインターが不要になった時点で IWbemClassObject::Release を呼び出す必要があります。エラー時には、新しいオブジェクトは返されず、ポインターは変更されません。

戻り値

このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。以下のリストは HRESULT に格納される値を示します。一般的な HRESULT の値については、System Error Codes を参照してください。

vtbl 16 HRESULT CompareTo(WBEM_COMPARISON_FLAG lFlags, IWbemClassObject* pCompareTo)

IWbemClassObject::CompareTo メソッドは、オブジェクトを別の Windows Management オブジェクトと比較します。この比較処理にはいくつかの制約がある点に注意してください。

lFlagsWBEM_COMPARISON_FLAGin

別のオブジェクトとの比較で考慮するオブジェクトの特性を指定します。すべての特性を考慮する WBEM_COMPARISON_INCLUDE_ALL を指定するか、次のフラグを任意に組み合わせて指定できます。

WBEM_FLAG_IGNORE_OBJECT_SOURCE

他のオブジェクトとの比較において、オブジェクトの出所 (すなわち、オブジェクトの取得元のサーバーおよび名前空間) を無視します。

WBEM_FLAG_IGNORE_QUALIFIERS

比較においてすべての修飾子 (KeyDynamic を含む) を無視します。

WBEM_FLAG_IGNORE_DEFAULT_VALUES

プロパティの既定値を無視します。このフラグはクラスを比較する場合にのみ意味があります。

WBEM_FLAG_IGNORE_FLAVOR

修飾子のフレーバーを無視します。このフラグを指定しても修飾子の値は考慮されますが、伝播規則やオーバーライド制限などのフレーバーの違いは無視されます (詳細については、 Qualifier Flavors を参照してください)。

WBEM_FLAG_IGNORE_CASE

文字列値を大文字と小文字を区別せずに比較します。これは文字列と修飾子の値の両方に適用されます。プロパティ名と修飾子名は、このフラグの指定の有無にかかわらず、常に大文字と小文字を区別せずに比較されます。

WBEM_FLAG_IGNORE_CLASS

比較対象のオブジェクトが同じクラスのインスタンスであると仮定します。その結果、このフラグはインスタンスに関連する情報のみを比較します。パフォーマンスを最適化するためにこのフラグを使用します。オブジェクトが同じクラスでない場合、結果は未定義です。

pCompareToIWbemClassObject*in比較対象のオブジェクトです。このポインターは有効な IWbemClassObject インスタンスを指す必要があります。NULL にすることはできません。

戻り値

このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。以下のリストは HRESULT に格納される値を示します。一般的な HRESULT の値については、System Error Codes を参照してください。

vtbl 17 HRESULT GetPropertyOrigin(LPWSTR wszName, LPWSTR* pstrClassName)

IWbemClassObject::GetPropertyOrigin メソッドは、特定のプロパティが導入されたクラスの名前を取得します。

wszNameLPWSTRin所有クラス名を取得する対象のプロパティ名です。有効な LPCWSTR を指す必要があり、読み取り専用として扱われます。
pstrClassNameLPWSTR*out親クラス名を受け取る新しい BSTR のアドレスへのポインターです。クライアントプロセスでのメモリリークを防ぐため、呼び出し元は名前が不要になった時点で SysFreeString を呼び出す必要があります。これは出力パラメーターであり、呼び出しの完了後にこのポインターの指す領域が解放されることはないため、メソッドを呼び出す前に有効な文字列を指していてはなりません。

戻り値

このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。以下のリストは HRESULT に格納される値を示します。一般的な HRESULT の値については、System Error Codes を参照してください。

vtbl 18 HRESULT InheritsFrom(LPWSTR strAncestor)

IWbemClassObject::InheritsFrom メソッドは、現在のクラスまたはインスタンスが、指定された親クラスから派生しているかどうかを判定します。

strAncestorLPWSTRinNULL にすることはできません。テスト対象のクラス名を格納します。現在のオブジェクトの祖先クラスの 1 つにこのクラスが含まれる場合、WBEM_S_NO_ERROR が返されます。有効な LPCWSTR を指す必要があり、読み取り専用として扱われます。

戻り値

このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。以下のリストは HRESULT に格納される値を示します。一般的な HRESULT の値については、System Error Codes を参照してください。

vtbl 19 HRESULT GetMethod(LPWSTR wszName, INT lFlags, IWbemClassObject** ppInSignature, IWbemClassObject** ppOutSignature)

要求されたメソッドに関する情報を返します。

wszNameLPWSTRinメソッド名です。NULL にすることはできず、有効な LPCWSTR を指す必要があります。
lFlagsINTin予約されています。このパラメーターは 0 でなければなりません。
ppInSignatureIWbemClassObject**outメソッドの in パラメーターを表す IWbemClassObject ポインターを受け取るポインターです。NULL を設定した場合、このパラメーターは無視されます。なお、メソッドに in パラメーターがない場合、Windows Management は IWbemClassObject ポインターを NULL に設定することがあります。詳細については、「解説」を参照してください。
ppOutSignatureIWbemClassObject**outメソッドの out パラメーターを表す IWbemClassObject ポインターを受け取るポインターです。NULL を設定した場合、このパラメーターは無視されます。

戻り値

このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。以下のリストは HRESULT に格納される値を示します。一般的な HRESULT の値については、System Error Codes を参照してください。

解説(Remarks)

メソッドの in パラメーターと out パラメーターは、システムクラス __Parameters のインスタンスである IWbemClassObject 内のプロパティとして表現されます。

たとえば、次のメソッドを考えます。

Class MyClass{
    [key] string KeyVal;
    sint32 PropVal;
    sint32 ExampleMethod([in] sint32 Parm1, [in] uint32 Parm2,
      [out] string Parm3);
};

この例では、クラスにメソッドが 1 つあります。ユーザーが IWbemClassObject::GetMethod を呼び出すと、ppInSignature パラメーターは Parm1Parm2 の 2 つのプロパティを含む IWbemClassObject オブジェクトを受け取ります。ppOutSignature パラメーターには、Parm3ReturnValue の 2 つのプロパティが含まれます。

ppInSignature オブジェクトのプロパティ値を設定した後、呼び出し元はそのオブジェクトを使用して IWbemServices::ExecMethod または IWbemServices::ExecMethodAsync を呼び出してメソッドを実行できます。

Note 呼び出し元は、ppInSignature および ppOutSignature のポインターが指すオブジェクトが不要になった時点で、IWbemClassObject::Release を呼び出す必要があります。
vtbl 20 HRESULT PutMethod(LPWSTR wszName, INT lFlags, IWbemClassObject* pInSignature, IWbemClassObject* pOutSignature)

メソッドを作成するために使用します。

wszNameLPWSTRin作成するメソッドの名前です。
lFlagsINTin予約されています。このパラメーターは 0 (ゼロ) でなければなりません。
pInSignatureIWbemClassObject*inメソッドの in パラメーターを含む __Parameters システムクラスのコピーへのポインターです。NULL を設定した場合、このパラメーターは無視されます。
pOutSignatureIWbemClassObject*inオブジェクトの out パラメーターを含む __Parameters システムクラスのコピーへのポインターです。NULL を設定した場合、このパラメーターは無視されます。

戻り値

このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。以下のリストは HRESULT に格納される値を示します。一般的な HRESULT の値については、System Error Codes を参照してください。

解説(Remarks)

メソッドの in パラメーターと out パラメーターは、 IWbemClassObject オブジェクト内のプロパティとして表現されます。

たとえば、次のメソッドを考えます。

Class MyClass{
    [key] string KeyVal;
    sint32 PropVal;
    sint32 ExampleMethod([in] sint32 Param1, [in] uint32 Param2,
        [out] string Param3);
    HRESULT ReturnValue;
};

前の例では、クラスにメソッドが 1 つあります。このメソッドをプログラムで作成するには、pInSignature パラメーターに Param1Param2 の 2 つのプロパティを含むシステムクラス __Parameters のコピーへのポインターを指定して、 IWbemClassObject::PutMethod を呼び出します。pOutSignature は、Param3ReturnValue の 2 つのプロパティを含むシステムクラス __Parameters のコピーを指します。

pOutSignature が指すオブジェクトの ReturnValue プロパティが、メソッドの戻り値の型を決定します。pOutSignatureNULL を設定した場合、戻り値の型は VOID とみなされます。

[in/out] パラメーターは、pInSignaturepOutSignature の各パラメーターが指す両方のオブジェクトに同じプロパティを追加することで定義できます。この場合、両方のプロパティは同じ ID 修飾子の値を共有します。

__Parameters クラスオブジェクト内の ReturnValue 以外の各プロパティには、パラメーターの出現順序を示す 0 から始まる数値である ID 修飾子が必要です。この例では、Param1 が 0、Param2 が 1、Param3 が 2 になります。2 つのパラメーターが同じ ID 値を持つことはできず、ID 値を飛ばすこともできません。いずれかに該当する場合、 IWbemClassObject::PutMethodWBEM_E_NONCONSECUTIVE_PARAMETER_IDS を返します。

Note 呼び出し元は、pInSignature および pOutSignature のポインターが指すオブジェクトが不要になった時点で、IWbemClassObject::Release を呼び出す必要があります。
vtbl 21 HRESULT DeleteMethod(LPWSTR wszName)

IWbemClassObject::DeleteMethod メソッドを使用してメソッドを削除します。この呼び出しは、現在のオブジェクトが CIM クラス定義である場合にのみサポートされます。CIM インスタンスを指す IWbemClassObject ポインターからは、メソッドの操作は行えません。

wszNameLPWSTRinクラス定義から削除するメソッド名です。

戻り値

このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。以下のリストは HRESULT に格納される値を示します。一般的な HRESULT の値については、System Error Codes を参照してください。

解説(Remarks)

親クラスから継承したメソッドを削除することはできません。

vtbl 22 HRESULT BeginMethodEnumeration(INT lEnumFlags)

IWbemClassObject::BeginMethodEnumeration メソッドの呼び出しにより、オブジェクトで使用可能なメソッドの列挙を開始します。

lEnumFlagsINTin

列挙の範囲を指定します。

指定可能な値:

WBEM_FLAG_LOCAL_ONLY

クラス自体で定義されているメソッドのみを含めます。

WBEM_FLAG_PROPAGATED_ONLY

親クラスから継承したメソッドのみを含めます。

戻り値

このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。以下のリストは HRESULT に格納される値を示します。一般的な HRESULT の値については、System Error Codes を参照してください。

vtbl 23 HRESULT NextMethod(INT lFlags, LPWSTR* pstrName, IWbemClassObject** ppInSignature, IWbemClassObject** ppOutSignature)

IWbemClassObject::BeginMethodEnumeration の呼び出しで開始したメソッド列挙シーケンスにおいて、次のメソッドを取得するために使用します。

lFlagsINTin予約されています。このパラメーターは 0 (ゼロ) でなければなりません。
pstrNameLPWSTR*inout呼び出し前に NULL を指している必要があるポインターです。このパラメーターは、メソッド名を格納した BSTR 値のアドレスを受け取ります。呼び出し元は、文字列が不要になった時点で SysFreeString を使用して解放する必要があります。
ppInSignatureIWbemClassObject**outメソッドの in パラメーターを含む IWbemClassObject へのポインターを受け取るポインターです。
ppOutSignatureIWbemClassObject**outメソッドの out パラメーターを含む IWbemClassObject へのポインターを受け取るポインターです。

戻り値

このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。以下のリストは HRESULT に格納される値を示します。一般的な HRESULT の値については、System Error Codes を参照してください。

解説(Remarks)

呼び出し元は IWbemClassObject::BeginMethodEnumeration で列挙シーケンスを開始し、WBEM_S_NO_MORE_DATA が返されるまで IWbemClassObject::NextMethod を呼び出します。呼び出し元は、必要に応じて IWbemClassObject::EndMethodEnumeration でシーケンスを終了します。呼び出し元は、任意の時点で IWbemClassObject::EndMethodEnumeration を呼び出して列挙を早期に終了できます。

Note 呼び出し元は、ppInSignature および ppOutSignature のポインターが指すオブジェクトが不要になった時点で、IWbemClassObject::Release を呼び出す必要があります。
vtbl 24 HRESULT EndMethodEnumeration()

IWbemClassObject::EndMethodEnumeration メソッドは、IWbemClassObject::BeginMethodEnumeration で開始したメソッド列挙シーケンスを終了するために使用します。

戻り値

このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。以下のリストは HRESULT に格納される値を示します。一般的な HRESULT の値については、System Error Codes を参照してください。

解説(Remarks)

呼び出し元は IWbemClassObject::BeginMethodEnumeration で列挙シーケンスを開始し、WBEM_S_NO_MORE_DATA が返されるまで IWbemClassObject::NextMethod を呼び出します。呼び出し元は、必要に応じて IWbemClassObject::EndMethodEnumeration でシーケンスを終了します。呼び出し元は、任意の時点で IWbemClassObject::EndMethodEnumeration を呼び出して列挙を早期に終了できます。

vtbl 25 HRESULT GetMethodQualifierSet(LPWSTR wszMethod, IWbemQualifierSet** ppQualSet)

IWbemClassObject::GetMethodQualifierSet は、特定のメソッドの修飾子セットを取得するために使用します。

wszMethodLPWSTRinメソッド名を格納した有効な LPCWSTR を指す必要があります。
ppQualSetIWbemQualifierSet**outメソッドの修飾子にアクセスするためのインターフェイスポインターを受け取ります。返されるオブジェクトは、呼び出しから戻った時点で正の参照カウントを持ちます。呼び出し元は、オブジェクトが不要になった時点で IWbemQualifierSet::Release を呼び出す必要があります。このパラメーターを NULL にすることはできません。エラー時には、新しいオブジェクトは返されず、ポインターは NULL を指すように設定されます。

戻り値

このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。以下のリストは HRESULT に格納される値を示します。一般的な HRESULT の値については、System Error Codes を参照してください。

解説(Remarks)

各メソッドは独自の修飾子を持つことができるため、この呼び出しを使用して IWbemQualifierSet ポインターを取得します。これにより、呼び出し元はそれらの修飾子を追加、編集、削除できます。

vtbl 26 HRESULT GetMethodOrigin(LPWSTR wszMethodName, LPWSTR* pstrClassName)

IWbemClassObject::GetMethodOrigin メソッドは、メソッドが宣言されたクラスを特定するために使用します。

wszMethodNameLPWSTRin所有クラスを要求する対象のオブジェクトのメソッド名です。
pstrClassNameLPWSTR*outメソッドを所有するクラスの名前を受け取ります。ユーザーは、返された BSTR が不要になった時点で SysFreeString を呼び出す必要があります。

戻り値

このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。以下のリストは HRESULT に格納される値を示します。一般的な HRESULT の値については、System Error Codes を参照してください。

解説(Remarks)

メソッドはクラスからクラスへと継承されるため、特定のメソッドの所有クラスを判別したい場合がよくあります。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IWbemClassObject "{DC12A681-737F-11CF-884D-00AA004B2E24}"
#usecom global IWbemClassObject IID_IWbemClassObject "{}"
#comfunc global IWbemClassObject_GetQualifierSet          3 sptr
#comfunc global IWbemClassObject_Get                      4 wstr,int,var,var,var
#comfunc global IWbemClassObject_Put                      5 wstr,int,var,int
#comfunc global IWbemClassObject_Delete                   6 wstr
#comfunc global IWbemClassObject_GetNames                 7 wstr,int,var,var
#comfunc global IWbemClassObject_BeginEnumeration         8 int
#comfunc global IWbemClassObject_Next                     9 int,var,var,var,var
#comfunc global IWbemClassObject_EndEnumeration           10
#comfunc global IWbemClassObject_GetPropertyQualifierSet  11 wstr,sptr
#comfunc global IWbemClassObject_Clone                    12 sptr
#comfunc global IWbemClassObject_GetObjectText            13 int,var
#comfunc global IWbemClassObject_SpawnDerivedClass        14 int,sptr
#comfunc global IWbemClassObject_SpawnInstance            15 int,sptr
#comfunc global IWbemClassObject_CompareTo                16 int,sptr
#comfunc global IWbemClassObject_GetPropertyOrigin        17 wstr,var
#comfunc global IWbemClassObject_InheritsFrom             18 wstr
#comfunc global IWbemClassObject_GetMethod                19 wstr,int,sptr,sptr
#comfunc global IWbemClassObject_PutMethod                20 wstr,int,sptr,sptr
#comfunc global IWbemClassObject_DeleteMethod             21 wstr
#comfunc global IWbemClassObject_BeginMethodEnumeration   22 int
#comfunc global IWbemClassObject_NextMethod               23 int,var,sptr,sptr
#comfunc global IWbemClassObject_EndMethodEnumeration     24
#comfunc global IWbemClassObject_GetMethodQualifierSet    25 wstr,sptr
#comfunc global IWbemClassObject_GetMethodOrigin          26 wstr,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。