Condividi tramite


IOCTL_BTH_HCI_VENDOR_COMMAND IOCTL (bthioctl.h)

La richiesta di IOCTL_BTH_HCI_VENDOR_COMMAND consente alle applicazioni Bluetooth di inviare comandi specifici del fornitore alle radio.

Codice principale

IRP_MJ_DEVICE_CONTROL

Buffer di input

Il membro AssociatedIrp.SystemBuffer punta a una struttura BTH_VENDOR_SPECIFIC_COMMAND . La struttura contiene un identificatore del produttore, una versione LMP (Link Management Protocol), un'intestazione di comando HCI e i dati dei comandi del fornitore associati che includono dati di modello facoltativi per corrispondere a un evento al comando.

Lunghezza del buffer di input

Lunghezza di una struttura BTH_VENDOR_SPECIFIC_COMMAND .

Buffer di output

Il membro AssociatedIrp.SystemBuffer punta a un buffer che contiene i dati dell'evento restituiti dalla radio. I dati sono disponibili nel membro EventInfo della struttura 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;

Il membro EventSize fornisce le dimensioni dei dati dell'evento specifici del fornitore restituiti dalla radio.

Lunghezza del buffer di output

Lunghezza di una struttura di BTH_VENDOR_EVENT_INFO .

Blocco dello stato

Se la richiesta ha esito positivo, il membro Informazioni della struttura STATUS_BLOCK è impostato sulle dimensioni, in byte, del buffer che contiene la risposta al comando.

Il membro Status è impostato su uno dei valori della tabella seguente.

Valore di stato Descrizione
STATUS_SUCCESS L'IOCTL è stato completato correttamente.
STATUS_BUFFER_TOO_SMALL Il buffer di input passato era troppo piccolo.
STATUS_INVALID_PARAMETER Il buffer di input passato non è valido.
STATUS_PRIVILEGE_NOT_HELD Il chiamante non dispone dei privilegi necessari.
STATUS_INSUFFICIENT_RESOURCES Memoria insufficiente disponibile per elaborare la richiesta.

Commenti

La richiesta di IOCTL_BTH_HCI_VENDOR_COMMAND fornisce un meccanismo che consente ai fornitori di creare comandi specifici per le loro radio Bluetooth.

I valori della versione del protocollo di gestione dei collegamenti e dell'ID produttore (LMP) presenti nell'oggetto BTH_VENDOR_SPECIFIC_COMMAND struttura aiutano a impedire l'invio di comandi specifici del fornitore alla radio sbagliata. La versione LMP consente ai fornitori di inviare comandi specifici del fornitore alle radio con una versione LMP corrispondente. Se la versione LMP è zero, tutte le radio del fornitore riceveranno il comando specifico del fornitore.

I modelli sono necessari se un comando specifico del fornitore non segue il controllo del flusso HCI standard e viene generato un evento specifico del fornitore in risposta al comando specifico del fornitore.

Se sono necessari modelli, il comando deve essere seguito da BTH_VENDOR_PATTERN strutture per i modelli presenti nell'evento. Questi modelli consentono allo stack di driver Bluetooth di corrispondere agli eventi specifici del fornitore con i comandi specifici del fornitore corrispondenti.

La struttura BTH_VENDOR_PATTERN specifica tali modelli che seguono i dati dei comandi specifici del fornitore specificati nel membro dati della struttura BTH_VENDOR_SPECIFIC_COMMAND. La dimensione totale massima di tutti i modelli che seguono il comando non deve essere maggiore di 255.

Avviso Il processo che invia IOCTL_BTH_HCI_VENDOR_COMMAND deve avere il privilegio di SE_LOAD_DRIVER_NAME. Un processo in esecuzione nel sistema o un contesto di amministratore può elevare il proprio privilegio usando le funzioni SDK LookupPrivilegeValue e AdjustTokenPrivileges . Nell'esempio di codice seguente viene illustrato come ottenere questo privilegio. Si noti che l'esempio non dimostra la gestione degli errori.
 
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'evento generato a causa di questo comando viene copiato nel buffer di output (inclusa l'intestazione dell'evento).

Requisiti

Requisito Valore
Client minimo supportato Versioni:_Available in Microsoft Windows Vista SP2 e versioni successive del sistema operativo.
Intestazione bthioctl.h (include Bthioctl.h)
IRQL <= PASSIVE_LEVEL

Vedi anche

BTH_COMMAND_HEADER

BTH_VENDOR_PATTERN

BTH_VENDOR_SPECIFIC_COMMAND