在 Windows 載入並初始化藍牙驅動程式堆疊之後,驅動程式堆疊會探索已配對的作用中藍牙裝置。 驅動程式堆疊接著會為所有配對的裝置產生裝置標識碼(裝置標識符)。 接下來,驅動程式堆疊會使用標準隨插即用 (PnP) 機制,為每個裝置載入適當的配置檔驅動程式。 要載入的設定檔驅動程式是根據 INF 檔案選定的,該檔案用於安裝設定檔驅動程式和裝置標識碼,這是由藍牙驅動程式堆疊生成的,並在安裝藍牙裝置中進行描述。
配置檔驅動程式會透過所有基於WDM架構的驅動程式使用的標準I/O要求封包(IRP)機制,與藍牙驅動程式通訊。 設定檔驅動程式透過分配並將 IRP 向下傳遞至藍牙驅動程式堆疊來與其裝置進行通訊,藍牙埠驅動程式,Bthport.sys。
配置文件驅動程式會對多個 IRP 進行配置和初始化,以便由 Bthport.sys處理。 設定檔驅動程式然後透過 IRP_MJ_INTERNAL_DEVICE_CONTROL 或 IRP_MJ_DEVICE_CONTROL IRP 傳送 IOCTL 要求到裝置,進行通訊。 概要驅動程式會在 IRP 的下列清單中指定其中一個 I/O 控制代碼。
藍牙驅動程式堆棧透過 IRP_MJ_DEVICE_CONTROL支援下列核心模式下的呼叫者的 IOCTL:
IOCTL_BTH_SDP_ATTRIBUTE_SEARCH
IOCTL_BTH_SDP_SERVICE_ATTRIBUTE_SEARCH
IOCTL_BTH_SDP_SUBMIT_RECORD_WITH_INFO
藍牙驅動程式堆疊支援下列 IOCTL 和 BRb, 核心模式呼叫者(通常是用於驅動程式對驅動程序通訊),透過 IRP_MJ_INTERNAL_DEVICE_CONTROL:
BRB_L2CA_OPEN_CHANNEL_RESPONSE
BRB_GET_DEVICE_INTERFACE_STRING
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 的大小,以位元組為單位。 BthAllocateBrb、BthInitializeBrb和 BthReuseBrb 函式會自動設定 Type 和 Length 成員。
例如,若要開啟遠端裝置的連線,請指定其中一個函式代碼,BRB_L2CA_OPEN_CHANNEL 或 BRB_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。