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
検索の深さを制御する値。
値 | 説明 |
---|---|
|
最初のレベルではなく、プロバイダーの階層を照会します。 |
|
コンテナーのみを返します。 |
|
コンテナーを返しません。 |
|
可能であれば、 は結果を距離の順序で返します。 距離のメジャーはプロバイダー固有です。 |
|
名前を **lpszServiceInstanceName** として取得します。 |
|
型を **lpServiceClassId** として取得します。 |
|
バージョンを **lpVersion** として取得します。 |
|
コメントを **lpszComment** として取得します。 |
|
アドレスを **lpcsaBuffer** として取得します。 |
|
プライベート データを **lpBlob** として取得します。 |
|
使用可能なエイリアス情報は 、NSPLookupServiceNext の連続した呼び出しで返され、返される各エイリアスには **RESULT_IS_ALIAS** フラグが設定されます。 |
|
クエリ文字列を **lpszQueryString** として取得します。 |
|
名前、型、バージョン、コメント、アドレス、BLOB、エイリアス、クエリ文字列などの情報を取得します。 |
|
プロバイダーにキャッシュされた情報がある場合は、キャッシュを無視し、名前空間自体に対してクエリを実行します。 |
|
NSPLookupServiceNext の dwControlFlags パラメーターの値として使用されます。 このフラグを設定すると、プロバイダーは、指定されたバッファーに対して大きすぎる最後の結果セットを破棄し、次の結果セットに進むよう指示します。 |
|
名前空間プロバイダーに、権限のない名前の結果を含める必要があることを示します。 |
|
素数応答が、 CSADDR_INFO 構造体のリモート部分とローカル部分のどちらにあるかを示します。 どちらの場合も、もう一方の部分を使用できる必要があります。 このオプションは、サービス インスタンス要求にのみ適用されます。 |
|
名前空間プロバイダーがセキュリティで保護されたクエリを使用する必要があることを示します。 このオプションは、名前クエリ要求にのみ適用されます。 |
|
名前空間プロバイダーが優先名のみを返す必要があることを示します。 |
|
名前空間プロバイダーがアドレス構成を返す必要があることを示します。 |
|
名前空間プロバイダーがデュアル アドレスを返す必要があることを示します。 このオプションは、デュアルモード ソケット (IPv6 および IPv4 にマップされたアドレス) にのみ適用されます。 |
[out] lphLookup
結果セットを取得するために NSPLookupServiceNext の後続の呼び出しで使用されるハンドルへのポインター。
戻り値
ルーチンが成功した場合、関数は NO_ERROR (ゼロ) を返す必要があります。 ルーチン が 失敗し、 WSASetLastError を使用して適切なエラー コードを設定する必要がある場合は、SOCKET_ERROR (-1) を返す必要があります。
エラー コード | 意味 |
---|---|
この操作を実行するのに十分なメモリがありません。 | |
このプロバイダーに対して、1 つ以上のパラメーターが無効または欠落しています。 | |
この操作はサポートされていません。 名前空間プロバイダーがこの関数を実装していない場合、このエラーが返されます。 | |
名前はデータベースで見つかりましたが、解決される適切な関連付けられたデータがありません。 | |
サービスが不明です。 指定した名前空間にサービスが見つかりません。 |
解説
呼び出 しで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 |