Verwenden des Bluetooth-Treiberstapels

Nachdem Windows den Bluetooth-Treiberstapel geladen und initialisiert hat, ermittelt der Treiberstapel aktive Bluetooth-Geräte, die bereits gekoppelt wurden. Der Treiberstapel generiert dann Gerätebezeichner (Geräte-IDs) für alle gekoppelten Geräte. Als Nächstes verwendet der Treiberstapel PnP-Mechanismen (Standard Plug & Play), um den entsprechenden Profiltreiber für jedes Gerät zu laden. Der zu ladende Profiltreiber wird basierend auf der INF-Datei ausgewählt, die den Profiltreiber und die Geräte-ID installiert, wie vom Bluetooth-Treiberstapel generiert und unter Installieren eines Bluetooth-Geräts beschrieben.

Profiltreiber kommunizieren mit dem Bluetooth-Treiberstapel über den standardmäßigen I/O Request Packet (IRP)-basierten Mechanismus, der von allen Treibern basierend auf der WDM-Architektur verwendet wird. Ein Profiltreiber kommuniziert mit seinem Gerät, indem IRPs über den Bluetooth-Treiberstapel an den Bluetooth-Porttreiber Bthport.syszugewiesen und gesendet werden.

Ein Profiltreiber ordnet irPs zu und initialisiert sie, die von Bthport.sysverarbeitet werden sollen. Profiltreiber kommunizieren dann mit ihren Geräten mithilfe von IOCTL-Anforderungen, die über eine IRP_MJ_INTERNAL_DEVICE_CONTROL oder IRP_MJ_DEVICE_CONTROL IRP an das Gerät übermittelt werden. Der Profiltreiber gibt einen der E/A-Kontrollcodes in der folgenden Liste im IRP an.

Der Bluetooth-Treiberstapel unterstützt die folgenden IOCTLs für Aufrufer im Kernelmodus über IRP_MJ_DEVICE_CONTROL:

IOCTL_BTH_DISCONNECT_DEVICE

IOCTL_BTH_GET_DEVICE_INFO

IOCTL_BTH_GET_LOCAL_INFO

IOCTL_BTH_GET_RADIO_INFO

IOCTL_BTH_SDP_ATTRIBUTE_SEARCH

IOCTL_BTH_SDP_CONNECT

IOCTL_BTH_SDP_DISCONNECT

IOCTL_BTH_SDP_REMOVE_RECORD

IOCTL_BTH_SDP_SERVICE_ATTRIBUTE_SEARCH

IOCTL_BTH_SDP_SERVICE_SEARCH

IOCTL_BTH_SDP_SUBMIT_RECORD

IOCTL_BTH_SDP_SUBMIT_RECORD_WITH_INFO

Der Bluetooth-Treiberstapel unterstützt die folgenden IOCTLs- und BRBs-Kernelmodusaufrufer (in der Regel für die Kommunikation zwischen Treibern) über IRP_MJ_INTERNAL_DEVICE_CONTROL:

BRB_HCI_GET_LOCAL_BD_ADDR

BRB_L2CA_REGISTER_SERVER

BRB_L2CA_UNREGISTER_SERVER

BRB_L2CA_OPEN_CHANNEL

BRB_L2CA_OPEN_CHANNEL_RESPONSE

BRB_L2CA_CLOSE_CHANNEL

BRB_L2CA_ACL_TRANSFER

BRB_L2CA_UPDATE_CHANNEL

BRB_L2CA_PING

BRB_REGISTER_PSM

BRB_UNREGISTER_PSM

BRB_SCO_REGISTER_SERVER

BRB_SCO_UNREGISTER_SERVER

BRB_SCO_OPEN_CHANNEL

BRB_SCO_OPEN_CHANNEL_RESPONSE

BRB_SCO_CLOSE_CHANNEL

BRB_SCO_TRANSFER

BRB_SCO_GET_CHANNEL_INFO

BRB_SCO_GET_SYSTEM_INFO

BRB_SCO_FLUSH_CHANNEL

BRB_ACL_GET_MODE

BRB_ACL_ENTER_ACTIVE_MODE

BRB_GET_DEVICE_INTERFACE_STRING

IOCTL_INTERNAL_BTH_SUBMIT_BRB

IOCTL_INTERNAL_BTHENUM_GET_DEVINFO

IOCTL_INTERNAL_BTHENUM_GET_ENUMINFO

Weitere Informationen zur Verwendung der in den vorherigen Listen beschriebenen IOCTLs finden Sie unter Bluetooth-IOCTLs.

