Share via


Provider::ExecQuery メソッド (provider.h)

[Provider クラスは WMI プロバイダー フレームワークの一部であり、現在最終的な状態と見なされています。これらのライブラリに影響を与える、セキュリティ関連以外の問題に対しては、それ以上の開発、機能強化、または更新プログラムは利用できません。 すべての新規開発には、MI API を使用する必要があります。]

ExecQuery メソッドは、WMI クエリ言語 (WQL) クエリを処理するために WMI によって呼び出されます。

構文

HRESULT ExecQuery(
        MethodContext     *pMethodContext,
  [ref] CFrameworkQuery & cQuery,
        long              lFlags
);

パラメーター

pMethodContext

この呼び出しのコンテキスト オブジェクトへのポインター。 この値には、クライアントによって指定された IWbemContext プロパティが含まれます。 また、このポインターは、WMI への呼び出しのパラメーターとして使用する必要があります。

[ref] cQuery

プロバイダー フレームワークによって既に解析されているクエリへのポインター。

lFlags

クエリ実行操作に関する情報を含むフラグのビットマスク。 これは、 IWbemServices::ExecQuery メソッドでクライアントによって指定された値です。

次のフラグは、WMI によって処理 (および除外) されます。

  • WBEM_FLAG_ENSURE_LOCATABLE
  • WBEM_FLAG_FORWARD_ONLY
  • WBEM_FLAG_BIDIRECTIONAL
  • WBEM_FLAG_USE_AMENDED_QUALIFIERS
  • WBEM_FLAG_RETURN_IMMEDIATELY
  • WBEM_FLAG_PROTOTYPE

戻り値

このメソッドの既定のフレームワーク プロバイダー実装では、 び出し元のメソッドにWBEM_E_PROVIDER_NOT_CAPABLEが返されます。 IWbemServices::ExecQuery メソッドは、一般的な戻り値を一覧表示しますが、任意の COM リターン コードを返すことができます。

解説

WMI は、多くの場合、IWbemServices::ExecQuery へのクライアント呼び出しに応答して ExecQuery を呼び出します。この場合、クライアントは選択したプロパティの一覧または WHERE 句を渡します。 また、クライアント クエリにクラスを記述する "ASSOCIATORS OF" ステートメントまたは "REFERENCES OF" ステートメントが含まれている場合は、WMI で ExecQuery を呼び出すこともできます。 ExecQuery の実装でWBEM_E_NOT_SUPPORTEDが返された場合、クライアントは WMI に依存してクエリを処理します。

WMI は、 CreateInstanceEnum の実装を呼び出してすべてのインスタンスを提供することでクエリを処理します。 その後、WMI は、インスタンスをクライアントに返す前に、結果のインスタンスをフィルター処理します。 したがって、作成する ExecQuery の実装は、 CreateInstanceEnum よりも効率的である必要があります。

ExecQuery の一般的な実装を次に示します。

  1. Provider::CreateNewInstance を使用して、クラスの空のインスタンスを作成します。
  2. 作成するインスタンスのサブセットを決定します。

    IsPropertyRequired などのメソッドを使用して、必要なプロパティを確認したり、GetValuesForProp を使用して WMI で必要なインスタンスを確認したりできます。 要求されたプロパティを処理する他のメソッドには、 CFrameworkQuery::GetRequiredPropertiesCFrameworkQuery::AllPropertiesAreRequiredCFrameworkQuery::KeysOnly があります。

  3. CInstance::SetByte や CInstance::SetStringArray などの CInstance クラスの Set メソッドを使用して、空のインスタンスのプロパティを設定します。
  4. CInstance::Commit を使用して、インスタンスをクライアントに返送します。
  5. 適切な戻り値を返します。

    既定の ExecQuery フレームワーク プロバイダーの実装では 、WBEM_E_PROVIDER_NOT_CAPABLEが返されます。 ExecQuery を実装する場合は、IWbemServices::ExecQuery に記載されている一般的な戻り値を使用する必要があります。 ただし、必要に応じて、任意の COM リターン コードを返すことができます。

WMI は、フレームワーク プロバイダーに "ASSOCIATORS OF" または "REFERENCES OF" クエリを送信しません。 代わりに、WMI はスキーマを使用して、対象のクラスに関連するクラスを特定し、結果を取得するための適切な WQL クエリを生成します。 そのため、"ASSOCIATORS OF" クエリと "REFERENCES OF" クエリの追加サポートをコーディングする必要はありません。

ただし、フレームワーク プロバイダーを作成するときは、次の点に注意する必要があります。

  • 関連付けクラスの標準クエリ、特に WHERE 句で参照プロパティが使用されるクエリをサポートしていることを確認します。 詳細については、「 CFrameworkQuery::GetValuesForProp」を参照してください
  • 関連付けクラスのサポートで、エンドポイントが存在するかどうかを確認チェック場合は、必ず CWbemProviderGlue::GetInstanceKeysByPath または CWbemProviderGlue::GetInstancePropertiesByPath メソッドを使用してください。

    これらのメソッドを使用すると、エンドポイントはリソースを集中的に使用するプロパティまたは不要なプロパティの設定をスキップできます。

  • 関連付けエンドポイント クラスでプロパティごとの Get メソッドがサポートされていることを確認します。 詳細については、「 Partial-Instance 操作のサポート」を参照してください。 クエリ パラメーターの詳細については、「 CFrameworkQuery」を参照してください。

要件

   
サポートされている最小のクライアント Windows Vista
サポートされている最小のサーバー Windows Server 2008
対象プラットフォーム Windows
ヘッダー provider.h (FwCommon.h を含む)
Library FrameDyn.lib
[DLL] FrameDynOS.dll;FrameDyn.dll