IWbemServices::P utClassAsync メソッド (wbemcli.h)

IWbemServices::P utClassAsync メソッドは、新しいクラスを作成するか、既存のクラスを更新します。 pObject パラメーターで指定されたクラスは、必要なすべてのプロパティ値で正しく初期化する必要があります。 呼び出しはすぐに返されます。 成功または失敗は、 pResponseHandler パラメーターで指定されたオブジェクト シンクに提供されます。

構文

HRESULT PutClassAsync(
  [in] IWbemClassObject *pObject,
  [in] long             lFlags,
  [in] IWbemContext     *pCtx,
  [in] IWbemObjectSink  *pResponseHandler
);

パラメーター

[in] pObject

クラス定義を含むオブジェクトへのポインター。

[in] lFlags

次の値のうち 1 つ以上が有効です。

WBEM_FLAG_USE_AMENDED_QUALIFIERS

このフラグが設定されている場合、WMI は 修正された フレーバーを持つ修飾子を格納しません。 このフラグが設定されていない場合は、このオブジェクトがローカライズされていないと見なされ、すべての修飾子がこのインスタンスと共に格納されます。

WBEM_FLAG_CREATE_OR_UPDATE

このフラグを指定すると、このクラスが存在しない場合は作成され、既に存在する場合は上書きされます。

WBEM_FLAG_UPDATE_ONLY

既存のクラスを更新します。

WBEM_FLAG_CREATE_ONLY

このフラグは、クラスの作成専用です。 クラスが既に存在する場合、呼び出しは失敗します。

WBEM_FLAG_SEND_STATUS

このフラグは、クライアントの IWbemObjectSink::SetStatus の実装を通じて中間状態レポートを受信する要求を Windows Management に登録します。 プロバイダーの実装では、このフラグが動作を変更するための中間状態レポートをサポートする必要があります。

WBEM_FLAG_OWNER_UPDATE

プッシュ プロバイダーは、 PutClassAsync を呼び出すときにこのフラグを指定して、このクラスが変更されたことを示す必要があります。

WBEM_FLAG_UPDATE_COMPATIBLE

このフラグを使用すると、派生クラスがなく、そのクラスのインスタンスがない場合に、クラスを更新できます。 また、変更が重要でない修飾子 ( Description 修飾子など) に限定されている場合は、すべてのケースで更新を行うこともできます。 これは、この呼び出しの既定の動作であり、以前のバージョンの Windows Management との互換性のために使用されます。 クラスにインスタンスがある場合、または重要な修飾子を変更する場合、更新は失敗します。

WBEM_FLAG_UPDATE_SAFE_MODE

このフラグは、子クラスが存在する場合でも、変更によって子クラスとの競合が発生しない限り、クラスの更新を許可します。 このフラグを更新する例として、子クラスで既に言及されていない基本クラスに新しいプロパティを追加できます。 クラスにインスタンスがある場合、更新は失敗します。

WBEM_FLAG_UPDATE_FORCE_MODE

このフラグでは、競合する子クラスが存在する場合に、強制的にクラスを更新します。 このフラグを強制的に更新する例は、クラス修飾子が子クラスで定義されていて、基底クラスが既存の修飾子と競合するのと同じ修飾子を追加しようとした場合です。 強制モードでは、子クラスの競合する修飾子を削除することで、この競合が解決されます。

[in] pCtx

通常 は NULL です。 それ以外の場合、これは、要求されたクラスを受信しているプロバイダーによって使用される可能性がある IWbemContext オブジェクトへのポインターです。 コンテキスト オブジェクトの値は、該当するプロバイダーのドキュメントで指定する必要があります。 このパラメーターの詳細については、「 WMI への呼び出しの作成」を参照してください。

[in] pResponseHandler

呼び出し元による IWbemObjectSink の実装へのポインター。 このハンドラーは、SetStatus メソッドを使用して状態が使用可能になったときに Put 要求の状態を受け取ります。 エラー コードが返された場合、指定された IWbemObjectSink ポインターは使用されません。 WBEM_S_NO_ERRORが返された場合、操作の結果を示すために、ユーザーの IWbemObjectSink 実装が呼び出されます。 Windows Management は、WBEM_S_NO_ERRORが返された場合にのみ AddRef をポインターに呼び出します。 エラー コードが返された場合、参照カウントはエントリ時と同じです。 このパラメーターの詳細については、「 メソッドの呼び出し」を参照してください。

戻り値

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

その他の状態またはエラー コードは、 pReponseHandler パラメーターで指定されたオブジェクト シンクに報告されます。

ネットワークの問題によって Windows Management へのリモート接続が失われると、COM 固有のエラー コードも返される可能性があります。

PutInstanceAsyncWBEM_S_NO_ERRORを返す場合、WMI は応答ハンドラーの SetStatus メソッドからの結果を待機します。 WMI は、ローカル接続で無期限に待機するか、リモート接続のタイムアウトが発生するまで待機します。

WBEM_E_FAILEDを返すと、他のプロバイダーにクラスを作成する機会がないため、後で成功する可能性のある方法でクラス プロバイダーが失敗した場合にのみ返す必要があります。

メモ クラス定義がクライアントまたはプロバイダーによって使用されている間にクラス定義を変更すると、予期しない動作が発生します。 IWbemServices::P utClass メソッドは、 クラスを現在使用しているクライアントまたはプロバイダーがない場合にのみ、クラスを作成または更新するために使用する必要があります。
 

注釈

1 つの特定のクラスに対して複数のクラス プロバイダーがインストールされている場合、WMI は、そのクラスを作成できるクラス プロバイダーを認識しません。

IWbemObjectSink::SetStatus メソッドは、結果セットの末尾を示すために呼び出されます。 また、 IWbemObjectSink::エラー 状態が発生したかどうかを示す呼び出しなしで呼び出すこともできます。

コールバックはクライアントが必要とするのと同じ認証レベルで返されない可能性があるため、非同期通信の代わりに半同期を使用することをお勧めします。 非同期通信が必要な場合は、「 メソッドの呼び出し」を参照してください。

メソッドを半同期的に使用する方法の詳細については、「 IWbemServices::P utClass 」および「 メソッドの呼び出し」を参照してください。

次のコード例では、 PutClassAsync の簡単な実装について説明します。

HRESULT CStdProvider::PutClassAsync( 
            /* [in] */ IWbemClassObject __RPC_FAR *pObject,
            /* [in] */ long lFlags,
            /* [in] */ IWbemContext __RPC_FAR *pCtx,
            /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler
            )
{
    // You must implement the ClassIsValid function yourself to
    // determine if the class contains a valid instance
   if (ClassIsValid(lFlags, pObject))
   {
       return WBEM_S_NO_ERROR;
   }

   return WBEM_E_PROVIDER_NOT_CAPABLE;   
}

要件

要件
サポートされている最小のクライアント 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

こちらもご覧ください

メソッドの呼び出し

クラスの作成

IWbemServices

IWbemServices::PutClass