WSALookupServiceBeginA 関数 (winsock2.h)

WSALookupServiceBegin 関数は、WSAQUERYSET 構造体に含まれる情報によって制約されるクライアント クエリを開始します。 WSALookupServiceBegin はハンドルのみを返します。これは、実際の結果を取得するために 、WSALookupServiceNext の後続の呼び出しで使用する必要があります。

構文

INT WSAAPI WSALookupServiceBeginA(
  [in]  LPWSAQUERYSETA lpqsRestrictions,
  [in]  DWORD          dwControlFlags,
  [out] LPHANDLE       lphLookup
);

パラメーター

[in] lpqsRestrictions

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

[in] dwControlFlags

検索の深さを制御するフラグのセット。

dwControlFlags パラメーターでサポートされる値は、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
WSALookupServiceNext を連続して呼び出すと、使用可能なエイリアス情報が返され、返される各エイリアスには RESULT_IS_ALIAS フラグが設定されます。
LUP_RETURN_QUERY_STRING
0x0800
要求に使用されるクエリ文字列を取得します。
LUP_RETURN_ALL
0x0FF0
すべてのLUP_RETURN_* 値を取得するフラグのセット。
LUP_FLUSHPREVIOUS
0x1000
WSALookupServiceNextdwControlFlags パラメーターの値として使用されます。 このフラグを設定すると、指定したバッファーに対して大きすぎる最後の結果セットを破棄し、次の結果セットに進むようプロバイダーに指示します。
LUP_FLUSHCACHE
0x2000
プロバイダーが情報をキャッシュしている場合、キャッシュは無視され、名前空間自体に対してクエリが実行されます。
LUP_RES_SERVICE
0x8000
これは、素応答が構造体のリモート部分とローカル部分のどちらにあるかを示 CSADDR_INFO 。 どちらの場合も、もう 1 つの部分を使用できる必要があります。

[out] lphLookup

結果セットの取得を開始するために WSALookupServiceNext を呼び出すときに使用するハンドル。

戻り値

操作が成功した場合、戻り値は 0 です。 それ以外の場合は、SOCKET_ERROR値が返され、 WSAGetLastError を呼び出すことによって特定のエラー番号を取得できます。

エラー コード 意味
WSA_NOT_ENOUGH_MEMORY
操作を実行するためのメモリが不足していました。
WSAEINVAL
このプロバイダーに対して 1 つ以上のパラメーターが見つからないか無効でした。
WSANO_DATA
データベースで名前が見つかりましたが、指定された制限に一致するデータが見つかりませんでした。
WSANOTINITIALIZED
WS2_32.DLL が初期化されていません。 アプリケーションは、Windows ソケット関数を呼び出す前に、まず WSAStartup を呼び出す必要があります。
WSASERVICE_NOT_FOUND
そのようなサービスは不明です。 指定された名前空間にサービスが見つかりません。

リモート Bluetooth デバイスが見つからなかった場合、Bluetooth サービス検出要求に対してこのエラーが返されます。

注釈

lpqsRestrictions パラメーターは、WSAQUERYSET 構造体を含むバッファーを指します。 WSALookupServiceBegin 関数を呼び出す前に、少なくとも WSAQUERYSETdwSize メンバーをバッファーの長さに設定する必要があります。 アプリケーションでは、 WSAQUERYSET で他のメンバーを指定することで、クエリを制限できます。

ほとんどの場合、特定のトランスポート プロトコルのみに関心があるアプリケーションでは、dwNameSpace メンバー内の名前空間を指定するのではなく、WSAQUERYSETdwNumberOfProtocols メンバーと lpafpProtocols メンバーを使用して、アドレス ファミリとプロトコルによってクエリを制限する必要があります。

サポートされているネットワーク トランスポート プロトコルに関する情報は、EnumProtocolsWSAEnumProtocols、WSCEnumProtocols、または WSCEnumProtocols32 関数を使用して取得できます。

クエリを 1 つの名前空間に制限することもできます。 たとえば、(ローカル ホスト ファイルやその他の名前付けサービスからの結果ではなく) DNS からの結果のみを求めるクエリでは、 dwNameSpace メンバーがNS_DNSに設定されます。 たとえば、bluetooth デバイス検出では 、dwNameSpace メンバーがNS_BTHに設定されます。

