次の方法で共有


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
WSALookupServiceNextの dwControlFlags パラメーター 値として使用されます。 このフラグを設定すると、指定したバッファーに対して大きすぎる最後の結果セットを破棄し、次の結果セットに進むようプロバイダーに指示します。
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 メンバー内の名前空間を指定するのではなく、dwNumberOfProtocolslpafpProtocolsWSAQUERYSET のメンバーを使用して、アドレス ファミリとプロトコルによってクエリを制限する必要があります。

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

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

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

ローカル コンピューター上の名前空間プロバイダーに関する情報は、WSAEnumNameSpaceProvidersEx 、WSAEnumNameSpaceProvidersEx、WSCEnumNameSpaceProviders32、または 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 ポインターを指定できます。これは、パラメーターが検索条件として使用されないことを示します。 詳細については、「データ構造 Query-Related セクション」を参照してください。

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

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

検索を制限する単一の名前空間の識別子。またはすべての名前空間を含める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 アプリ]
ターゲット プラットフォーム の ウィンドウズ
ヘッダー winsock2.h
ライブラリ Ws2_32.lib
DLL Ws2_32.dll

関連項目

Bluetooth と WSALookupServiceBegin

EnumProtocols の

WSAEnumNameSpaceProviders の

WSAEnumNameSpaceProvidersEx の

WSAEnumProtocols の

WSALookupServiceEnd を する

WSALookupServiceNext の

WSAQUERYSET の

WSCEnumNameSpaceProviders32 の

WSCEnumNameSpaceProvidersEx32 の

WSCEnumProtocols の

WSCEnumProtocols32 の