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

NSPLookupServiceBegin 関数は、WSAQUERYSET 構造体に含まれる情報によって制約される名前サービス プロバイダーのクライアント クエリを開始します。

NSPLookupServiceBegin はハンドルのみを返します。これは、 NSPLookupServiceNext の後続の呼び出しで実際の結果を取得するために使用する必要があります。 この操作は取り消すことができないので、迅速に実行するように実装する必要があります。 ネットワーク クエリを開始することは許容されますが、この関数は正常に返される応答を必要としません。

構文

LPNSPLOOKUPSERVICEBEGIN Lpnsplookupservicebegin;

INT Lpnsplookupservicebegin(
  [in]  LPGUID lpProviderId,
  [in]  LPWSAQUERYSETW lpqsRestrictions,
  [in]  LPWSASERVICECLASSINFOW lpServiceClassInfo,
  [in]  DWORD dwControlFlags,
  [out] LPHANDLE lphLookup
)
{...}

パラメーター

[in] lpProviderId

クエリを実行する名前サービス プロバイダー識別子へのポインター。

[in] lpqsRestrictions

検索条件へのポインター。 「解説」を参照してください。

[in] lpServiceClassInfo

サービスのスキーマ情報を含む WSASERVICECLASSINFO 構造体へのポインター。

[in] dwControlFlags

検索の深さを制御する値。

説明
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
使用可能なエイリアス情報は 、NSPLookupServiceNext の連続した呼び出しで返され、返される各エイリアスには **RESULT_IS_ALIAS** フラグが設定されます。
LUP_RETURN_QUERY_STRING
0x0800
クエリ文字列を **lpszQueryString** として取得します。
LUP_RETURN_ALL
0x0ff0
名前、型、バージョン、コメント、アドレス、BLOB、エイリアス、クエリ文字列などの情報を取得します。
LUP_FLUSHCACHE
0x1000
プロバイダーにキャッシュされた情報がある場合は、キャッシュを無視し、名前空間自体に対してクエリを実行します。
LUP_FLUSHPREVIOUS
0x2000
NSPLookupServiceNextdwControlFlags パラメーターの値として使用されます。 このフラグを設定すると、プロバイダーは、指定されたバッファーに対して大きすぎる最後の結果セットを破棄し、次の結果セットに進むよう指示します。
LUP_NON_AUTHORITATIVE
0x4000
名前空間プロバイダーに、権限のない名前の結果を含める必要があることを示します。
LUP_RES_RESERVICE
0x8000
素数応答が、 CSADDR_INFO 構造体のリモート部分とローカル部分のどちらにあるかを示します。 どちらの場合も、もう一方の部分を使用できる必要があります。 このオプションは、サービス インスタンス要求にのみ適用されます。
LUP_SECURE
0x8000
名前空間プロバイダーがセキュリティで保護されたクエリを使用する必要があることを示します。 このオプションは、名前クエリ要求にのみ適用されます。
LUP_RETURN_PREFERRED_NAMES
0x10000
名前空間プロバイダーが優先名のみを返す必要があることを示します。
LUP_ADDRCONFIG
0x100000
名前空間プロバイダーがアドレス構成を返す必要があることを示します。
LUP_DUAL_ADDR
0x200000
名前空間プロバイダーがデュアル アドレスを返す必要があることを示します。 このオプションは、デュアルモード ソケット (IPv6 および IPv4 にマップされたアドレス) にのみ適用されます。

[out] lphLookup

結果セットを取得するために NSPLookupServiceNext の後続の呼び出しで使用されるハンドルへのポインター。

戻り値

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

エラー コード 意味
WSA_NOT_ENOUGH_MEMORY
この操作を実行するのに十分なメモリがありません。
WSAEINVAL
このプロバイダーに対して、1 つ以上のパラメーターが無効または欠落しています。
WSAEOPNOTSUPP
この操作はサポートされていません。 名前空間プロバイダーがこの関数を実装していない場合、このエラーが返されます。
WSANO_DATA
名前はデータベースで見つかりましたが、解決される適切な関連付けられたデータがありません。
WSASERVICE_NOT_FOUND
サービスが不明です。 指定した名前空間にサービスが見つかりません。

解説

呼び出 しでLUP_CONTAINERS が指定されている場合は、他のすべての制限値を避けてください。 が指定されている場合、名前サービス プロバイダーは、コンテナーに対するこの制限をサポートできるかどうかを決定する必要があります。 そうでない場合は、エラーが返されます。

