WSALookupServiceNextA 関数 (winsock2.h)

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

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

構文

INT WSAAPI WSALookupServiceNextA(
  [in]      HANDLE         hLookup,
  [in]      DWORD          dwControlFlags,
  [in, out] LPDWORD        lpdwBufferLength,
  [out]     LPWSAQUERYSETA lpqsResults
);

パラメーター

[in] hLookup

WSALookupServiceBegin の前の呼び出しから返されたハンドル。

[in] dwControlFlags

操作を制御するフラグのセット。 dwControlFlags パラメーターで WSALookupServiceBegin 関数に渡される値によって、使用可能な条件が決まります。 dwControlFlags パラメーターで WSALookupServiceNext 関数に渡される値は、サービス参照の条件をさらに制限します。

現在、LUP_FLUSHPREVIOUSは、大きすぎる結果セットに対処するための手段として定義されています。 アプリケーションが十分な大きさのバッファーを提供しない (または指定できない) 場合、LUP_FLUSHPREVIOUSを設定すると、プロバイダーは最後の結果セット (大きすぎた) を破棄し、この呼び出しの次のセットに進むよう指示します。

dwControlFlags パラメーターでサポートされている値は Winsock2.h ヘッダー ファイルで定義され、次のオプションの組み合わせにすることができます。

フラグ 説明
LUP_DEEP
0x0001
最初のレベルではなく、深いクエリを実行します。
LUP_CONTAINERS
0x0002
コンテナーのみを返します。
LUP_NOCONTAINERS
0x0004
コンテナーを返さないでください。
LUP_NEAREST
0x0008
可能であれば、 は結果を距離の順序で返します。 距離のメジャーはプロバイダー固有です。
LUP_RETURN_NAME
0x0010
名前を lpszServiceInstanceName として取得します。
LUP_RETURN_TYPE
0x0020
lpServiceClassId として型を取得します。
LUP_RETURN_VERSION
0x0040
バージョンを lpVersion として取得します。
LUP_RETURN_COMMENT
0x0080
コメントを lpszComment として取得します。
LUP_RETURN_ADDR
0x0100
アドレスを lpcsaBuffer として取得します。
LUP_RETURN_BLOB
0x0200
プライベート データを lpBlob として取得します。
LUP_RETURN_ALIASES
0x0400
使用可能なエイリアス情報は WSALookupServiceNext の連続した呼び出しで返され、返される各エイリアスには RESULT_IS_ALIAS フラグが設定されます。
LUP_RETURN_QUERY_STRING
0x0800
要求に使用されるクエリ文字列を取得します。
LUP_RETURN_ALL
0x0FF0
すべてのLUP_RETURN_* 値を取得するフラグのセット。
LUP_FLUSHPREVIOUS
0x1000
WSALookupServiceNextdwControlFlags パラメーターの値として使用されます。 このフラグを設定すると、指定したバッファーに対して大きすぎる最後の結果セットを破棄し、次の結果セットに進むようプロバイダーに指示します。
LUP_FLUSHCACHE
0x2000
プロバイダーが情報をキャッシュしている場合は、キャッシュを無視し、名前空間自体に対してクエリを実行します。
LUP_RES_SERVICE
0x8000
これは、素数応答が構造体のリモート部分とローカル部分のどちらにあるかを示 CSADDR_INFO 。 どちらの場合も、もう一方の部分を使用できる必要があります。

[in, out] lpdwBufferLength

入力時に、 lpqsResults が指すバッファーに含まれるバイト数。 出力時に、関数が失敗し、エラーが WSAEFAULT の場合、 lpqsResults がレコードを取得するために渡す最小バイト数が含まれます。

[out] lpqsResults

戻り値の WSAQUERYSET 構造体に 1 つの結果セットが含まれるメモリ ブロックへのポインター。

戻り値

操作が成功した場合、戻り値は 0 です。 それ以外の場合は、SOCKET_ERROR値が返され、 WSAGetLastError を呼び出すことによって特定のエラー番号を取得できます。

