共用方式為


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

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

配置文件驅動程式會透過以WDM架構為基礎的所有驅動程式所採用的標準I/O 要求封包 (IRP) 式機制,與藍牙驅動程式堆棧通訊。 設定檔案驅動程式會藉由將 IRP 設定並傳送至藍牙埠驅動程式堆疊,以與其裝置通訊, Bthport.sys

配置檔驅動程式會配置和初始化 要由Bthport.sys處理的 IRP。 接著,配置檔驅動程式會使用透過 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

藍牙驅動程式堆疊支援下列IOCTLs和 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_HEADER 結構定義的標準標頭開頭,該結構會指定 BRB 的類型,以決定 BRB 其餘部分的結構。 Type 成員必須等於BRB_TYPE列舉中找到的其中一個值,可決定配置檔驅動程式要求的藍牙作業類型。 BRB 結構和大小會根據 BRB 的類型而有所不同。 BRB_HEADER 結構的 Length 成員會指定 BRB 的大小,以位元組為單位。 BthAllocateBrbBthInitializeBrbBthReuseBrb 函式會自動設定 TypeLength 成員。

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

針對每個 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_GET_DEVICE_INTERFACE_STRING _BRB_GET_DEVICE_INTERFACE_STRING

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