IOCTL_BTH_HCI_VENDOR_COMMAND IOCTL (bthioctl.h)
A solicitação IOCTL_BTH_HCI_VENDOR_COMMAND permite que aplicativos Bluetooth enviem comandos específicos do fornecedor para rádios.
Código principal
Buffer de entrada
O membro AssociatedIrp.SystemBuffer aponta para uma estrutura BTH_VENDOR_SPECIFIC_COMMAND . A estrutura contém um identificador de fabricante, uma versão LMP (protocolo de gerenciamento de link), um cabeçalho de comando HCI e os dados de comando do fornecedor associado que incluem dados de padrão opcionais para corresponder um evento ao comando.
Comprimento do buffer de entrada
O comprimento de uma estrutura BTH_VENDOR_SPECIFIC_COMMAND .
Buffer de saída
O membro AssociatedIrp.SystemBuffer aponta para um buffer que contém os dados de evento retornados do rádio. Os dados estão disponíveis no membro EventInfo da estrutura 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;
O membro EventSize fornece o tamanho dos dados de evento específicos do fornecedor retornados do rádio.
Comprimento do buffer de saída
O comprimento de uma estrutura BTH_VENDOR_EVENT_INFO .
Bloco de status
Se a solicitação for bem-sucedida, o membro Information da estrutura STATUS_BLOCK será definido como o tamanho, em bytes, do buffer que contém a resposta do comando.
O membro Status é definido como um dos valores na tabela a seguir.
Valor de status | Descrição |
---|---|
STATUS_SUCCESS | O IOCTL foi concluído com êxito. |
STATUS_BUFFER_TOO_SMALL | O buffer de entrada que foi passado era muito pequeno. |
STATUS_INVALID_PARAMETER | O buffer de entrada que foi passado era inválido. |
STATUS_PRIVILEGE_NOT_HELD | O chamador não tem os privilégios necessários. |
STATUS_INSUFFICIENT_RESOURCES | Não havia memória suficiente disponível para processar a solicitação. |
Comentários
A solicitação IOCTL_BTH_HCI_VENDOR_COMMAND fornece um mecanismo que permite que os fornecedores criem comandos específicos para seus rádios Bluetooth.
Os valores de versão de ID do fabricante e LMP (protocolo de gerenciamento de link) que estão no BTH_VENDOR_SPECIFIC_COMMAND estrutura ajuda a impedir o envio de comandos específicos do fornecedor para o rádio errado. A versão LMP permite que os fornecedores enviem comandos específicos do fornecedor para rádios que têm uma versão LMP correspondente. Se a versão LMP for zero, todos os rádios desse fornecedor receberão o comando específico do fornecedor.
Os padrões serão necessários se um comando específico do fornecedor não seguir o controle de fluxo HCI padrão e um evento específico do fornecedor for gerado em resposta ao comando específico do fornecedor.
Se forem necessários padrões, o comando deverá ser seguido por estruturas BTH_VENDOR_PATTERN para padrões presentes no evento. Esses padrões permitem que a pilha de driver Bluetooth corresponda a eventos específicos do fornecedor com os comandos específicos do fornecedor correspondentes.
A estrutura BTH_VENDOR_PATTERN especifica esses padrões que seguem os dados de comando específicos do fornecedor especificados no membro Data da estrutura BTH_VENDOR_SPECIFIC_COMMAND. O tamanho total máximo de todos os padrões que seguem o comando não deve ser maior que 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);
O evento gerado devido a esse comando é copiado para o buffer de saída (incluindo o cabeçalho do evento).
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Versões:_Available no Microsoft Windows Vista SP2 e versões posteriores do sistema operacional. |
Cabeçalho | bthioctl.h (include Bthioctl.h) |
IRQL | <= PASSIVE_LEVEL |