Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
После загрузки и инициализации стека драйверов Bluetooth стек драйверов обнаруживает активные устройства Bluetooth, которые уже были спарены. Затем стек драйверов создает идентификаторы устройств для всех парных устройств. Затем стек драйверов использует стандартные механизмы Plug and Play (PnP) для загрузки соответствующего драйвера профиля для каждого устройства. Драйвер профиля, который нужно загрузить, выбирается на основе INF-файла, который устанавливает драйвер профиля и идентификатор устройства, как создается стеком драйверов Bluetooth и описано в разделе "Установка устройства Bluetooth".
Драйверы профилей взаимодействуют со стеком драйверов Bluetooth с помощью стандартного механизма пакета запросов ввода-вывода (IRP), используемого всеми драйверами на основе архитектуры WDM. Драйвер профиля взаимодействует со своим устройством путем выделения и отправки IRPs в стек драйверов Bluetooth в драйвер порта Bluetooth Bthport.sys.
Драйвер профиля выделяет и инициализирует IRPs для обработки Bthport.sys. Затем драйверы профилей взаимодействуют со своими устройствами посредством запросов IOCTL, которые доставляются на устройство посредством IRP_MJ_INTERNAL_DEVICE_CONTROL или IRP_MJ_DEVICE_CONTROL IRP. Драйвер профиля указывает один из кодов управления вводом-выводом из приведенного ниже списка в IRP.
Стек драйверов Bluetooth поддерживает следующие IOCTLs для вызовов в режиме ядра через IRP_MJ_DEVICE_CONTROL:
IOCTL_BTH_SDP_ATTRIBUTE_SEARCH
IOCTL_BTH_SDP_SERVICE_ATTRIBUTE_SEARCH
IOCTL_BTH_SDP_SUBMIT_RECORD_WITH_INFO
Стек драйверов Bluetooth поддерживает следующие вызовы управления вводом-выводом (IOCTLs) и вызовы BRBs для режима ядра (как правило, для связи между драйверами) через 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
Дополнительные сведения об использовании IOCTLs, описанных в предыдущих списках, см. статью Bluetooth IOCTLs.
Драйверы профилей в основном используют IOCTL_INTERNAL_BTH_SUBMIT_BRB для взаимодействия с функциональностью, предоставляемой стеком драйверов Bluetooth. Драйвер профиля использует IOCTL_INTERNAL_BTH_SUBMIT_BRB для доставки структуры данных переменной длины, называемой блоком запросов Bluetooth (BRB) на устройство, которое он управляет. Драйверы профилей используют BRB для открытия и закрытия подключений к удаленным устройствам и выполнения большинства задач ввода и вывода. IOCTL_INTERNAL_BTH_SUBMIT_BRB содержит BRB, который дополнительно описывает операцию Bluetooth, которую необходимо выполнить. Дополнительные сведения о том, как создавать и отправлять BRB вниз по стеку драйверов Bluetooth, см. в статье "Создание и отправка BRB".
Каждый BRB начинается со стандартного заголовка, определенного структурой BRB_HEADER , определяющей тип BRB, который определяет структуру остальной части BRB. Элемент Type , который должен иметь одно из значений, найденных в перечислении BRB_TYPE , определяет тип операции Bluetooth, запрашиваемой драйвером профиля. Структура и размер BRB зависят от типа BRB. Элемент Length структуры BRB_HEADER указывает размер BRB в байтах. Функции BthAllocateBrb, BthInitializeBrb и BthReuseBrb автоматически задают элементы Type и Length .
Например, чтобы открыть подключение к удаленному устройству, укажите один из кодов функций , BRB_L2CA_OPEN_CHANNEL или BRB_SCO_OPEN_CHANNEL, чтобы указать, что драйвер профиля пытается открыть канал подключения L2CAP или SCO к удаленному устройству. Стек драйверов Bluetooth использует элемент состояния структуры BRB для возврата кода состояния Bluetooth.
Для каждого BRB драйвер профиля должен выделить и инициализировать соответствующую ей структуру с информацией об операции с Bluetooth, чтобы выполнить ее.
В следующей таблице описываются структуры, соответствующие конкретным BRBS, которые могут выдавать драйверы профилей:
Блок запроса 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_ВХОД_В_АКТИВНЫЙ_РЕЖИМ | _BRB_ACL_ENTER_ACTIVE_MODE |
BRB_GET_DEVICE_INTERFACE_STRING | _BRB_GET_DEVICE_INTERFACE_STRING |
Дополнительные сведения об использовании IOCTLs Bluetooth и BRB см. в разделе "Создание и отправка BRB".