エラー コード 意味
WSA_E_CANCELLED
この呼び出しがまだ処理中に WSALookupServiceEnd の 呼び出しが行われました。 呼び出しはキャンセルされました。 lpqsResults バッファー内のデータは未定義です。 Windows ソケット バージョン 2 では、競合するエラー コードは WSAECANCELLED (10103) と WSA_E_CANCELLED (10111) に対して定義されています。 エラー コード WSAECANCELLED は今後のバージョンで削除され、WSA_E_CANCELLEDのみが残ります。 ただし、Windows ソケット バージョン 2 の場合、アプリケーションは WSAECANCELLED と WSA_E_CANCELLED の両方でチェックし、いずれかを使用する名前空間プロバイダーとの互換性を最も広く確保する必要があります。
WSA_E_NO_MORE
使用できるデータはこれ以上ありません。 Windows ソケット バージョン 2 では、競合するエラー コードは WSAENOMORE (10102) と WSA_E_NO_MORE (10110) に対して定義されています。 エラー コード WSAENOMORE は今後のバージョンで削除され、WSA_E_NO_MOREのみが残ります。 ただし、Windows ソケット バージョン 2 の場合は、WSAENOMORE と WSA_E_NO_MORE の両方に対してアプリケーションをチェックして、いずれか 1 つを使用するネームスペース プロバイダーとの互換性を最も広く確保する必要があります。
WSAEFAULT
lpqsResults バッファーが小さすぎて WSAQUERYSET セットを含められなかった。
WSAEINVAL
1 つ以上の必須パラメーターが無効または欠落していました。
WSA_INVALID_HANDLE
指定された参照ハンドルが無効です。
WSANOTINITIALIZED
WS2_32.DLL が初期化されていません。 アプリケーションは、Windows ソケット関数を呼び出す前に、まず WSAStartup を呼び出す必要があります。
WSANO_DATA
データベース内で名前が見つかりましたが、指定された制限に一致するデータが見つかりませんでした。
WSA_NOT_ENOUGH_MEMORY
操作を実行するためのメモリが不足していました。

解説

この関数で指定された dwControlFlags パラメーターと WSALookupServiceBegin の時点で指定された dwControlFlags パラメーターは、組み合わせの目的で制限として扱われます。 制限は、 WSALookupServiceBegin 時刻と WSALookupServiceNext 時刻の制限の間で組み合わされます。 したがって、WSALookupServiceNext のフラグは、WSALookupServiceBegin で要求されたデータを超えて返されるデータの量を増やすことは決してできません。ただし、フラグの数を増やしたり減らしたりするのはエラーではありません。 指定された WSALookupServiceNext で指定されたフラグは、その呼び出しにのみ適用されます。

dwControlFlags LUP_FLUSHPREVIOUSとLUP_RES_SERVICEは、結合された制限規則の例外です (制限フラグではなく動作フラグであるため)。 これらのフラグのいずれかが WSALookupServiceNext で使用されている場合、 WSALookupServiceBegin での同じフラグの設定に関係なく、定義された効果があります。

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

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

WSALookupServiceNext 関数が WSAEFAULT のエラーで失敗した場合、これは lpqsResults パラメーターが指すバッファーが小さすぎてクエリ結果を格納できなかったことを示します。 WSAQUERYSET の新しいバッファーには、lpdwBufferLength パラメーターによって指される値で指定されたサイズを指定する必要があります。 WSAQUERYSET のこの新しいバッファーには、WSALookupServiceNext 関数を再度呼び出す前に、指定された WSAQUERYSET のメンバーの一部が必要です。 WSAQUERYSETdwSize メンバーは、少なくともバッファーの新しいサイズに設定する必要があります。

クエリ結果

次の表は、 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 各要素内に 1 つの完全なトランスポート アドレスが含まれる、 CSADDR_INFO 構造体の配列へのポインター。
lpBlob (省略可能)これは、プロバイダー固有のエンティティへのポインターです。
 

Windows Phone 8:WSALookupServiceNextW 関数は、Windows Phone 8 以降Windows Phoneストア アプリでサポートされています。

Windows 8.1Windows Server 2012 R2: WSALookupServiceNextW 関数は、Windows 8.1、Windows Server 2012 R2 以降の Windows ストア アプリでサポートされています。

Note

winsock2.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして WSALookupServiceNext を定義します。 encoding-neutral エイリアスの使用を encoding-neutral ではないコードと混在すると、コンパイル エラーまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

   
サポートされている最小のクライアント Windows 8.1、Windows Vista [デスクトップ アプリ |UWP アプリ]
サポートされている最小のサーバー Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ]
対象プラットフォーム Windows
ヘッダー winsock2.h
Library Ws2_32.lib
[DLL] Ws2_32.dll

関連項目

Bluetooth と WSALookupServiceNext

WSALookupServiceBegin

WSALookupServiceEnd

WSAQUERYSET

Winsock 関数

Winsock リファレンス