IWSDiscoveryProvider
COM公式ドキュメント
WS-Discovery によってネットワーク上でアドバタイズされているサービスを探索(ディスカバリー)するために使用します。
解説(Remarks)
Discovery Provider は WS-Discovery における「クライアント」側のビューを表します。
メソッド 7
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
WSD デバイスを探索する際に検索対象とする IP アドレスファミリ (IPv4、IPv6、またはその両方) を指定します。
| dwAddressFamily | DWORD | in | デバイスを探索する際に検索対象とするアドレスファミリ。
|
戻り値
このメソッドは次のいずれかの値を返すことがあります。
返される可能性のある値には、以下のものが含まれます (これらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| dwAddressFamily に WSDAPI_ADDRESSFAMILY_IPV4、WSDAPI_ADDRESSFAMILY_IPV6、WSDAPI_ADDRESSFAMILY_IPV4 | WSDAPI_ADDRESSFAMILY_IPV6 以外の値が指定されています。 | |
| このパブリッシャーに対してアドレスファミリは既に設定されています。 | |
|
システムは dwAddressFamily で指定されたアドレスファミリをサポートしていません。 |
解説(Remarks)
このメソッドは 1 つのプロバイダーに対して一度だけ呼び出すことができます。また、通知シンクをプロバイダーにアタッチする前に呼び出す必要があります。つまり、SetAddressFamily はプロバイダーに対して Attach を呼び出す前に呼び出す必要があります。
コールバックインターフェイスを discovery provider にアタッチします。
| pSink | IWSDiscoveryProviderNotify* | in | コールバック通知を受け取るインターフェイス。検索結果および Hello メッセージ、Bye メッセージは、このインターフェイスのコールバックを介して通知されます。 |
戻り値
返される可能性のある値には、以下のものが含まれます (これらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| pSink が NULL です。 | |
| コールバックインターフェイスは既にプロバイダーにアタッチされています。 |
解説(Remarks)
コールバックインターフェイスを discovery provider からデタッチします。
戻り値
返される可能性のある値には、以下のものが含まれます (これらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| コールバックインターフェイスがアタッチされていません。このメソッドを呼び出す前に Attach を呼び出す必要があります。 |
解説(Remarks)
Attach メソッドによってコールバックインターフェイスが discovery provider にアタッチされている場合、プロバイダーインターフェイスオブジェクトへの参照を解放する前に Detach を呼び出す必要があります。
Detach 操作は、関連付けられた IWSDiscoveryProviderNotify オブジェクトへのすべてのコールバックが完了するまでブロックします。
デバイス識別子による WS-Discovery ホストの検索を開始します。
| pszId | LPWSTR | in | 目的の discovery provider のデバイス識別子。 |
| pszTag | LPWSTR | inoptional | この検索に対する任意の識別子タグ。NULL でもかまいません。 |
戻り値
返される可能性のある値には、以下のものが含まれます (これらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| pszId が NULL であるか、pszId の文字数が WSD_MAX_TEXT_LENGTH (8192) を超えているか、pszTag の文字数が WSD_MAX_TEXT_LENGTH (8192) を超えています。 | |
| コールバックインターフェイスがアタッチされていません。このメソッドを呼び出す前に Attach を呼び出す必要があります。 | |
| 操作を実行するのに十分なメモリがありません。 |
解説(Remarks)
SearchById は、以前に既知であった特定のデバイスを見つけるために WS-Discovery の Resolve を開始します。Resolve のエンドポイントアドレスとして pszId が使用されます。この呼び出しにより、1 つ以上の Add コールバックが発生する場合があります。検索が完了する前に Add コールバックが 1 つでも発行された場合は SearchComplete コールバックが発行され、そうでない場合は SearchFailed コールバックが発行されます。
pszTag は、ユーザーが任意に指定する文字列で、いずれのコールバックにおいても返されるため、呼び出し元はコールバックを元のクエリと対応付けることができます。
このメソッドを呼び出すアプリケーションのトラブルシューティングについては、Troubleshooting WSDAPI Applications を参照してください。
デバイスアドレスによる WS-Discovery ホストの検索を開始します。
| pszAddress | LPWSTR | in | デバイスの HTTP トランスポートアドレス。 |
| pszTag | LPWSTR | inoptional | この検索に対する任意の識別子タグ。NULL でもかまいません。 |
戻り値
返される可能性のある値には、以下のものが含まれます (これらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| pszAddress が NULL であるか、pszAddress の文字数が WSD_MAX_TEXT_LENGTH (8192) を超えているか、pszTag の文字数が WSD_MAX_TEXT_LENGTH (8192) を超えています。 | |
| コールバックインターフェイスがアタッチされていません。このメソッドを呼び出す前に Attach を呼び出す必要があります。 | |
| 操作を実行するのに十分なメモリがありません。 |
解説(Remarks)
SearchByAddress は、既知の URL にあるデバイスを識別するために、HTTP 経由で WS-Discovery の Probe を開始します。Probe は pszAddress で指定されたアドレスに送信されます。この呼び出しにより、1 つ以上の Add コールバックが発生する場合があります。検索が完了する前に Add コールバックが 1 つでも発行された場合は SearchComplete コールバックが発行され、そうでない場合は SearchFailed コールバックが発行されます。検索の開始からこれらの通知のいずれかを受け取るまでの間隔は、最大で 30 秒かかることがあります。
pszTag は、ユーザーが任意に指定する文字列で、いずれのコールバックにおいても返されるため、呼び出し元はコールバックを元のクエリと対応付けることができます。
このメソッドを呼び出すアプリケーションのトラブルシューティングについては、Troubleshooting WSDAPI Applications を参照してください。
デバイスの種類による WS-Discovery ホストの検索を開始します。
| pTypesList | WSD_NAME_LIST* | inoptional | 検索対象とする discovery provider の型の一覧を表す WSD_NAME_LIST 構造体へのポインター。NULL でもかまいません。 |
| pScopesList | WSD_URI_LIST* | inoptional | 検索対象とする discovery provider のスコープの一覧を表す WSD_URI_LIST 構造体へのポインター。NULL でもかまいません。 |
| pszMatchBy | LPWSTR | inoptional | スコープに使用される照合規則。NULL でもかまいません。 |
| pszTag | LPWSTR | inoptional | この検索に対する任意の識別子タグ。NULL でもかまいません。 |
戻り値
返される可能性のある値には、以下のものが含まれます (これらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| pszMatchBy の文字数が WSD_MAX_TEXT_LENGTH (8192) を超えているか、pszTag の文字数が WSD_MAX_TEXT_LENGTH (8192) を超えています。 | |
| コールバックインターフェイスがアタッチされていません。このメソッドを呼び出す前に Attach を呼び出す必要があります。 | |
| 操作を実行するのに十分なメモリがありません。 |
解説(Remarks)
SearchByType は、指定した条件に一致する discovery ホストを見つけるために WS-Discovery の Probe を開始します。このメソッドでは、型による照合、スコープによる照合、その両方の組み合わせによる照合、または (スコープも型も指定しない場合は) discovery に対応するすべてのデバイスとの照合が可能です。
pszMatchBy は、pScopesList も指定する場合に限り指定してください。この呼び出しにより、1 つ以上の Add コールバックが発生する場合があります。検索が完了する前に Add コールバックが 1 つでも発行された場合は SearchComplete コールバックが発行され、そうでない場合は SearchFailed コールバックが発行されます。
pszTag は、ユーザーが任意に指定する文字列で、いずれのコールバックにおいても返されるため、呼び出し元はコールバックを元のクエリと対応付けることができます。
このメソッドを呼び出すアプリケーションのトラブルシューティングについては、Troubleshooting WSDAPI Applications を参照してください。
このプロバイダーに関連付けられている XML コンテキストを取得します。
| ppContext | IWSDXMLContext** | out | XML コンテキストを格納するポインター変数へのポインター。 |
戻り値
返される可能性のある値には、以下のものが含まれます (これらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| ppContext が NULL です。 | |
| discovery provider が作成されていません。プロバイダーを作成するには WSDCreateDiscoveryProvider を呼び出してください。 |
解説(Remarks)
トランザクションの XML 状態に対する任意のコンテキストを返します。サービスレイヤーを使用している場合、これは XML 名前空間および型が登録されたコンテキストになります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IWSDiscoveryProvider "{8FFC8E55-F0EB-480F-88B7-B435DD281D45}" #usecom global IWSDiscoveryProvider IID_IWSDiscoveryProvider "{}" #comfunc global IWSDiscoveryProvider_SetAddressFamily 3 int #comfunc global IWSDiscoveryProvider_Attach 4 sptr #comfunc global IWSDiscoveryProvider_Detach 5 #comfunc global IWSDiscoveryProvider_SearchById 6 wstr,wstr #comfunc global IWSDiscoveryProvider_SearchByAddress 7 wstr,wstr #comfunc global IWSDiscoveryProvider_SearchByType 8 var,var,wstr,wstr #comfunc global IWSDiscoveryProvider_GetXMLContext 9 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IWSDiscoveryProvider "{8FFC8E55-F0EB-480F-88B7-B435DD281D45}" #usecom global IWSDiscoveryProvider IID_IWSDiscoveryProvider "{}" #comfunc global IWSDiscoveryProvider_SetAddressFamily 3 int #comfunc global IWSDiscoveryProvider_Attach 4 sptr #comfunc global IWSDiscoveryProvider_Detach 5 #comfunc global IWSDiscoveryProvider_SearchById 6 wstr,wstr #comfunc global IWSDiscoveryProvider_SearchByAddress 7 wstr,wstr #comfunc global IWSDiscoveryProvider_SearchByType 8 sptr,sptr,wstr,wstr #comfunc global IWSDiscoveryProvider_GetXMLContext 9 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。