Win32 API 日本語リファレンス
ホーム › Networking.WinSock › LPNSPLOOKUPSERVICENEXT

LPNSPLOOKUPSERVICENEXT

コールバック

シグネチャ

INT LPNSPLOOKUPSERVICENEXT(
    HANDLE hLookup,
    DWORD dwControlFlags,
    DWORD* lpdwBufferLength,
    WSAQUERYSETW* lpqsResults
);

パラメーター

フィールド型説明
hLookupHANDLE以前の WSALookupServiceBegin の呼び出しから返されたハンドル。
dwControlFlagsDWORD次の操作を制御するために使用するフラグ。現在は、結果セットが大きすぎる場合に対処する手段として LUP_FLUSHPREVIOUS のみが定義されています。アプリケーションが十分な大きさのバッファーを提供できない場合、LUP_FLUSHPREVIOUS を設定すると、プロバイダーは大きすぎた直前の結果セットを破棄し、この呼び出しでは次のセットに進みます。
lpdwBufferLengthDWORD*入力時は、lpqsResults が指すバッファーに含まれるサイズ (バイト単位)。出力時は、関数が失敗してエラーが WSAEFAULT の場合に、レコードを取得するために lpqsResults へ渡す必要がある最小サイズ (バイト単位) が格納されます。
lpqsResultsWSAQUERYSETW*戻り時に 1 つの結果セットを WSAQUERYSET 構造体として格納するメモリブロックへのポインター。

公式ドキュメント

NSPLookupServiceNext 関数は、 NSPLookupServiceBegin の以前の呼び出しでハンドルを取得した後、要求されたサービス情報を取得するために呼び出されます。

プロバイダーは、 WSAQUERYSET 構造体を lpqsResults バッファーに渡します。クライアントは、すべての WSAQUERYSET が返されたことを示す WSA_E_NOMORE が返されるまで、この関数を呼び出す必要があります。

戻り値

ルーチンが成功した場合、この関数は NO_ERROR (0) を返します。ルーチンが失敗した場合は SOCKET_ERROR (–1) を返し、 WSASetLastError を使用して適切なエラーコードを設定する必要があります。

エラーコード 意味
WSA_E_CANCELLED
この呼び出しの処理中に NSPLookupServiceEnd が呼び出されました。呼び出しはキャンセルされました。lpqsResults バッファー内のデータは未定義です。

Windows Sockets 2 では、WSAECANCELLED (10103) と WSA_E_CANCELLED (10111) という競合するエラーコードが定義されています。エラーコード WSAECANCELLED は将来のバージョンで削除され、WSA_E_CANCELLED のみが残ります。名前空間プロバイダーは、可能な限り広範なアプリケーションとの互換性を維持するため、WSA_E_CANCELLED エラーコードを使用してください。

WSA_E_NO_MORE
利用できるデータはこれ以上ありません。

Windows Sockets 2 では、WSAENOMORE (10102) と WSA_E_NO_MORE (10110) という競合するエラーコードが定義されています。エラーコード WSAENOMORE は将来のバージョンで削除され、WSA_E_NO_MORE のみが残ります。名前空間プロバイダーは、可能な限り広範なアプリケーションとの互換性を維持するため、WSA_E_NO_MORE エラーコードを使用してください。

WSA_INVALID_HANDLE
指定されたルックアップハンドルが無効です。
WSA_NOT_ENOUGH_MEMORY
この操作を実行するのに十分なメモリがありません。
WSAEFAULT
lpqsResults バッファーが小さすぎて、 WSAQUERYSET セットを格納できませんでした。
WSAEINVAL
このプロバイダーに対して、1 つ以上のパラメーターが無効であるか、指定されていません。
WSAEOPNOTSUPP
この操作はサポートされていません。名前空間プロバイダーがこの関数を実装していない場合に、このエラーが返されます。
WSANO_DATA
名前はデータベース内で見つかりましたが、指定された制限に一致するデータは見つかりませんでした。
WSASERVICE_NOT_FOUND
サービスが不明です。指定された名前空間でサービスが見つかりません。

