共用方式為


如何使用藍牙驅動程式堆疊

在 Windows 載入並初始化藍牙驅動程式堆疊之後,驅動程式堆疊會探索已配對的作用中藍牙裝置。 驅動程式堆疊接著會為所有配對的裝置產生裝置標識碼(裝置標識符)。 接下來,驅動程式堆疊會使用標準隨插即用 (PnP) 機制,為每個裝置載入適當的配置檔驅動程式。 要載入的設定檔驅動程式是根據 INF 檔案選定的,該檔案用於安裝設定檔驅動程式和裝置標識碼,這是由藍牙驅動程式堆疊生成的,並在安裝藍牙裝置中進行描述。

配置檔驅動程式會透過所有基於WDM架構的驅動程式使用的標準I/O要求封包(IRP)機制,與藍牙驅動程式通訊。 設定檔驅動程式透過分配並將 IRP 向下傳遞至藍牙驅動程式堆疊來與其裝置進行通訊,藍牙埠驅動程式,Bthport.sys

配置文件驅動程式會對多個 IRP 進行配置和初始化,以便由 Bthport.sys處理。 設定檔驅動程式然後透過 IRP_MJ_INTERNAL_DEVICE_CONTROLIRP_MJ_DEVICE_CONTROL IRP 傳送 IOCTL 要求到裝置,進行通訊。 概要驅動程式會在 IRP 的下列清單中指定其中一個 I/O 控制代碼。

藍牙驅動程式堆棧透過 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

藍牙驅動程式堆疊支援下列 IOCTL 和 BRb, 核心模式呼叫者(通常是用於驅動程式對驅動程序通訊),透過 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

如需如何使用先前清單中所述的 IOCTL 的詳細資訊,請參閱 藍牙 IOCTLs

配置檔驅動程式主要使用IOCTL_INTERNAL_BTH_SUBMIT_BRB來與藍牙驅動程式堆疊中提供的功能進行通訊和互動。 配置文件驅動程式使用 IOCTL_INTERNAL_BTH_SUBMIT_BRB,將名為藍牙要求區塊(BRB)的可變長度數據結構傳遞給它所管理的裝置。 配置文件驅動程式會使用 BRB 來開啟和關閉遠端裝置的連線,以及執行大部分的輸入和輸出工作。 IOCTL_INTERNAL_BTH_SUBMIT_BRB 包含一個 BRB,其進一步詳述要執行的藍牙作業。 若要深入瞭解如何建置及傳送 BRB 到藍牙驅動程式堆疊,請參閱 建置和傳送 BRB

每個 BRB 都是以指定 BRB 類型的 BRB_HEADER 結構所定義的標準標頭開頭,這會決定 BRB 其餘部分的結構。 Type 成員,其必須等於 BRB_TYPE 列舉中找到的其中一個值,會決定配置檔驅動程式要求的藍牙作業類型。 BRB 結構和大小會根據 BRB 的類型而有所不同。 BRB_HEADER 結構中的 Length 欄位會指定 BRB 的大小,以位元組為單位。 BthAllocateBrbBthInitializeBrbBthReuseBrb 函式會自動設定 TypeLength 成員。

例如,若要開啟遠端裝置的連線,請指定其中一個函式代碼,BRB_L2CA_OPEN_CHANNELBRB_SCO_OPEN_CHANNEL,表示配置檔驅動程式嘗試開啟遠端裝置的 L2CAP 或 SCO 連線通道。 藍牙驅動程式堆疊會使用 BRB 結構 狀態 成員來傳回藍牙特定狀態代碼。

針對每個 BRB,設定檔驅動程式必須配置並初始化適當的對應結構,並包含要執行藍牙作業的相關資訊。

下表描述對應至設定檔驅動程式可發出的特定 BRB 的結構:

藍牙要求區塊 (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_獲取設備介面字串 _BRB_GET_DEVICE_INTERFACE_STRING

如需使用藍牙 IOCTL 和 BRB 的詳細資訊,請參閱 建置和傳送 BRB