クラス プロバイダーのプライマリ インターフェイスの実装
クラス プロバイダーを実装するには、2 つの方法があります。プッシュ プロバイダーまたはプル プロバイダーとしてインターフェイスを実装します。
このトピックでは、以下のセクションについて説明します。
プッシュ クラス プロバイダーのプライマリ インターフェイスの実装
すべてのプロバイダーが初期化のために IWbemProviderInit を実装し、少なくとも 1 つの他のインターフェイスをプライマリ インターフェイスとして実装するのに対し、プッシュ プロバイダーは IWbemProviderInit のみを実装します。
実装で次のタスクが実行されていることを確認します。
- 適切なクラス データを取得します。
- データを WMI リポジトリに置きます。
- 古いデータを削除します。
初期化プロセスが完了すると、WMI は、それ以上プロバイダーの操作を行わずに、プッシュ プロバイダーに属するクラスに対するすべてのアプリケーション要求を処理します。 その後、プッシュ プロバイダーは、プロバイダーではなく WMI のクライアントとして効果的に機能します。 IWbemProviderInit の実装の詳細については、「プロバイダーの初期化」を参照してください。
注意
WMI を呼び出してプッシュ プロバイダーのデータを作成、更新、または削除する場合は、IWbemServices メソッドのすべての呼び出しに WBEM_FLAG_OWNER_UPDATE フラグを含むように lFlags パラメーターを設定します。
プル クラス プロバイダーのプライマリ インターフェイスの実装
クラス プル プロバイダーは、プライマリ インターフェイスとして IWbemServices を実装する必要があります。 IWbemServices インターフェイスは、データ取得、データ更新、データ削除、列挙、クエリ処理をサポートします。 ただし、IWbemServices は WMI のサービスを要求するためにアプリケーションとプロバイダーによっても使用されるため、IWbemServices にはクラス プロバイダーとは無関係な多くのメソッドが含まれています。 実装では、GetObjectAsync および CreateClassEnumAsync メソッドを使用して、クラスの取得と列挙をそれぞれサポートする必要があります。 次の表に、クラス プロバイダーに実装できる追加の非同期 IWbemServices メソッドを示します。
メソッド | 特徴量 |
---|---|
PutInstanceAsync | 変更 |
DeleteClassAsync | 削除 |
注意
シンクへのコールバックはクライアントが必要とするのと同じ認証レベルでは返されない可能性があるため、非同期ではなく半同期通信を使用することをお勧めします。 詳細については、「メソッドの呼び出し」を参照してください。
クラス プロバイダーは、機能セットをサポートしない他のすべての IWbemServices メソッドに対して WBEM_E_PROVIDER_NOT_CAPABLE を返すスタブ実装を提供する必要があります。 具体的には、WMI はクラス プロバイダーのクエリ処理をサポートしていません。 そのため、クラス プロバイダーは、IWbemServices::ExecQueryAsync の実装から WBEM_E_PROVIDER_NOT_CAPABLE を返すか、QuerySupportLevels 登録プロパティを NULL に設定するか、またはその両方を行う必要があります。
クラス プロバイダーが実装するインターフェイスは、インスタンス プロバイダーとメソッド プロバイダーのインターフェイスによく似ています。 実際に、すべてのメソッドを実装し、適切に登録することで、1 つのプロバイダーが 3 種類のプロバイダーすべてとして機能できます。