アプリケーションでは、 lpNSProviderId メンバーでプロバイダーの GUID へのポインターを指定することで、クエリを特定の名前空間プロバイダーに制限することもできます。

ローカル コンピューター上の名前空間プロバイダーに関する情報は、 WSAEnumNameSpaceProvidersWSAEnumNameSpaceProvidersExWSCEnumNameSpaceProviders32、または WSCEnumNameSpaceProvidersEx32 関数を使用して取得できます。

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

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

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

dwStatus = WSALookupServiceBegin(
      lpqsRestrictions,
      LUP_CONTAINERS,
      lphLookup);

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

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

WSAQUERYSET メンバー クエリの解釈
dwSize sizeof(WSAQUERYSET) に設定する必要があります。 これはバージョン管理メカニズムです。
dwOutputFlags クエリでは無視されます。
lpszServiceInstanceName (省略可能)参照される文字列には、サービス名が含まれています。 文字列内のワイルドカードのセマンティクスは定義されていませんが、特定の名前空間プロバイダーでサポートできます。
lpServiceClassId (必須)サービス クラスに対応する GUID。
lpVersion (省略可能)目的のバージョン番号を参照し、バージョン比較セマンティクスを提供します (つまり、バージョンが正確に一致する必要があります。または、version が指定された値より小さくなければなりません)。
lpszComment クエリでは無視されます。
dwNameSpace

次の「重要な注意事項」を参照してください。

検索を制限する 1 つの名前空間の識別子。またはすべての名前空間を含むようにNS_ALL。
lpNSProviderId (省略可能)特定の名前空間プロバイダーの GUID を参照し、クエリをこのプロバイダーのみに制限します。
lpszContext (省略可能)階層型名前空間内のクエリの開始点を指定します。
dwNumberOfProtocols プロトコル制約配列のサイズは、0 にすることができます。
lpafpProtocols (省略可能) AFPROTOCOLS 構造体の配列を参照します。 これらのプロトコルを利用するサービスのみが返されます。
lpszQueryString (省略可能)一部の名前空間 (whois++など) では、単純なテキスト文字列に含まれるエンリッチされた SQL のようなクエリがサポートされています。 このパラメーターは、その文字列を指定するために使用されます。
dwNumberOfCsAddrs クエリでは無視されます。
lpcsaBuffer クエリでは無視されます。
lpBlob (省略可能)これは、プロバイダー固有のエンティティへのポインターです。
 
大事な ほとんどの場合、特定のトランスポート プロトコルのみに関心があるアプリケーションでは、名前空間ではなくアドレス ファミリとプロトコルによってクエリを制限する必要があります。 これにより、たとえば、TCP/IP サービスを検索する必要があるアプリケーションは、ローカル ホスト ファイル、DNS、NIS などの使用可能なすべての名前空間によってクエリを処理できます。
 
Windows Phone 8:WSALookupServiceBeginW 関数は、Windows Phone 8 以降のWindows Phone ストア アプリでサポートされています。

Windows 8.1およびWindows Server 2012 R2: WSALookupServiceBeginW 関数は、Windows 8.1、Windows Server 2012 R2 以降の Windows ストア アプリでサポートされています。

注意

winsock2.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして WSALookupServiceBegin を定義します。 エンコードに依存しないエイリアスをエンコードニュートラルでないコードと組み合わせて使用すると、コンパイルまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

要件
サポートされている最小のクライアント Windows 8.1、 Windows Vista [デスクトップ アプリ |UWP アプリ]
サポートされている最小のサーバー Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ]
対象プラットフォーム Windows
ヘッダー winsock2.h
Library Ws2_32.lib
[DLL] Ws2_32.dll

こちらもご覧ください

Bluetooth と WSALookupServiceBegin

EnumProtocols

WSAEnumNameSpaceProviders

WSAEnumNameSpaceProvidersEx

WSAEnumProtocols

WSALookupServiceEnd

WSALookupServiceNext

WSAQUERYSET

WSCEnumNameSpaceProviders32

WSCEnumNameSpaceProvidersEx32

WSCEnumProtocols

WSCEnumProtocols32