Partager via


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_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

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_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

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.