解説(Remarks)

この関数で指定する dwControlFlags と NSPLookupServiceBegin の時点で指定されたフラグは、組み合わせる目的上「制限」として扱われます。制限は、 NSPLookupServiceBegin 時のものと NSPLookupServiceNext 時のものが組み合わされます。したがって、 NSPLookupServiceNext でのフラグによって、 NSPLookupServiceBegin で要求された以上のデータが返されることはありません。ただし、フラグを多く指定しても少なく指定してもエラーにはなりません。ある NSPLookupServiceNext で指定されたフラグは、その呼び出しにのみ適用されます。

dwControlFlags の LUP_FLUSHPREVIOUS と LUP_RES_SERVICE は、制限を組み合わせる規則の例外です (これらは「制限」フラグではなく動作フラグであるため)。いずれかのフラグが NSPLookupServiceNext で使用された場合、 NSPLookupServiceBegin における同じフラグの設定に関係なく、定義された効果を持ちます。

たとえば、 NSPLookupServiceBegin で LUP_RETURN_VERSION が指定された場合、サービスプロバイダーはバージョンを含むレコードを取得します。 NSPLookupServiceNext で LUP_RETURN_VERSION が指定されていない場合は、バージョンが利用可能であっても、返される情報にバージョンは含まれません。エラーは生成されません。

また、たとえば NSPLookupServiceBegin で LUP_RETURN_BLOB が指定されておらず、 NSPLookupServiceNext で指定された場合、返される情報にプライベートデータは含まれません。エラーは生成されません。

クエリ結果

次の表は WSAQUERYSET のメンバーを示し、クエリ結果が WSAQUERYSET 構造体でどのように表現されるかを説明します。詳細については、クエリ関連のデータ構造を参照してください。
WSAQUERYSET のメンバー名 結果の解釈
**dwSize** sizeof(WSAQUERYSET) に設定されます。これはバージョン管理の仕組みとして使用されます。
**dwOutputFlags** **RESULT_IS_ALIAS** フラグは、これがエイリアスの結果であることを示します。
**lpszServiceInstanceName** サービス名を含む文字列を参照します。
**lpServiceClassId** サービスクラスに対応する GUID。
**lpVersion** 特定のサービスインスタンスのバージョン番号を参照します。
**lpszComment** 省略可能。サービスインスタンスが提供するコメント文字列。
**dwNameSpace** サービスインスタンスが見つかった名前空間。
**lpNSProviderId** このクエリ結果を提供した特定の名前空間プロバイダーを識別します。
**lpszContext** 階層型の名前空間において、サービスが配置されているコンテキストポイントを指定します。
**dwNumberOfProtocols** 結果では未定義です。
**lpafpProtocols** 結果では未定義です。必要なプロトコル情報はすべて CSADDR_INFO 構造体に含まれています。
**lpszQueryString** dwControlFlags に **LUP_RETURN_QUERY_STRING** が含まれている場合、このメンバーは、元のクエリで指定された **lpszServiceInstanceName** のうち解析されずに残った部分を返します。たとえば、ホスト名とそのホスト内のファイルパスを指定する階層的な名前でサービスを識別する名前空間では、返されるアドレスがホストのアドレスとなり、解析されずに残った部分がファイルパスになる場合があります。**lpszServiceInstanceName** が完全に解析され、かつ **LUP_RETURN_QUERY_STRING** が使用された場合、このメンバーは null になるか、長さ 0 の文字列を指します。
**dwNumberOfCsAddrs** CSADDR_INFO 構造体の配列に含まれる要素の数を示します。
**lpcsaBuffer** CSADDR_INFO 構造体の配列へのポインター。各要素には 1 つの完全なトランスポートアドレスが含まれます。
**lpBlob** 省略可能。プロバイダー固有のエンティティへのポインター。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)