Bluetooth und WSALookupServiceBegin für die Dienstermittlung

Um das Vorhandensein eines bestimmten Diensts auf einem Bluetooth-Server zu finden, verwenden Clients die Funktionen WSALookupServiceBegin, WSALookupServiceNextund WSALookupServiceEnd. Abfragen können für lokale adressen und Remoteadressen ausgeführt werden, verbindungen können jedoch nur mit Remoteadressen hergestellt werden. Während dieses Vorgangs gefundene Diensthandles können nicht zum Löschen des Diensts über WSASetService verwendet werden. Loopback wird von RFCOMM nicht unterstützt.

Zwei grundlegende Typen von Dienstermittlungsabfragen können ausgeführt werden:

  • Abfragen für einen oder mehrere Dienste auf dem lokalen Gerät
  • Abfragen für einen oder mehrere Dienste auf einem angegebenen Peergerät

Die WSALookupServiceBegin-Funktion empfängt eine WSAQUERYSET-Struktur in ihrem lpqsRestrictions-Parameter. WSALookupServiceBegin führt eine Clientabfrage basierend auf dem Satz von Sucheinschränkungen aus, die das WSAQUERYSET enthält. Bluetooth clients müssen die in der folgenden Tabelle aufgeführten Einschränkungen in der WSAQUERYSET-Struktur angeben, wenn die WSALookupServiceBegin-Funktion zum Abfragen von Diensten verwendet wird.

WSAQUERYSET-Member Einschränkung
dwSize Legen Sie auf sizeof(WSAQUERYSET ) fest.
lpServiceClassId Legen Sie auf die spezifischste Bluetooth UUID fest, die verwendet werden kann, um den Bereich der Abfrage zu bestimmen. Wenn Sie beispielsweise lpServiceClassId auf die UUID des L2CAP-Protokolls festlegen, werden alle L2CAP-Dienste zurückgegeben, und im Wesentlichen werden alle SD-Datensätze auf dem Ziel aufzählt. Durch Festlegen der UUID auf einen bestimmten Dienst werden jedoch nur die Instanzen dieses Diensts zurückgegeben.
dwNameSpace Legen Sie auf NS _ BTH fest.
dwNumberOfCsAddrs Auf 0 festlegen.
lpszContext Legen Sie auf die Bluetooth-Geräteadresse fest, mit der sie eine SDP-Verbindung herstellen können, um die Abfrage von Diensten auszuführen. Dieser Member muss eine Zeichenfolge sein, die mithilfe der WSAAddressToString-Funktion konvertiert wird. Wenn die lokale Funkadresse angegeben wird, werden die lokalen SDP-Datensätze durchsucht.
Andere Mitglieder Alle anderen Member der WSAQUERYSET-Struktur werden ignoriert.

Die SDP-Verbindung mit dem Remotegerät bleibt nicht aktiv, nachdem die WSALookupServiceBegin-Funktion eine Dienstabfrage abgeschlossen hat. Die Verbindung wird beendet, bevor WSALookupServiceBegin zurückgegeben wird. Anwendungen, die erfordern, dass die SDP-Verbindung nach Abschluss einer Dienstabfrage aktiv bleibt, sollten die Dienstklasse UUID angeben, mit der eine Verbindung hergestellt werden soll, indem der serviceClassId-Member der SOCKADDR-BTH-Struktur _ verwendet wird, wenn der Windows Sockets Connect-Funktionsaufruf ausgeführt wird.

Die in der folgenden Tabelle aufgeführten Flags werden im dwControlFlags-Parameter der Funktionen WSALookupServiceBegin und WSALookupServiceNext verwendet, um die Abfrageergebnisse zu steuern. Die FLAGs LUP _ CONTAINERS und LUP _ FLUSHCACHE werden von der WSALookupServiceBegin-Funktion verwendet. Die restlichen Flags werden in Aufrufen der WSALookupServiceNext-Funktion verwendet.

