次の方法で共有


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

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

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

構文

HRESULT Execute(
  [out] IFunctionInstance **ppIFunctionInstance
);

パラメーター

[out] ppIFunctionInstance

要求された関数インスタンスを受け取る IFunctionInstance インターフェイス ポインターへのポインター。

戻り値

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

リターン コード/値 説明
S_OK
メソッドは正常に完了しました。
E_INVALIDARG
ppIFunctionInstance パラメーターは NULL です
E_OUTOFMEMORY
メソッドは、この操作を実行するために必要なメモリを割り当てることができません。
E_PENDING
プロバイダーによって返される結果は、非同期通知によって返されます。
HRESULT_FROM_WIN32(ERROR_OBJECT_NOT_FOUND)
0x800710d8
指定した ID で表される関数インスタンスがこのコンピューターに存在しません。
HRESULT_FROM_WIN32(ERROR_KEY_DELETED)
0x800703fa
関数インスタンスに対応するキーが別のプロセスによって削除されたため、関数インスタンスを返できませんでした。 このエラーは、クエリ処理の実行中にキーが削除された場合、レジストリ プロバイダーによって返されます。
HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)
0x80070002
関数インスタンスに対応するキーが見つからなかったため、関数インスタンスを返できませんでした。 このエラーは、プロバイダーがインスタンス クエリの一致するインスタンスを見つけることができなかった場合に、レジストリ プロバイダーによって返されます。
 

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

  • すべてのプロバイダーがS_OKを返す場合、 Execute はS_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を返す場合、 Execute はS_OKを返します。 OnError 通知は、上記のように送信されます。
  • 少なくとも 1 つのプロバイダーがエラー値を返し、少なくとも 1 つのプロバイダーがE_PENDINGを返す場合、 Execute はE_PENDINGを返します。 OnError 通知は、上記のように送信されます。

注釈

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

  1. 関数インスタンスを取得します。
  2. クライアント プログラムの IFunctionDiscoveryNotification コールバック ルーチンのアドレスが IFunctionDiscovery ::CreateInstanceQuery に提供されている場合は、更新通知メカニズムを開始します。
関数探索ネットワーク プロバイダーは、 IFunctionDiscoveryNotification インターフェイスを介してのみ関数インスタンスを返します。 このメソッドが呼び出されると、関数インスタンスは直接返されません。 代わりに、 Execute は 完全に非同期の取得操作を開始し、結果が非同期的に返されることを示すE_PENDINGを返します。 関数探索ネットワーク プロバイダーから関数インスタンスを取得するには、通知を使用する必要があります。

同じクエリ オブジェクトで Execute が 2 回呼び出されると、2 番目のクエリが実行される前に最初のクエリが終了します。

要件

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

こちらもご覧ください

関数検出クエリ

IFunctionInstanceQuery