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 ヘッダー ファイルで定義され、次のオプションの組み合わせにすることができます。
フラグ | 説明 |
---|---|
|
最初のレベルではなく、深いクエリを実行します。 |
|
コンテナーのみを返します。 |
|
コンテナーを返さないでください。 |
|
可能であれば、 は結果を距離の順序で返します。 距離のメジャーはプロバイダー固有です。 |
|
名前を lpszServiceInstanceName として取得します。 |
|
lpServiceClassId として型を取得します。 |
|
バージョンを lpVersion として取得します。 |
|
コメントを lpszComment として取得します。 |
|
アドレスを lpcsaBuffer として取得します。 |
|
プライベート データを lpBlob として取得します。 |
|
使用可能なエイリアス情報は WSALookupServiceNext の連続した呼び出しで返され、返される各エイリアスには RESULT_IS_ALIAS フラグが設定されます。 |
|
要求に使用されるクエリ文字列を取得します。 |
|
すべてのLUP_RETURN_* 値を取得するフラグのセット。 |
|
WSALookupServiceNext の dwControlFlags パラメーターの値として使用されます。 このフラグを設定すると、指定したバッファーに対して大きすぎる最後の結果セットを破棄し、次の結果セットに進むようプロバイダーに指示します。 |
|
プロバイダーが情報をキャッシュしている場合は、キャッシュを無視し、名前空間自体に対してクエリを実行します。 |
|
これは、素数応答が構造体のリモート部分とローカル部分のどちらにあるかを示 CSADDR_INFO 。 どちらの場合も、もう一方の部分を使用できる必要があります。 |
[in, out] lpdwBufferLength
入力時に、 lpqsResults が指すバッファーに含まれるバイト数。 出力時に、関数が失敗し、エラーが WSAEFAULT の場合、 lpqsResults がレコードを取得するために渡す最小バイト数が含まれます。
[out] lpqsResults
戻り値の WSAQUERYSET 構造体に 1 つの結果セットが含まれるメモリ ブロックへのポインター。
戻り値
操作が成功した場合、戻り値は 0 です。 それ以外の場合は、SOCKET_ERROR値が返され、 WSAGetLastError を呼び出すことによって特定のエラー番号を取得できます。
エラー コード | 意味 |
---|---|
この呼び出しがまだ処理中に WSALookupServiceEnd の 呼び出しが行われました。 呼び出しはキャンセルされました。 lpqsResults バッファー内のデータは未定義です。 Windows ソケット バージョン 2 では、競合するエラー コードは WSAECANCELLED (10103) と WSA_E_CANCELLED (10111) に対して定義されています。 エラー コード WSAECANCELLED は今後のバージョンで削除され、WSA_E_CANCELLEDのみが残ります。 ただし、Windows ソケット バージョン 2 の場合、アプリケーションは WSAECANCELLED と WSA_E_CANCELLED の両方でチェックし、いずれかを使用する名前空間プロバイダーとの互換性を最も広く確保する必要があります。 | |
使用できるデータはこれ以上ありません。 Windows ソケット バージョン 2 では、競合するエラー コードは WSAENOMORE (10102) と WSA_E_NO_MORE (10110) に対して定義されています。 エラー コード WSAENOMORE は今後のバージョンで削除され、WSA_E_NO_MOREのみが残ります。 ただし、Windows ソケット バージョン 2 の場合は、WSAENOMORE と WSA_E_NO_MORE の両方に対してアプリケーションをチェックして、いずれか 1 つを使用するネームスペース プロバイダーとの互換性を最も広く確保する必要があります。 | |
lpqsResults バッファーが小さすぎて WSAQUERYSET セットを含められなかった。 | |
1 つ以上の必須パラメーターが無効または欠落していました。 | |
指定された参照ハンドルが無効です。 | |
WS2_32.DLL が初期化されていません。 アプリケーションは、Windows ソケット関数を呼び出す前に、まず WSAStartup を呼び出す必要があります。 | |
データベース内で名前が見つかりましたが、指定された制限に一致するデータが見つかりませんでした。 | |
操作を実行するためのメモリが不足していました。 |
解説
この関数で指定された 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 のメンバーの一部が必要です。 WSAQUERYSET の dwSize メンバーは、少なくともバッファーの新しいサイズに設定する必要があります。
クエリ結果
次の表は、 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.1と Windows 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 |