LPNSPV2LOOKUPSERVICENEXTEX コールバック関数 (ws2spi.h)

NSPv2LookupServiceNextEx 関数は、名前空間バージョン 2 サービス プロバイダーから要求された情報を取得するために、NSPv2LookupServiceBegin の以前の呼び出しからハンドルを取得した後に呼び出されます。

構文

LPNSPV2LOOKUPSERVICENEXTEX Lpnspv2lookupservicenextex;

void Lpnspv2lookupservicenextex(
  [in]      HANDLE hAsyncCall,
  [in]      HANDLE hLookup,
  [in]      DWORD dwControlFlags,
  [in, out] LPDWORD lpdwBufferLength,
  [out]     LPWSAQUERYSET2W lpqsResults
)
{...}

パラメーター

[in] hAsyncCall

非同期呼び出しに使用された NSPv2LookupServiceBegin の前の呼び出しから返されたハンドル。

[in] hLookup

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

[in] dwControlFlags

次の操作を制御するために使用されるフラグ。 現在、 LUP_FLUSHPREVIOUS のみが、大きすぎる結果セットを処理する手段として定義されています。 アプリケーションが十分な大きさのバッファーを指定できない場合は、 LUP_FLUSHPREVIOUS を設定すると、プロバイダーに対して、最後の結果セットを破棄するように指示されます。この結果セットは大きすぎます。この呼び出しの次のセットに移動します。

[in, out] lpdwBufferLength

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

[out] lpqsResults

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

戻り値

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

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

Windows ソケット 2 では、競合するエラー コードは WSAECANCELLED (10103) と WSA_E_CANCELLED (10111) に対して定義されています。エラー コード WSAECANCELLED は今後のバージョンで削除され、WSA_E_CANCELLEDのみが残ります。 名前空間プロバイダーは、 WSA_E_CANCELLED エラー コードを使用して、可能な限り幅広いアプリケーションとの互換性を維持する必要があります。

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

Windows ソケット 2 では、競合するエラー コードは WSAENOMORE (10102) と WSA_E_NO_MORE (10110) に対して定義されています。エラー コード WSAENOMORE は今後のバージョンで削除され、WSA_E_NO_MOREのみが残ります。 名前空間プロバイダーは、 WSA_E_NO_MORE エラー コードを使用して、可能な限り幅広いアプリケーションとの互換性を維持する必要があります。

WSAEFAULT
lpqsResults バッファーが小さすぎて WSAQUERYSET セットを含められなかった。
WSAEINVAL
このプロバイダーに対して 1 つ以上のパラメーターが無効であるか、存在しません。
WSA_INVALID_HANDLE
指定された参照ハンドルが無効です。
WSANO_DATA
データベース内に名前が見つかりましたが、指定された制限に一致するデータが見つかりませんでした。
WSASERVICE_NOT_FOUND
サービスが不明です。 指定した名前空間にサービスが見つかりません。
WSA_NOT_ENOUGH_MEMORY
この操作を実行するのに十分なメモリがありません。

解説

NSPv2LookupServiceNextEx 関数は、Windows Vista 以降で使用できる名前空間サービス プロバイダー バージョン 2 (NSPv2) アーキテクチャの一部として使用されます。

Windows Vista および Windows Server 2008 では、 NSPv2LookupServiceNextEx 関数は、NS_EMAIL名前空間プロバイダーでの操作にのみ使用できます。

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

この関数で指定された dwControlFlags と NSPv2LookupServiceBegin の時点で指定された dwControlFlags は、組み合わせの目的で "制限" として処理されます。 制限は、 NSPv2LookupServiceBegin 時刻と NSPv2LookupServiceNextEx 時刻の制限の間で組み合わされます。 したがって、 NSPv2LookupServiceNextEx のフラグは、 NSPv2LookupServiceBegin で要求されたデータを超えて返されるデータの量を増やすことは決してできませんが、多かれ少なかれフラグを指定するエラーではありません。 指定された NSPv2LookupServiceNextEx で指定されたフラグは、その呼び出しにのみ適用されます。

dwControlFlagsLUP_FLUSHPREVIOUSLUP_RES_SERVICEは、結合された制限規則の例外です (これらは "制限" フラグではなく動作フラグであるため)。 NSPv2LookupServiceNextEx でいずれかのフラグが使用されている場合、NSPv2LookupServiceBegin での同じフラグの設定に関係なく、それらのフラグは定義された効果を持ちます。

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

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

NSPv2LookupServiceNextEx 関数は通常、少なくとも 2 回呼び出されます。 lpqsResults パラメーターが指すWSAQUERYSET2を受け取るために必要なバッファーのサイズを初めて取得し、2 回目は実際のクエリ結果セットを取得します。 最初の呼び出しでは、NSPv2 プロバイダーは 、WSAQUERYSET2 結果に必要なサイズを返す必要があります。

返される lpqsResults パラメーターによって指されるWSAQUERYSET2構造体は、同じプロセス コンテキストでのみ役立ちます。これは、WSAQUERYSET2構造体内のいくつかのメンバーに、返される実際のデータへのポインターが含まれるためです。 クエリ結果を別のプロセス (RPC などを使用) に渡す必要がある場合は、lpqsResults パラメーターによって指されるWSAQUERYSET2構造体で返されたデータをシリアル化してマーシャリングし、WSAQUERYSET2構造体のメンバーが指すデータを含める必要があります。 データは、プロセスの境界を越えて渡すことができる形式でシリアル化する必要があります。 データへのポインターのみが渡され、実際のデータが他のプロセスに使用できなくなるため、 WSAQUERYSET2 構造体のコピーを渡すだけでは不十分です。

クエリ結果

次の表 に、WSAQUERYSET2 の一覧と、**WSAQUERYSET2** 構造体でのクエリ結果の表現方法について説明します。 詳細については、「 クエリ関連のデータ構造」を参照してください。
メンバー名WSAQUERYSET2 結果の解釈
**Dwsize** WSAQUERYSET2構造体のサイズ (バイト単位)。 これは、バージョン管理メカニズムとして使用されます。
**lpszServiceInstanceName** サービス名を含む文字列。
**lpVersion** 特定のサービス インスタンスのバージョン番号を参照します。
**lpszComment** サービス インスタンスによって提供されるコメント文字列。 このメンバーは省略可能であり、NSPv2 サービス プロバイダーの要件に応じて異なります。
**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 構造体の配列へのポインター。
**dwOutputFlags** **RESULT_IS_ALIAS** フラグは、これがエイリアスの結果であることを示します。
**lpBlob** プロバイダー固有のエンティティへのポインター。 このメンバーは、NSPv2 サービス プロバイダーの要件に応じて省略可能です。

要件

   
サポートされている最小のクライアント Windows Vista [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2008 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー ws2spi.h

関連項目

CSADDR_INFO

NSPV2_ROUTINE

NSPv2Cleanup

NSPv2ClientSessionRundown

NSPv2LookupServiceBegin

NSPv2LookupServiceEnd

NSPv2SetServiceEx

NSPv2Startup

WSAQUERYSET2

WSASetLastError