Flag Ergebnis
LUP_CONTAINERS Darf nicht festgelegt werden.
LUP_FLUSHCACHE Anwendungen sollten in der Regel LUP_FLUSHCACHE. Dieses Flag weist das System an, alle zwischengespeicherten Informationen zu ignorieren und eine over-the-air-SDP-Verbindung mit dem angegebenen Gerät herzustellen, um die SDP-Suche durchzuführen. Dieser nicht zwischengespeicherte Vorgang kann einige Sekunden dauern (während eine zwischengespeicherte Suche schnell zurückgegeben wird). Bluetooth derzeit weder proaktiv SDP-Datensätze von Geräten in der Nähe zwischenspeichert noch vorherige Abfragen aggressiv zwischenspeichert. Daher sollten Anwendungen davon ausgehen, dass Abfragen möglicherweise keine Ergebnisse zurückgeben (mit dem Fehlercode WSASERVICE_NOT_FOUND), wenn LUP_FLUSHCACHE angegeben ist. Die zwischengespeicherten Daten, die mithilfe der Windows Sockets-Schnittstelle verfügbar sind, können in Zukunft erweitert werden.
LUP_RES_SERVICE Gibt Informationen zur lokalen Bluetooth zurück. Dieses Flag hat nur dann Auswirkungen, wenn LUP_RETURN_ADDR angegeben wird.
LUP_RETURN_NAME Gibt den Anzeigenamen des Diensts im lpszServiceInstanceName-Member der WSAQUERYSET-Struktur für jeden Aufruf der WSALookupServiceNext-Funktion zurück.
LUP_RETURN_TYPE Gibt die Dienstklassen-ID im lpServiceClassId-Member der WSAQUERYSET-Struktur zurück.
[!Note]
Die Verwendung dieses Flags gilt nur für die WSALookupServiceBegin-Funktion. Dieser Wert ist für WSALookupServiceNext immer 0 (null).

LUP_RETURN_ADDR Gibt eine Adresse im lpcsaBuffer-Member zurück, die mit Connect-Funktionsaufrufen verwendet werden soll. Die zurückgegebene Adresse enthält die Portnummer.
LUP_RETURN_BLOB Gibt die übereinstimmenden SD-Datensätze im lpBlob-Member zurück, die gemäß Bluetooth SDP-Datensatzspezifikation formatiert sind.
LUP_RETURN_ALL Gibt alle Informationen der oben genannten Flags zurück.
LUP_RETURN_COMMENT Gibt die Dienstbeschreibung im lpszComment-Member der WSAQUERYSET-Struktur für jeden Aufruf der WSALookupServiceNext-Funktion zurück.
LUP_FLUSHPREVIOUS Überspringen Sie den nächsten verfügbaren Datensatz, und geben Sie den folgenden Datensatz zurück.

Erweiterte Dienstabfragen

Die im vorherigen Abschnitt beschriebenen Abfragevorgänge können verwendet werden, um alle Ergebnisse einer einzelnen GUID zurück zu geben, was für die meisten Anwendungen ausreichend sein sollte. Eine erweiterte Abfrage ermöglicht es einer Anwendung, eine spezifischere Abfrage zu erstellen. sie bietet die Möglichkeit, UUIDs und Attribute in zurückgegebenen Informationen zu finden.

Zum Ausführen einer erweiterten Abfrage für Dienste müssen Bluetooth-Clients die folgenden Einschränkungen in der WSAQUERYSET-Struktur angeben, die an den lpqsRestrictions-Parameter übergeben wird.

WSAQUERYSET-Member Einschränkung
dwSize Legen Sie auf sizeof(WSAQUERYSET ) fest.
lpszContext Legen Sie auf die Bluetooth-Geräteadresse fest, mit der sie eine SDP-Verbindung herstellen können, um die Abfrage von Diensten auszuführen. Dieser Member muss eine Zeichenfolge sein, die mithilfe der WSAAddressToString-Funktion konvertiert wird. Wenn die lokale Funkadresse angegeben wird, werden die lokalen SDP-Datensätze durchsucht.
lpBlob.pBlobData Zeiger auf eine BTH _ QUERY _ SERVICE-Struktur, die alle Parameter enthält, die die Ergebnisse der Abfrage einschränken.
dwNameSpace Legen Sie auf NS _ BTH fest.
Andere Mitglieder Alle anderen Member der WSAQUERYSET-Struktur werden ignoriert.

