Win32 API 日本語リファレンス
ホーム › Networking.WinSock › LPNSPV2LOOKUPSERVICEBEGIN

LPNSPV2LOOKUPSERVICEBEGIN

コールバック

シグネチャ

INT LPNSPV2LOOKUPSERVICEBEGIN(
    GUID* lpProviderId,
    WSAQUERYSET2W* lpqsRestrictions,
    DWORD dwControlFlags,
    void* lpvClientSessionArg,
    HANDLE* lphLookup
);

パラメーター

フィールド型説明
lpProviderIdGUID*照会するネームスペース サービス プロバイダーの識別子へのポインターです。
lpqsRestrictionsWSAQUERYSET2W*検索条件へのポインターです。「解説」を参照してください。
dwControlFlagsDWORD

検索に影響するフラグのセットです。このパラメーターには、Winsock2.h ヘッダー ファイルで定義されている次の値の組み合わせを指定できます。

値 意味
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
利用可能なエイリアス情報は、 NSPv2LookupServiceNextEx の連続した呼び出しで返され、返される各エイリアスには **RESULT_IS_ALIAS** フラグが設定されます。
LUP_RETURN_QUERY_STRING
0x0800
クエリ文字列を **lpszQueryString** として取得します。
LUP_RETURN_ALL
0x0ff0
名前、種類、バージョン、コメント、アドレス、BLOB、エイリアス、クエリ文字列を含む情報を取得します。
LUP_FLUSHCACHE
0x1000
プロバイダーが情報をキャッシュしている場合でも、そのキャッシュを無視してネームスペース自体に照会します。
LUP_FLUSHPREVIOUS
0x2000

NSPv2LookupServiceNextEx の dwControlFlags パラメーターの値として使用します。このフラグを設定すると、指定されたバッファーには大きすぎた直前の結果セットを破棄し、次の結果セットに進むようプロバイダーに指示します。

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 マップ アドレス) にのみ適用されます。
LUP_DISABLE_IDN_ENCODING
0x800000
ネームスペース プロバイダーが国際化ドメイン名の自動エンコードを無効にすべきであることを示します。

この値は Windows 8 および Windows Server 2012 でサポートされます。

lpvClientSessionArgvoid*クライアント セッションへのポインターです。
lphLookupHANDLE*結果セットを取得するために、以降の NSPv2LookupServiceNextEx の呼び出しで使用するハンドルへのポインターです。

公式ドキュメント

NSPv2LookupServiceBegin 関数は、 WSAQUERYSET2 構造体に含まれる情報によって制約される、ネームスペース バージョン 2 サービス プロバイダーへのクライアント クエリを開始します。

戻り値

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

エラー コード 意味
WSAEINVAL
このプロバイダーにとって、1 つ以上のパラメーターが無効であるか不足していました。
WSANO_DATA
名前はデータベース内で見つかりましたが、解決の対象となる正しい関連データがありません。
WSASERVICE_NOT_FOUND
サービスが不明です。指定されたネームスペース内にサービスが見つかりません。
WSA_NOT_ENOUGH_MEMORY
この操作を実行するのに十分なメモリがありません。

解説(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 の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)