LPNSPV2LOOKUPSERVICEBEGIN
コールバックシグネチャ
INT LPNSPV2LOOKUPSERVICEBEGIN(
GUID* lpProviderId,
WSAQUERYSET2W* lpqsRestrictions,
DWORD dwControlFlags,
void* lpvClientSessionArg,
HANDLE* lphLookup
);パラメーター
| フィールド | 型 | 説明 | ||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| lpProviderId | GUID* | 照会するネームスペース サービス プロバイダーの識別子へのポインターです。 | ||||||||||||||||||||||||||||||||||||||||||||||
| lpqsRestrictions | WSAQUERYSET2W* | 検索条件へのポインターです。「解説」を参照してください。 | ||||||||||||||||||||||||||||||||||||||||||||||
| dwControlFlags | DWORD | 検索に影響するフラグのセットです。このパラメーターには、Winsock2.h ヘッダー ファイルで定義されている次の値の組み合わせを指定できます。
| ||||||||||||||||||||||||||||||||||||||||||||||
| lpvClientSessionArg | void* | クライアント セッションへのポインターです。 | ||||||||||||||||||||||||||||||||||||||||||||||
| lphLookup | HANDLE* | 結果セットを取得するために、以降の NSPv2LookupServiceNextEx の呼び出しで使用するハンドルへのポインターです。 |
公式ドキュメント
NSPv2LookupServiceBegin 関数は、 WSAQUERYSET2 構造体に含まれる情報によって制約される、ネームスペース バージョン 2 サービス プロバイダーへのクライアント クエリを開始します。
戻り値
ルーチンが成功した場合、この関数は NO_ERROR (ゼロ) を返します。ルーチンが失敗した場合は SOCKET_ERROR (つまり 1) を返し、 WSASetLastError を使用して適切なエラー コードを設定する必要があります。
| エラー コード | 意味 |
|---|---|
| このプロバイダーにとって、1 つ以上のパラメーターが無効であるか不足していました。 | |
| 名前はデータベース内で見つかりましたが、解決の対象となる正しい関連データがありません。 | |
| サービスが不明です。指定されたネームスペース内にサービスが見つかりません。 | |
| この操作を実行するのに十分なメモリがありません。 |
解説(Remarks)
NSPv2LookupServiceBegin 関数は、Windows Vista 以降で利用できるネームスペース サービス プロバイダー バージョン 2 (NSPv2) アーキテクチャの一部として使用されます。
Windows Vista および Windows Server 2008 では、NSPv2LookupServiceBegin 関数は NS_EMAIL ネームスペース プロバイダーに対する操作にのみ使用できます。
<a href="/windows/desktop/api/ws2spi/nc-ws2spi-lpnsplookupservicebegin">NSPv2LookupServiceBegin</a> 関数はハンドルのみを返します。実際の結果を取得するには、以降の
NSPv2LookupServiceNextEx の呼び出しでこのハンドルを使用します。この操作は取り消せないため、短時間で実行されるように実装してください。ネットワーク クエリを開始することは差し支えありませんが、この関数は正常に復帰するために応答を待つ必要がないようにしてください。
NSPv2Startup 関数は、新しいクライアント プロセスがネームスペース プロバイダーの使用を開始するたびに呼び出されます。プロバイダーは、ppvClientSessionArg パラメーターが指すクライアント セッション引数を使用して、このセッションに関する情報を格納できます。NSPv2Startup 関数の呼び出しでクライアント セッション引数に値が指定されていた場合、同じクライアント セッション引数が NSPv2LookupServiceBegin 関数の lpvClientSessionArg パラメーターに渡されます。
呼び出しで LUP_CONTAINERS を指定する場合は、他のすべての制限値を指定しないでください。指定された場合、ネーム サービス プロバイダーは、コンテナーに対してその制限をサポートできるかどうかを判断する必要があります。サポートできない場合は、エラーを返す必要があります。
ネーム サービス プロバイダーによっては、コンテナーを見つけるための別の手段を備えている場合があります。たとえば、コンテナーがすべて何らかの既知の種類、または既知の種類の集合に属していることがあり、その場合はそれらを見つけるためのクエリ制限を作成できます。ネーム サービス プロバイダーがコンテナーを特定するために他にどのような手段を持っていても、LUP_CONTAINERS と LUP_NOCONTAINERS が優先されます。したがって、コンテナーを含むクエリ制限が指定されていても、LUP_NOCONTAINERS を指定すればコンテナー項目は返されません。同様に、クエリ制限がどのようなものであっても、LUP_CONTAINERS が指定されていればコンテナーのみを返す必要があります。ネームスペースがコンテナーをサポートしておらず、LUP_CONTAINERS が指定された場合は、WSANO_DATA を返す必要があります。
別のコンテナー内にあるコンテナーを取得するための推奨される方法は、次の呼び出しです。
dwStatus = NSPv2LookupServiceBegin(
lpProviderId,
lpqsRestrictions,
LUP_CONTAINERS,
lpClientSession,
lphLookup);
これに続けて、必要な回数だけ NSPv2LookupServiceNextEx を呼び出します。これにより、開始コンテキストの直下に含まれるすべてのコンテナーが返されます。つまり、階層を深くたどるクエリではありません。これを利用すると、階層をたどってアドレス空間の構造をマッピングし、必要に応じて選択したコンテナーの内容を列挙できます。以降の NSPv2LookupServiceBegin の呼び出しでは、前回の呼び出しで返されたコンテナーを使用します。
クエリの作成
WSAQUERYSET2 構造体は、クエリを限定するために NSPv2LookupServiceBegin の入力パラメーターとして使用されます。次の表は、WSAQUERYSET2 のメンバー名と、クエリを構築するために WSAQUERYSET2 がどのように使用されるかを示しています。省略可能であり NSPv2 プロバイダーの要件に依存すると記載されているメンバーは、ネームスペース プロバイダーが検索条件として使用しない場合、NULL ポインターとして指定できます。詳細については、クエリ関連のデータ構造を参照してください。
| WSAQUERYSET2 のメンバー名 | クエリでの解釈 |
|---|---|
| **dwSize** | sizeof(WSAQUERYSET2) に設定されます。これはバージョン管理の仕組みです。 |
| **lpszServiceInstanceName** | サービス名を含む文字列です。文字列内でのワイルドカードの意味は定義されていませんが、特定のネームスペース プロバイダーではサポートされる場合があります。このメンバーは省略可能であり、NSPv2 サービス プロバイダーの要件に依存します。 |
| **lpVersion** | バージョン比較の意味 (バージョンが完全に一致しなければならない、または指定された値以上でなければならない) を伴う、必要なバージョン番号です。このメンバーは省略可能であり、NSPv2 サービス プロバイダーの要件に依存します。 |
| **lpszComment** | このメンバーはクエリでは無視されます。 |
| **dwNameSpace** | 検索対象を限定する単一のネームスペースの識別子、またはすべてのネームスペースを対象とする **NS_ALL** です。 |
| **lpNSProviderId** | クエリをそのプロバイダーのみに限定する、特定のネームスペース プロバイダーの GUID です。このメンバーは省略可能であり、NSPv2 サービス プロバイダーの要件に依存します。 |
| **lpszContext** | 階層型ネームスペースにおけるクエリの開始点です。このメンバーは省略可能であり、NSPv2 サービス プロバイダーの要件に依存します。 |
| **dwNumberOfProtocols** | プロトコル制約配列のエントリ数のサイズ (バイト単位) です。このメンバーは 0 でもかまいません。 |
| **lpafpProtocols** | AFPROTOCOLS 構造体の配列です。これらのプロトコルを使用するサービスのみが返されます。プロトコル ファミリの値として **AF_UNSPEC** を指定することもでき、これはワイルドカードを意味します。ネームスペース プロバイダーは、アドレス ファミリに関係なく、対応するプロトコルを使用する任意のサービスに関する情報を提供できます。このメンバーは省略可能であり、NSPv2 サービス プロバイダーの要件に依存します。 |
| **lpszQueryString** | ネームスペースによっては (whois++ など)、単純なテキスト文字列に含まれる SQL のような高機能なクエリをサポートします。このパラメーターは、その文字列を指定するために使用します。このメンバーは省略可能であり、NSPv2 サービス プロバイダーの要件に依存します。 |
| **dwNumberOfCsAddrs** | このメンバーはクエリでは無視されます。 |
| **lpcsaBuffer** | このメンバーはクエリでは無視されます。 |
| **dwOutputFlags** | このメンバーはクエリでは無視されます。 |
| **lpBlob** | プロバイダー固有のエンティティへのポインターです。このメンバーは省略可能であり、NSPv2 サービス プロバイダーの要件に依存します。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)