Profiltreiber verwenden in erster Linie IOCTL_INTERNAL_BTH_SUBMIT_BRB, um mit den im Bluetooth-Treiberstapel bereitgestellten Funktionen zu kommunizieren und mit ihnen zu interagieren. Ein Profiltreiber verwendet IOCTL_INTERNAL_BTH_SUBMIT_BRB, um eine Datenstruktur mit variabler Länge, die als Bluetooth-Anforderungsblock (BRB) bezeichnet wird, an das von ihm verwaltete Gerät bereitzustellen. Profiltreiber verwenden BRBs, um Verbindungen mit Remotegeräten zu öffnen und zu schließen und die meisten Eingabe- und Ausgabeaufgaben auszuführen. IOCTL_INTERNAL_BTH_SUBMIT_BRB enthält einen BRB, der den auszuführenden Bluetooth-Vorgang genauer beschreibt. Weitere Informationen zum Erstellen und Senden von BRBs im Bluetooth-Treiberstapel finden Sie unter Erstellen und Senden eines BRB.

Jeder BRB beginnt mit einem Standardheader, der durch die BRB_HEADER-Struktur definiert wird, die den BRB-Typ angibt, der die Struktur des restlichen BRB bestimmt. Der Typmember , der einem der Werte in der BRB_TYPE-Enumeration entsprechen muss, bestimmt den Typ des Bluetooth-Vorgangs, den der Profiltreiber anfordert. Die BRB-Struktur und -Größe variieren je nach BRB-Typ. Der Length-Member der BRB_HEADER-Struktur gibt die Größe des BRB in Bytes an. Die Funktionen BthAllocateBrb, BthInitializeBrb und BthReuseBrb legen die Elemente Type und Length automatisch fest.

Wenn Sie beispielsweise eine Verbindung mit einem Remotegerät herstellen möchten, geben Sie entweder einen der Funktionscodes , BRB_L2CA_OPEN_CHANNEL oder BRB_SCO_OPEN_CHANNEL an, um anzugeben, dass der Profiltreiber versucht, einen L2CAP- oder SCO-Verbindungskanal mit dem Remotegerät zu öffnen. Der Bluetooth-Treiberstapel verwendet den Status-Member der BRB-Struktur, um einen Bluetooth-spezifischen status Code zurückzugeben.

Für jeden BRB muss der Profiltreiber die entsprechende Struktur mit Informationen zum auszuführenden Bluetooth-Vorgang zuordnen und initialisieren.

In der folgenden Tabelle werden die Strukturen beschrieben, die bestimmten BRBs entsprechen, die profiltreiber ausgeben können:

Bluetooth-Anforderungsblock (BRB) Entsprechende Struktur
BRB_HCI_GET_LOCAL_BD_ADDR _BRB_GET_LOCAL_BD_ADDR
BRB_L2CA_REGISTER_SERVER _BRB_L2CA_REGISTER_SERVER
BRB_L2CA_UNREGISTER_SERVER _BRB_L2CA_UNREGISTER_SERVER
BRB_L2CA_OPEN_CHANNEL _BRB_L2CA_OPEN_CHANNEL
BRB_L2CA_OPEN_CHANNEL_RESPONSE _BRB_L2CA_OPEN_CHANNEL
BRB_L2CA_CLOSE_CHANNEL _BRB_L2CA_CLOSE_CHANNEL
BRB_L2CA_ACL_TRANSFER _BRB_L2CA_ACL_TRANSFER
BRB_L2CA_UPDATE_CHANNEL _BRB_L2CA_UPDATE_CHANNEL
BRB_L2CA_PING _BRB_L2CA_PING
BRB_REGISTER_PSM _BRB_PSM
BRB_UNREGISTER_PSM _BRB_PSM
BRB_SCO_REGISTER_SERVER _BRB_SCO_REGISTER_SERVER
BRB_SCO_UNREGISTER_SERVER _BRB_SCO_UNREGISTER_SERVER
BRB_SCO_OPEN_CHANNEL _BRB_SCO_OPEN_CHANNEL
BRB_SCO_OPEN_CHANNEL_RESPONSE _BRB_SCO_OPEN_CHANNEL
BRB_SCO_CLOSE_CHANNEL _BRB_SCO_CLOSE_CHANNEL
BRB_SCO_TRANSFER _BRB_SCO_TRANSFER
BRB_SCO_GET_CHANNEL_INFO _BRB_SCO_GET_CHANNEL_INFO
BRB_SCO_GET_SYSTEM_INFO _BRB_SCO_GET_SYSTEM_INFO
BRB_SCO_FLUSH_CHANNEL _BRB_SCO_FLUSH_CHANNEL
BRB_ACL_GET_MODE _BRB_ACL_GET_MODE
BRB_ACL_ENTER_ACTIVE_MODE _BRB_ACL_ENTER_ACTIVE_MODE
BRB_GET_DEVICE_INTERFACE_STRING _BRB_GET_DEVICE_INTERFACE_STRING

Weitere Informationen zur Verwendung von Bluetooth-IOCTLs und BRBs finden Sie unter Erstellen und Senden eines BRB.