[関数の検出は、[要件] セクションで指定されたオペレーティング システムで使用できます。 これは、以降のバージョンで変更または使用できない可能性があります。
関数インスタンスのプロバイダー固有の COM オブジェクトを作成します。 プロバイダー ライターは、COM オブジェクトを使用して追加の機能を提供するために、このメソッドを実装できます。
構文
HRESULT InstanceQueryService(
[in] IFunctionInstance *pIFunctionInstance,
[in] INT_PTR iProviderInstanceContext,
[in] REFGUID guidService,
[in] REFIID riid,
[out] IUnknown **ppIUnknown
);
パラメーター
[in] pIFunctionInstance
IFunctionInstance インターフェイスへのポインター。
[in] iProviderInstanceContext
特定の関数インスタンスに関連付けられているコンテキスト。
[in] guidService
サービスの一意識別子 (SID)。 これは、プロバイダー ライターによって定義されたサービス ID です。 例については、「FunctionDiscoveryServiceIDs.h」を参照してください。
[in] riid
呼び出し元がサービスに対して受信するインターフェイスの一意識別子。
[out] ppIUnknown
サービスのインターフェイス ポインターを受け取るポインター。 呼び出し元は、サービスが不要になったときに、このインターフェイス ポインターを介して Release を呼び出す役割を担います。
戻り値
可能な戻り値は次のとおりですが、これらに限定されません。
| リターン コード | 説明 |
|---|---|
|
メソッドは正常に完了しました。 |
|
プロバイダーは guidService によって識別されるサービスを実装しますが、 rrid によって識別されるインターフェイスは実装しません。 |
|
メソッドは、この操作を実行するために必要なメモリを割り当てることができません。 |
|
プロバイダーが IFunctionInstance::QueryService メソッドを実装していないか、 guidService で指定されたサービス識別子がプロバイダーのサービス識別子と一致しません。 |
解説
InstanceQueryService は、guidService で識別されたサービスの実装を作成またはアクセスし、ppv 引数の riid で指定されたインターフェイスのアドレスを返します。 プロバイダーはサービスを実装でき、このメソッドはプロバイダーがこの実装を提供するためのメカニズムを提供し、サービスを実装するための新しいオブジェクトの作成を要求します。
guidService がこのプロバイダーに属していない場合、または riid インターフェイスがサポートされていない場合、プロバイダーはE_NOINTERFACEを返す必要があります。 プロバイダーは、単にこのメソッドを実装しない場合、または要求された SID を実装していない場合は、 E_NOTIMPL を返す必要があります。
埋め込みサービスまたはデバイスをサポートするすべてのプロバイダーは、SID_PNPXServiceCollection サービスを実装する必要があります。 SID_PNPXServiceCollection サービスがサポートされている場合、クライアントは IFunctionInstance::QueryService を呼び出して、埋め込みサービスまたはデバイスに関連付けられている情報とメタデータにアクセスできます。 たとえば、PnP-X プロバイダー (つまり、 SSDP プロバイダー と WSD プロバイダー) は、SID_PNPXServiceCollection サービスのサポートを実装します。 すべてのプロバイダーがサービス サポートSID_PNPXServiceCollection実装しているわけではありません。
要件
| サポートされている最小のクライアント | Windows Vista [デスクトップ アプリのみ] |
| サポートされている最小のサーバー | Windows Server 2008 [デスクトップ アプリのみ] |
| 対象プラットフォーム | Windows |
| ヘッダー | functiondiscoveryprovider.h |