Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Após o Windows carregar e inicializar a pilha de drivers Bluetooth, a pilha de drivers deteta dispositivos Bluetooth ativos que já foram emparelhados. Em seguida, o stack de drivers gera identificadores de dispositivo (IDs de dispositivo) para todos os dispositivos emparelhados. Em seguida, a pilha de drivers usa mecanismos padrão Plug and Play (PnP) para carregar o driver de perfil apropriado para cada dispositivo. O driver de perfil a ser carregado é selecionado com base no arquivo INF que instala o driver de perfil e o identificador do dispositivo, conforme gerado pela pilha de drivers Bluetooth e descrito em Instalando um dispositivo Bluetooth.
Os controladores de perfil comunicam-se com a pilha de controladores Bluetooth através do mecanismo padrão baseado em 'pacote de pedido de I/O' (IRP) empregado por todos os controladores com base na arquitetura WDM. Um driver de perfil comunica-se com um dispositivo alocando e enviando IRPs pela pilha de drivers até ao driver da porta Bluetooth, Bthport.sys.
Um controlador de perfil aloca e inicializa os IRPs para serem processados por Bthport.sys. Em seguida, os drivers de perfil comunicam-se com os seus dispositivos usando solicitações IOCTL que são enviadas para o dispositivo através de um IRP_MJ_INTERNAL_DEVICE_CONTROL ou IRP_MJ_DEVICE_CONTROL IRP. O driver de perfil especifica um dos códigos de controlo de entrada/saída (E/S) presentes na lista seguinte no IRP.
A pilha de drivers Bluetooth suporta os seguintes IOCTLs para chamadores no modo núcleo através de IRP_MJ_DEVICE_CONTROL:
IOCTL_BTH_SDP_ATTRIBUTE_SEARCH
IOCTL_BTH_SDP_SERVICE_ATTRIBUTE_SEARCH
IOCTL_BTH_SDP_SUBMIT_RECORD_WITH_INFO
A pilha de drivers Bluetooth suporta os seguintes chamadores de modo kernel IOCTLs e BRBs (geralmente para comunicação driver-to-driver) através 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
Para obter mais informações sobre como usar as IOCTLs descritas nas listas anteriores, consulte IOCTLs Bluetooth.
Os drivers de perfil usam principalmente IOCTL_INTERNAL_BTH_SUBMIT_BRB para se comunicar e interagir com a funcionalidade fornecida na pilha de drivers Bluetooth. Um driver de perfil usa IOCTL_INTERNAL_BTH_SUBMIT_BRB para fornecer uma estrutura de dados de comprimento variável chamada Bluetooth Request Block (BRB) para o dispositivo que gerencia. Os drivers de perfil usam BRBs para abrir e fechar conexões com dispositivos remotos e para executar a maioria das tarefas de entrada e saída. IOCTL_INTERNAL_BTH_SUBMIT_BRB contém um BRB que descreve melhor a operação Bluetooth a ser executada. Para saber mais sobre como criar e enviar BRBs para baixo da pilha de drivers Bluetooth, consulte Construindo e enviando um BRB.
Cada BRB começa com um cabeçalho padrão definido pela estrutura BRB_HEADER que especifica o tipo de BRB, que determina a estrutura do restante do BRB. O membro Type , que deve ser igual a um dos valores encontrados na enumeração BRB_TYPE , determina o tipo de operação Bluetooth que o driver de perfil solicita. A estrutura e o tamanho do BRB variam de acordo com o tipo de BRB. O membro Length da estrutura BRB_HEADER especifica o tamanho, em bytes, do BRB. As funções BthAllocateBrb, BthInitializeBrb e BthReuseBrb definem automaticamente os membros Type e Length .
Por exemplo, para abrir uma conexão com um dispositivo remoto, especifique um dos códigos de função, BRB_L2CA_OPEN_CHANNEL ou BRB_SCO_OPEN_CHANNEL, para indicar que o driver de perfil está tentando abrir um canal de conexão L2CAP ou SCO para o dispositivo remoto. A pilha de drivers Bluetooth usa o membro Status da estrutura BRB para retornar um código de status específico do Bluetooth.
Para cada BRB, o driver de perfil deve alocar e inicializar a estrutura correspondente apropriada com informações sobre a operação Bluetooth a ser executada.
A tabela a seguir descreve as estruturas que correspondem a BRBs específicos que os drivers de perfil podem emitir:
| Bloco de solicitação Bluetooth (BRB) | Estrutura correspondente |
|---|---|
| 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_REGISTO_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 |
Para obter mais informações sobre como usar IOCTLs e BRBs Bluetooth, consulte Criando e enviando um BRB.