IWbemServices::P utInstance メソッド (wbemcli.h)
IWbemServices::P utInstance メソッドは、既存のクラスのインスタンスを作成または更新します。 インスタンスは、WMI リポジトリに書き込まれます。
構文
HRESULT PutInstance(
[in] IWbemClassObject *pInst,
[in] long lFlags,
[in] IWbemContext *pCtx,
[out] IWbemCallResult **ppCallResult
);
パラメーター
[in] pInst
書き込むインスタンスへのポインター。 呼び出し元は、この呼び出しの完了時に参照カウントについて想定できません。
[in] lFlags
次の値のうち 1 つ以上を設定できます。
WBEM_FLAG_CREATE_OR_UPDATE
このフラグを指定すると、インスタンスが存在しない場合は作成され、既に存在する場合は上書きされます。
WBEM_FLAG_UPDATE_ONLY
このフラグにより、この呼び出しが更新されます。 呼び出しが成功するには、インスタンスが存在している必要があります。
WBEM_FLAG_CREATE_ONLY
このフラグは、作成にのみ使用されます。 インスタンスが既に存在する場合、呼び出しは失敗します。
WBEM_FLAG_RETURN_IMMEDIATELY
このフラグにより、これは半同期呼び出しになります。 詳細については、「メソッドの呼び出し」を参照してください。
WBEM_FLAG_USE_AMENDED_QUALIFIERS
このフラグが設定されている場合、WMI は 修正された フレーバーを持つ修飾子を格納しません。 このフラグが設定されていない場合は、このオブジェクトがローカライズされていないと見なされ、すべての修飾子がこのインスタンスと共に格納されます。
[in] pCtx
通常 は NULL。インスタンス内のすべてのプロパティが更新されることを示します。 それ以外の場合は、インスタンスに関する詳細情報を含む IWbemContext オブジェクトへのポインターです。 コンテキスト オブジェクト内のデータは、インスタンスを担当するプロバイダーによって文書化されている必要があります。 NULL 以外の IWbemContext オブジェクトは、部分インスタンス更新のサポートが存在するかどうかを示すことができます。
完全および部分的なインスタンス更新をサポートする方法の詳細については、「 IWbemServices::P utInstanceAsync」を参照してください。 完全または部分的なインスタンス更新操作の要求の詳細については、「 インスタンス プロパティの変更」を参照してください。
[out] ppCallResult
NULL の場合、このパラメーターは使用されません。 lFlags パラメーターにWBEM_FLAG_RETURN_IMMEDIATELYが含まれている場合、この呼び出しはWBEM_S_NO_ERRORを使用して直ちにを返します。 ppCallResult パラメーターは、新しい IWbemCallResult オブジェクトへのポインターを受け取ります。このオブジェクトは IWbemCallResult::GetCallStatus を使用してポーリングして結果を取得できます。
戻り値
このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。 次の一覧は、 HRESULT 内に含まれる値の一覧です。
ネットワークの問題によって Windows Management へのリモート接続が失われると、COM 固有のエラー コードも返される可能性があります。
注釈
アプリケーションとプロバイダーは PutInstance を呼び出して、既存のクラスのインスタンスを作成または更新します。 pCtx パラメーターの設定方法に応じて、インスタンスの一部またはすべてのプロパティが更新されます。 部分インスタンスの更新をサポートする方法の詳細については、「 IWbemServices::P utInstanceAsync」を参照してください。 インスタンスの部分的な更新を要求する方法の詳細については、「 インスタンス プロパティの変更」を参照してください。
PutInstance メソッドでは、インスタンスの作成とインスタンスの更新のみがサポートされています。 インスタンスの移動はサポートされていません。 つまり、呼び出し元は pInst パラメーターを、兄弟クラスの別のインスタンスと同じキーを持つインスタンスに設定することはできません。 たとえば、 ClassA が ClassB と ClassC の基底クラスであると します。 ClassA クラスは KeyProp プロパティをキーとして定義し、ClassB には KeyProp が 1 に設定されたインスタンスがあります。 KeyProp が 1 に設定された ClassC のインスタンスを作成するには、アプリケーションでまず DeleteInstance を呼び出して ClassB インスタンスを削除してから、PutInstance を使用して ClassC インスタンスを保存する必要があります。
pInst が指すインスタンスがサブクラスに属している場合、Windows Management はサブクラスが派生するクラスを担当するすべてのプロバイダーを呼び出します。 これらのプロバイダーはすべて、元の PutInstance 要求が成功するために成功する必要があります。 階層内の最上位のクラスをサポートするプロバイダーが最初に呼び出されます。 呼び出し順序は最上位クラスのサブクラスに続き、 pInst が指すインスタンスを所有するクラスのプロバイダーに Windows Management が到達するまで上から下に進みます。
インスタンスのどの子クラスのプロバイダーも、Windows Management によって呼び出されません。 したがって、アプリケーションが継承されたプロパティの値を変更する場合、アプリケーションは親クラスの対応するインスタンスではなく、子クラスの完全なインスタンスで PutInstance を呼び出す必要があります。
アプリケーションがクラス階層に属するインスタンスを更新する必要がある場合、 pInst パラメーターは、変更するプロパティを含むインスタンスを指す必要があります。 たとえば、ClassB に属するターゲット インスタンスについて考えます。 ClassB のインスタンスは ClassA から派生し、ClassA でプロパティ PropA が定義されています。 アプリケーションが ClassB インスタンスの PropA の値を変更する場合は、ClassA のインスタンスではなく、そのインスタンスに pInst を設定する必要があります。
抽象クラスのインスタンスで PutInstance を呼び出すことは許可されていません。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista |
サポートされている最小のサーバー | Windows Server 2008 |
対象プラットフォーム | Windows |
ヘッダー | wbemcli.h (Wbemidl.h を含む) |
Library | Wbemuuid.lib |
[DLL] | Fastprox.dll;Esscli.dll;FrameDyn.dll;FrameDynOS.dll;Ntevt.dll;Stdprov.dll;Viewprov.dll;Wbemcomn.dll;Wbemcore.dll;Wbemess.dll;Wbemsvc.dll;Wmipicmp.dll。Wmidcprv.dll;Wmipjobj.dll。Wmiprvsd.dll |