次の方法で共有


IFunctionInstanceCollectionQuery::Execute メソッド (functiondiscoveryapi.h)

[関数検出は、[要件] セクションで指定したオペレーティング システムで使用できます。 以降のバージョンでは変更または使用できない場合があります。]

IFunctionDiscovery::CreateInstanceCollectionQuery によって定義されたクエリを実行します。

構文

HRESULT Execute(
  [out] IFunctionInstanceCollection **ppIFunctionInstanceCollection
);

パラメーター

[out] ppIFunctionInstanceCollection

要求された関数インスタンス コレクションを受け取る IFunctionInstanceCollection インターフェイス ポインターへのポインター。

戻り値

可能な戻り値には、次のものが含まれますが、これらに限定されません。

リターン コード 説明
S_OK
メソッドは正常に完了しました。 結果は ppIFunctonInstanceCollecton で同期的に返されます。
E_OUTOFMEMORY
メソッドは、この操作を実行するために必要なメモリを割り当てることができません。
E_PENDING
結果の一部は非同期通知によって返されます。 詳細については、「解説」を参照してください。
 

定義済みのクエリは、階層化されたカテゴリのクエリ です。 定義済みのクエリが実行されると、関数インスタンスを返す各プロバイダーも HRESULT 値を返します。 プロバイダー HRESULT 値が集計され、 Execute メソッドによって返される値には、これらの集計結果が反映されます。 結果は次のように集計されます。

  • すべてのプロバイダーが S_OKを返す場合、 ExecuteS_OKを返します。
  • 少なくとも 1 つのプロバイダーがE_PENDINGを返し、他のすべてのプロバイダーがS_OKまたはE_PENDINGを返す場合、Execute はE_PENDINGを返します。
  • すべてのプロバイダーがエラー値 (つまり、 S_OK または E_PENDING以外の値) を返す場合、 Execute は最後にクエリを実行したネットワーク プロバイダーによって返されたエラー値を返します。 また、クライアントの IFunctionDiscoveryNotification コールバック ルーチンが IFunctionDiscovery::CreateInstanceCollectionQuery に提供された場合は、プロバイダーごとに OnError 通知が送信されます。 各 OnError 通知には、プロバイダーによって返される HRESULT が含まれます。
  • 少なくとも 1 つのプロバイダーがエラー値を返し、他のすべてのプロバイダーが S_OKを返す場合、 ExecuteS_OKを返します。 OnError 通知は、上記のように送信されます。
  • 少なくとも 1 つのプロバイダーがエラー値を返し、少なくとも 1 つのプロバイダー がE_PENDINGを返す場合、 ExecuteE_PENDINGを返します。 OnError 通知は、上記のように送信されます。
Execute がS_OKを返すと、ppIFunctionInstanceCollection にはクエリの結果が含まれます。 IFunctionDiscoveryNotification インターフェイスが IFunctionDiscoveryCreateInstanceCollectionQuery メソッドに提供されている場合、結果への変更はそのインターフェイスを使用して伝達されます。

ExecuteE_PENDINGを返すと、結果セットは IFunctionDiscovery の CreateInstanceCollectionQuery メソッドに提供される IFunctionDiscoveryNotification インターフェイスを介して非同期的に返されます。 ppIFunctionInstanceCollectionNULL であるか、部分的な結果セットを含む場合があります。 iFunctionDiscoveryNotificationOnEvent メソッドが FD_EVENTID_SEARCHCOMPLETE で呼び出されると、列挙は完了します。 FD_EVENTID_SEARCHCOMPLETE イベントを受信すると、結果に対する追加の通知が更新されます。

解説

このメソッドは、クエリ オブジェクトからデータを取得する前に、クライアント プログラムによって呼び出される必要があります。 このメソッドを呼び出すと、次の処理が実行されます。

  1. 関数インスタンス コレクション オブジェクトを取得します。
  2. IFunctionDiscovery::CreateInstanceCollectionQuery に渡されるカテゴリのプロバイダーに対してクエリを実行します。
  3. カテゴリ プロバイダーを取得します。
  4. サブカテゴリ データを使用してカテゴリ プロバイダーにクエリを実行し、クエリ制約を使用してコレクションを生成します。
  5. クライアント プログラムの IFunctionDiscoveryNotification コールバック ルーチンのアドレスが IFunctionDiscovery ::CreateInstanceCollectionQuery に提供されている場合は、更新通知メカニズムを開始します。
  6. コレクション データをキャッシュし、 を返します。
関数探索ネットワーク プロバイダーは、 IFunctionDiscoveryNotification インターフェイスを介してのみ関数インスタンスを返します。 このメソッドが呼び出されると、関数インスタンスは直接返されません。 代わりに、 Execute は 完全に非同期の取得操作を開始し、 E_PENDING を返して結果が非同期的に返されることを示します。 関数探索ネットワーク プロバイダーから関数インスタンスを取得するには、通知を使用する必要があります。

要件

   
サポートされている最小のクライアント Windows Vista [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2008 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー functiondiscoveryapi.h
[DLL] FunDisc.dll

関連項目

関数検出クエリ

IFunctionInstanceCollectionQuery