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 固有のエラー コードも返される可能性があります。
PutInstanceAsync がWBEM_S_NO_ERRORを返す場合、WMI は応答ハンドラーの SetStatus メソッドからの結果を待機します。 WMI は、ローカル接続で無期限に待機するか、リモート接続のタイムアウトが発生するまで待機します。
WBEM_E_FAILEDを返すと、他のプロバイダーにクラスを作成する機会がないため、後で成功する可能性のある方法でクラス プロバイダーが失敗した場合にのみ返す必要があります。
注釈
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 |