Comment utiliser la pile de pilotes Bluetooth
Une fois que Windows a chargé et initialisé la pile de pilotes Bluetooth, la pile de pilotes découvre les périphériques Bluetooth actifs qui ont déjà été associés. La pile de pilotes génère ensuite des identificateurs d’appareil (ID d’appareil) pour tous les appareils jumelés. Ensuite, la pile de pilotes utilise des mécanismes de Plug-and-Play standard (PnP) pour charger le pilote de profil approprié pour chaque appareil. Le pilote de profil à charger est sélectionné en fonction du fichier INF qui installe le pilote de profil et l’identificateur de périphérique, comme généré par la pile de pilotes Bluetooth et décrit dans Installation d’un périphérique Bluetooth.
Les pilotes de profil communiquent avec la pile de pilotes Bluetooth via le mécanisme standard basé sur les paquets de demandes d’E/S (IRP) utilisé par tous les pilotes basés sur l’architecture WDM. Un pilote de profil communique avec son appareil en allouant et en envoyant des irps dans la pile de pilotes Bluetooth au pilote de port Bluetooth, Bthport.sys.
Un pilote de profil alloue et initialise les IRPs à traiter par Bthport.sys. Les pilotes de profil communiquent ensuite avec leurs appareils à l’aide de requêtes IOCTL qui sont remises à l’appareil au moyen d’un IRP IRP_MJ_INTERNAL_DEVICE_CONTROL ou IRP_MJ_DEVICE_CONTROL . Le pilote de profil spécifie l’un des codes de contrôle d’E/S dans la liste suivante dans l’IRP.
La pile de pilotes Bluetooth prend en charge les listes IOCTL suivantes pour les appelants en mode noyau via IRP_MJ_DEVICE_CONTROL :
IOCTL_BTH_SDP_ATTRIBUTE_SEARCH
IOCTL_BTH_SDP_SERVICE_ATTRIBUTE_SEARCH
IOCTL_BTH_SDP_SUBMIT_RECORD_WITH_INFO
La pile de pilotes Bluetooth prend en charge les appels en mode noyau IOCTL et BRB suivants (généralement pour la communication de pilote à pilote) via 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
Pour plus d’informations sur l’utilisation des IOCTL décrites dans les listes précédentes, consultez Les IOCTL Bluetooth.
Les pilotes de profil utilisent principalement IOCTL_INTERNAL_BTH_SUBMIT_BRB pour communiquer et interagir avec les fonctionnalités fournies dans la pile de pilotes Bluetooth. Un pilote de profil utilise IOCTL_INTERNAL_BTH_SUBMIT_BRB pour fournir une structure de données de longueur variable appelée bloc de requête Bluetooth (BRB) à l’appareil qu’il gère. Les pilotes de profil utilisent des BRB pour ouvrir et fermer des connexions à des appareils distants et pour effectuer la plupart des tâches d’entrée et de sortie. IOCTL_INTERNAL_BTH_SUBMIT_BRB contient un BRB qui décrit plus en détail l’opération Bluetooth à effectuer. Pour en savoir plus sur la création et l’envoi de BRB dans la pile de pilotes Bluetooth, consultez Génération et envoi d’un BRB.
Chaque BRB commence par un en-tête standard défini par la structure BRB_HEADER qui spécifie le type de BRB, qui détermine la structure du reste du BRB. Le membre Type , qui doit correspondre à l’une des valeurs trouvées dans l’énumération BRB_TYPE , détermine le type d’opération Bluetooth que le pilote de profil demande. La structure et la taille du BRB varient en fonction du type de BRB. Le membre Length de la structure BRB_HEADER spécifie la taille, en octets, du BRB. Les fonctions BthAllocateBrb, BthInitializeBrb et BthReuseBrb définissent automatiquement les membres Type et Length .
Par exemple, pour ouvrir une connexion à un appareil distant, spécifiez l’un des codes de fonction , BRB_L2CA_OPEN_CHANNEL ou BRB_SCO_OPEN_CHANNEL, pour indiquer que le pilote de profil tente d’ouvrir un canal de connexion L2CAP ou SCO à l’appareil distant. La pile de pilotes Bluetooth utilise le membre Status de la structure BRB pour renvoyer un code status spécifique à Bluetooth.
Pour chaque BRB, le pilote de profil doit allouer et initialiser la structure correspondante appropriée avec des informations sur l’opération Bluetooth à effectuer.
Le tableau suivant décrit les structures qui correspondent à des BB spécifiques que les pilotes de profil peuvent émettre :
Bloc de requête Bluetooth (BRB) | Structure correspondante |
---|---|
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 |
Pour plus d’informations sur l’utilisation des IOCTL et des BBR Bluetooth, consultez Génération et envoi d’un BRB.