一部の名前サービス プロバイダーには、コンテナーを検索する他の方法が含まれる場合があります。 たとえば、コンテナーはすべて既知の型、または既知の型のセットである可能性があるため、それらを検索するためのクエリ制限を作成できます。 その他の意味 にかかわらず、名前 サービス プロバイダーがコンテナーを検索するために持っているLUP_CONTAINERSと LUP_NOCONTAINERS が優先されます。 そのため、コンテナーを含むクエリ制限が指定されている場合、 LUP_NOCONTAINERS を指定すると、コンテナー項目が返されなくなります。 同様に、クエリの制限に関係なく、 LUP_CONTAINERS が指定されている場合は、コンテナーのみを返す必要があります。 名前空間がコンテナーをサポートせず、 LUP_CONTAINERS が指定されている場合は、 WSANO_DATAを返す必要があります。

別のコンテナー内のコンテナーを取得する推奨される方法は、 呼び出しです。

dwStatus = NSPLookupServiceBegin(
    lpqsRestrictions,
    LUP_CONTAINERS,
    lphLookup);

NSPLookupServiceNext 呼び出しの必要な数が続きます。 これにより、開始コンテキスト内にすぐに含まれるすべてのコンテナーが返されます。つまり、ディープ クエリではありません。 これにより、階層を歩いてアドレス空間構造をマップできます。たとえば、選択したコンテナーの内容を列挙します。 NSPLookupServiceBegin の後続の使用では、前の呼び出しから返されたコンテナーが使用されます。

クエリの形成

前述のように、 WSAQUERYSET 構造体は、クエリを修飾するために NSPLookupServiceBegin への入力パラメーターとして使用されます。 次の表に 、WSAQUERYSET メンバー名の一覧を示し 、WSAQUERYSET を使用してクエリを作成する方法について説明します。 メンバーが (省略可能) としてマークされている場合は、パラメーターが検索条件として使用されないことを示す null ポインターを指定できます。 詳細については、「 クエリ関連のデータ構造」を参照してください。

WSAQUERYSET メンバー名 クエリの解釈
**Dwsize** sizeof(WSAQUERYSET) に設定されます。 これはバージョン管理メカニズムです。
**dwOutputFlags** クエリでは無視されます。
**lpszServiceInstanceName** 省略可能。 参照される文字列には、サービス名が含まれています。 文字列内のワイルドカードのセマンティクスは定義されていませんが、特定の名前空間プロバイダーでサポートできます。
**lpServiceClassId** 必須。 サービス クラスに対応する GUID。
**lpVersion** 省略可能。 目的のバージョン番号を参照し、バージョン比較セマンティクスを提供します (つまり、バージョンが正確に一致する必要があります。または、version が指定された値より小さくなければなりません)。
**lpszComment** クエリでは無視されます。
**dwNameSpace** 検索を制限する 1 つの名前空間の識別子。すべての名前空間を含めるには **NS_ALL**。
**lpNSProviderId** 省略可能。 特定の名前空間プロバイダーの GUID を参照し、クエリをこのプロバイダーのみに制限します。
**lpszContext** 省略可能。 階層型名前空間のクエリの開始点を指定します。
**dwNumberOfProtocols** プロトコル制約配列内のエントリ数のサイズ (バイト単位) は、0 にすることができます。
**lpafpProtocols** 省略可能。 AFPROTOCOLS 構造体の配列への参照。 これらのプロトコルを使用するサービスのみが返されます。 値 **AF_UNSPEC** は、ワイルドカードを示すプロトコル ファミリ値として表示できます。 名前空間プロバイダーは、アドレス ファミリに関係なく、対応するプロトコルを使用するサービスに関する情報を提供できます。
**lpszQueryString** 省略可能。 一部の名前空間 (whois++など) では、単純なテキスト文字列に含まれる豊富な SQL のようなクエリがサポートされています。 このパラメーターは、その文字列を指定するために使用されます。
**dwNumberOfCsAddrs** クエリでは無視されます。
**lpcsaBuffer** クエリでは無視されます。
**lpBlob** 省略可能。 プロバイダー固有のエンティティへのポインター。

要件

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

関連項目

AFPROTOCOLS

NSPLookupServiceEnd

NSPLookupServiceNext

NSP_ROUTINE

WSAQUERYSET

WSASERVICECLASSINFO

WSASetLastError