IOCTL_BTH_HCI_VENDOR_COMMAND IOCTL (bthioctl.h)
La demande IOCTL_BTH_HCI_VENDOR_COMMAND permet aux applications Bluetooth d’envoyer des commandes spécifiques au fournisseur à des radios.
Code principal
Mémoire tampon d'entrée
Le membre AssociatedIrp.SystemBuffer pointe vers une structure BTH_VENDOR_SPECIFIC_COMMAND . La structure contient un identificateur de fabricant, une version du protocole de gestion des liens (LMP), un en-tête de commande HCI et les données de commande du fournisseur associées qui incluent des données de modèle facultatives pour faire correspondre un événement à la commande.
Longueur de la mémoire tampon d’entrée
Longueur d’une structure BTH_VENDOR_SPECIFIC_COMMAND .
Mémoire tampon de sortie
Le membre AssociatedIrp.SystemBuffer pointe vers une mémoire tampon qui contient les données d’événement retournées par la radio. Les données sont disponibles dans le membre EventInfo de la structure BTH_VENDOR_EVENT_INFO .
typedef struct _BTH_VENDOR_EVENT_INFO {
BTH_ADDR BthAddress;
ULONG EventSize;
UCHAR EventInfo[1];
} BTH_VENDOR_EVENT_INFO, *PBTH_VENDOR_EVENT_INFO;
Le membre EventSize fournit la taille des données d’événement spécifiques au fournisseur retournées par la radio.
Longueur de la mémoire tampon de sortie
Longueur d’une structure de BTH_VENDOR_EVENT_INFO .
Bloc d’état
Si la demande réussit, le membre Information de la structure STATUS_BLOCK est défini sur la taille, en octets, de la mémoire tampon qui contient la réponse de commande.
Le membre Status est défini sur l’une des valeurs du tableau suivant.
Valeur d’état | Description |
---|---|
STATUS_SUCCESS | Le IOCTL s’est terminé avec succès. |
STATUS_BUFFER_TOO_SMALL | La mémoire tampon d’entrée passée était trop petite. |
STATUS_INVALID_PARAMETER | La mémoire tampon d’entrée passée n’était pas valide. |
STATUS_PRIVILEGE_NOT_HELD | L’appelant ne dispose pas des privilèges requis. |
STATUS_INSUFFICIENT_RESOURCES | La mémoire disponible était insuffisante pour traiter la demande. |
Remarques
La requête IOCTL_BTH_HCI_VENDOR_COMMAND fournit un mécanisme qui permet aux fournisseurs de créer des commandes spécifiques à leurs radios Bluetooth.
Les valeurs de version de l’ID de fabricant et du protocole de gestion des liens (LMP) qui se trouvent dans le BTH_VENDOR_SPECIFIC_COMMAND structure permet d’empêcher l’envoi de commandes spécifiques au fournisseur vers la mauvaise radio. La version LMP permet aux fournisseurs d’envoyer des commandes spécifiques au fournisseur aux radios qui ont une version LMP correspondante. Si la version LMP est égale à zéro, toutes les radios de ce fournisseur recevront la commande spécifique du fournisseur.
Des modèles sont requis si une commande spécifique au fournisseur ne suit pas le contrôle de flux HCI standard et qu’un événement spécifique au fournisseur est généré en réponse à la commande propre au fournisseur.
Si des modèles sont requis, la commande doit être suivie de BTH_VENDOR_PATTERN structures pour les modèles présents dans l’événement. Ces modèles permettent à la pile de pilotes Bluetooth de faire correspondre des événements spécifiques au fournisseur avec les commandes propres au fournisseur correspondantes.
La structure BTH_VENDOR_PATTERN spécifie de tels modèles qui suivent les données de commande spécifiques au fournisseur spécifiées dans le membre Données de BTH_VENDOR_SPECIFIC_COMMAND structure. La taille totale maximale de tous les modèles qui suivent la commande ne doit pas être supérieure à 255.
HANDLE procToken;
LUID luid;
TOKEN_PRIVILEGES tp;
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &procToken);
LookupPrivilegeValue(NULL, SE_LOAD_DRIVER_NAME, &luid);
Tp.PrivilegeCount = 1;
Tp.privileges[0].Luid = luid;
Tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(procToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), (PTOKEN_PRIVILEGES) NULL, (PDWORD)NULL);
L’événement généré en raison de cette commande est copié dans la mémoire tampon de sortie (y compris l’en-tête d’événement).
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Versions : _Available sur Microsoft Windows Vista SP2 et versions ultérieures du système d’exploitation. |
En-tête | bthioctl.h (inclure Bthioctl.h) |
IRQL | <= PASSIVE_LEVEL |