Die folgenden Flags werden im dwControlFlags-Parameter von WSALookupServiceBegin übergeben, um die Ergebnisse einer erweiterten Abfrage zu steuern.

Flag Ergebnis
_LUP-CONTAINER Darf nicht festgelegt werden.
LUP _ FLUSHCACHE Anwendungen sollten im Allgemeinen LUP _ FLUSHCACHE angeben. Dieses Flag weist das System an, alle zwischengespeicherten Informationen zu ignorieren und eine over-the-air-SDP-Verbindung mit dem angegebenen Gerät herzustellen, um die SDP-Suche durchzuführen. Dieser nicht zwischengespeicherte Vorgang kann einige Sekunden dauern (während eine zwischengespeicherte Suche schnell zurückgegeben wird). Bluetooth SDP-Datensätze von Geräten in der Nähe werden nicht proaktiv zwischengespeichert, und vorherige Abfragen werden auch nicht aggressiv zwischengespeichert. Daher sollten Anwendungen erwarten, dass Abfragen häufig keine Ergebnisse zurückgeben (WSASERVICE _ NOT _ FOUND), wenn LUP _ FLUSHCACHE nicht angegeben ist. Die zwischengespeicherten Daten, die mithilfe der Windows Sockets-Schnittstelle verfügbar sind, können in Zukunft erweitert werden.
LUP _ _ RES-DIENST Gibt Informationen für die lokale Bluetooth zurück. Das Festlegen dieses Flags hat nur dann Auswirkungen, wenn LUP _ RETURN _ ADDRR ebenfalls angegeben ist.
_LUP-RÜCKGABENAME _ Gibt den Anzeigenamen des Diensts zurück. Dieses Flag wird für SDP _ SERVICE SEARCH _ REQUEST _ ignoriert.
_LUP-RÜCKGABETYP _ Gibt die Dienstklassen-ID zurück. Dieses Flag wird für SDP _ SERVICE SEARCH _ REQUEST _ ignoriert.
_ _ LUP-RÜCKGABE-ADDR Gibt eine Adresse im lpcsaBuffer-Member zurück, die mit Connect-Funktionsaufrufen verwendet werden soll. Die zurückgegebene Adresse enthält die Portnummer. Dieses Flag wird für SDP _ SERVICE SEARCH _ REQUEST _ ignoriert.
_ _ LUP-RÜCKGABEBLOB Geben Sie die übereinstimmenden SD-Datensätze in einem Format zurück, das der Bluetooth SDP-Datensatzspezifikation entspricht. Für SDP _ SERVICE SEARCH _ _ REQUEST ist das Ergebnis in lpBlob für den nachfolgenden Aufruf von WSALookupServiceNext ein Array Bluetooth SDP-Handles. Für SDP _ SERVICE ATTRIBUTE _ _ REQUEST und SDP SERVICE SEARCH ATTRIBUTE _ _ _ _ REQUEST ist das Ergebnis für jeden nachfolgenden Aufruf von WSALookupServiceNext ein binärer Bluetooth-SDP-Datensatz, dessen Attribute auf die vom pRange-Member der Abfrage angegebenen beschränkt sind. Dieses Flag ist für SDP _ SERVICE SEARCH _ REQUEST _ erforderlich.
_ _ LUP-RÜCKGABEKOMMENTAR Gibt die Dienstbeschreibung im lpszComment-Member der WSAQUERYSET-Struktur für jeden Aufruf der WSALookupServiceNext-Funktion zurück.
LUP _ FLUSHPREVIOUS Überspringen Sie den nächsten verfügbaren Datensatz, und geben Sie den folgenden Datensatz zurück.

