次の方法で共有


Bluetooth ドライバー スタックの使用方法

WindowsがBluetoothドライバスタックをロードして初期化した後、ドライバスタックは既にペアリングされているアクティブなBluetoothデバイスを検出します。 次に、ドライバスタックは、ペアリングされたすべてのデバイスのデバイス識別子(デバイスID)を生成します。 次に、ドライバスタックは標準のプラグアンドプレイ(PnP)メカニズムを使用して、各デバイスに適したプロファイルドライバをロードします。 ロードされるプロファイルドライバは、Bluetoothドライバスタックによって生成され Bluetoothデバイスのインストールで説明されているように、プロファイルドライバをインストールするINFファイルとデバイス識別子に基づいて選択されます。

プロファイルドライバは、WDM アーキテクチャに基づくすべてのドライバで採用されている標準の I/O Request Packet(IRP)ベースのメカニズムを通じて Bluetooth ドライバスタックと通信します。 プロファイルドライバは、IRP を割り当てて Bluetooth ドライバスタックから Bluetooth ポートドライバ Bthport.sys に送信することで、デバイスと通信します。

プロファイル・ドライバは Bthport.sysによって処理されるIRPを割り当て、初期化します。 IRP_MJ_INTERNAL_DEVICE_CONTROL または IRP_MJ_DEVICE_CONTROL IRPによってデバイスに配信されるIOCTL要求を使用して、プロファイル・ドライバはデバイスと通信します。 プロファイル・ドライバは、IRP で以下のリストの I/O 制御コードのいずれかを指定します。

Bluetoothドライバスタックは IRP_MJ_DEVICE_CONTROLを通じて、カーネルモードコーラーの以下のIOCTLをサポートします:

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

Bluetoothドライバスタックは IRP_MJ_INTERNAL_DEVICE_CONTROLを通じて、以下のIOCTLと BRB カーネルモードコール(一般にドライバ間通信用)をサポートしています:

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

前のリストで説明した IOCTL の使用方法の詳細については Bluetooth IOCTLs を参照してください。

プロファイルドライバは、主に IOCTL_INTERNAL_BTH_SUBMIT_BRB を使用して、Bluetooth ドライバスタックで提供される機能と通信および対話します。 プロファイルドライバは IOCTL_INTERNAL_BTH_SUBMIT_BRB を使用して、Bluetooth Request Block (BRB) と呼ばれる可変長のデータ構造を管理するデバイスに送ります。 プロファイル・ドライバは、BRB を使用してリモート・デバイスとの接続を開閉し、ほとんどの入出力タスクを実行します。 IOCTL_INTERNAL_BTH_SUBMIT_BRB には、実行する Bluetooth 操作をさらに記述した BRB が含まれています。 BluetoothドライバスタックでBRBを構築して送信する方法の詳細については BRBの構築と送信を参照してください。

各BRBは BRB_HEADER 構造体で定義された標準ヘッダーで始まり、BRBのタイプを指定します。 Type メンバは BRB_TYPE 列挙にある値のいずれかと等しくなければならず、プロファイル・ドライバが要求するBluetooth操作のタイプを決定する。 BRBの構造とサイズはBRBのタイプによって異なる。 BRB_HEADER構造体の Length メンバは、BRBのサイズをバイト単位で指定する。 The BthAllocateBrb, BthInitializeBrb, and BthReuseBrb functions automatically set the Type and Length members.

例えば、リモートデバイスへの接続を開くには BRB_L2CA_OPEN_CHANNEL または BRB_SCO_OPEN_CHANNEL のいずれかのファンクションコードを指定し、プロファイルドライバがリモートデバイスへの L2CAP または SCO 接続チャネルを開こうとしていることを示します。 Bluetooth ドライバのスタックは、BRB 構造体の Status メンバを使用して Bluetooth 固有のステータスコードを返す。

各 BRB に対して、プロファイル・ドライバは、実行する Bluetooth 操作に関する情報を持つ適切な対応する構造体を割り当てて初期化する必要があります。

次の表では、プロファイル・ドライバが発行できる特定の BRB に対応する構造体について説明します:

Bluetooth リクエスト・ブロック(BRB) 対応する構造体
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

Bluetooth IOCTL および BRB の使用の詳細については、「」を参照してください BRB の構築および送信.