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 del comando HCI e i dati dei comandi del fornitore associati che includono i dati del modello facoltativi per trovare una corrispondenza con un evento al comando.

Lunghezza del buffer di input

Lunghezza di una struttura BTH_VENDOR_SPECIFIC_COMMAND.

Buffer di output

Il AssociatedIrp.SystemBuffer membro punta a un buffer contenente 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 BTH_VENDOR_EVENT_INFO.

Blocco di stato

Se la richiesta ha esito positivo, il membro Information della struttura STATUS_BLOCK viene impostato sulle dimensioni, in byte, del buffer che contiene la risposta del 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 per elaborare la richiesta.

Osservazioni

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

Valori della versione dell'ID produttore e del protocollo di gestione dei collegamenti (LMP) presenti nel BTH_VENDOR_SPECIFIC_COMMAND struttura aiuta 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 obbligatori 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 associare gli eventi specifici del fornitore ai 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 Data della struttura di 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 in un contesto di amministratore può elevare il proprio privilegio usando l'SDK LookupPrivilegeValue e Funzioni AdjustTokenPrivileges. Nell'esempio di codice seguente viene illustrato come ottenere questo privilegio. Si noti che l'esempio non illustra 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).

Fabbisogno

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

Vedere anche

BTH_COMMAND_HEADER

BTH_VENDOR_PATTERN

BTH_VENDOR_SPECIFIC_COMMAND