Bei der Eingabe verweist lpBlob -> pBlobData auf eine BTH QUERY _ _ SERVICE-Struktur, die die in der folgenden Tabelle aufgeführten Werte enthält.

Hinweis

Die erste Suchanforderung muss in ein L2CAP-Paket passen können. Die Antwort kann jedoch in viele L2CAP-Pakete zerbrochen werden.

Member Wert
type Typ der durchzuführenden Suche. Dieser Wert kann SDP SERVICE _ SEARCH _ _ REQUEST, SDP SERVICE ATTRIBUTE _ _ _ REQUEST oder SDP SERVICE SEARCH ATTRIBUTE _ _ REQUEST _ _ sein. Jeder Suchtyp ist einem zugrunde liegenden Suchmechanismus zugeordnet, der durch die Bluetooth SDP-Spezifikation definiert wird. Jede Rückgabe wird in der Form angezeigt, die von der WSAQUERYSET-Struktur beschrieben wird, die weiter oben in diesem Abschnitt (Erweiterte Dienstabfragen) definiert wurde.
serviceHandle Wird für Attributsuchen verwendet. Dieser Wert gibt das Diensthand handle an, mit dem die Attribute im pRange-Element abfragen werden.
Uuids Wird für Dienst- und serviceAttribute-Suchvorgänge verwendet. Dieser Wert gibt die UUIDs an, die ein Datensatz enthalten muss, um mit der Suche zu übereinstimmen. Wenn weniger als MAX _ UUIDS _ IN QUERY-UUIDs _ abgefragt werden sollen, legt dieser Wert das SdpQueryUuid-Element, das unmittelbar auf die letzte gültige UUID folgt, auf alle Nullen fest.
numRange Wird für Attribut- und serviceAttribute-Suchvorgänge verwendet. Dieser Wert gibt die Anzahl der Elemente in pRange an.
Prange Wird für Attribut- und serviceAttribute-Suchvorgänge verwendet. Dieser Wert gibt die Attributwerte an, die für übereinstimmende Datensätze abgerufen werden.

Nach jedem erfolgreichen Aufruf der WSALookupServiceNext-Funktion verweist lpBlob -> pBlobData auf einen Datenblock, der die in der folgenden Tabelle aufgeführten Werte enthält.

Wert BESCHREIBUNG
_ _ SDP-DIENSTSUCHANFORDERUNG _ Ein Array von SDP-Eintragshandles, das mit der serviceRecordHandleList identisch ist, die von Bluetooth 1.1 SDP 4.5.2 definiert wird. Die Anzahl der zurückgegebenen SDP-Handles wird durch (lpBlob->cbSize)/sizeof(ULONG) berechnet. Alle Ergebnisse werden in einem einzigen Aufruf der WSALookupServiceNext-Funktion zurückgegeben.
SDP _ SERVICE _ ATTRIBUTE _ REQUEST ODER SDP SERVICE SEARCH ATTRIBUTE _ _ _ _ REQUEST Ein binärer Bluetooth SDP-Eintrag. Für SDP _ SERVICE ATTRIBUTE _ _ REQUEST werden alle Ergebnisse in einem einzigen Aufruf der WSALookupServiceNext-Funktion zurückgegeben.

Hinweis

Wenn das lpBlob-Member während der Eingabe für eine Dienstabfrage nicht angegeben wird, wird eine Dienst- und Attributsuche für den Dienst durchgeführt, der im lpServiceClassId-Member für Attribute von 0 bis 0xFFFF.

Bluetooth und WSAQUERYSET für Dienstabfragen

Ermitteln von Bluetooth-Geräten und -Diensten

Bluetooth und WSALookupServiceNext

Bluetooth und WSALookupServiceBegin für die Geräteanfrage

_BTH-ABFRAGEDIENST _

Verbinden

SOCKADDR _ BTH

WSAAddressToString

WSALookupServiceBegin

WSALookupServiceEnd

WSALookupServiceNext

WSAQUERYSET

Windows-Sockets