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 de BTH_VENDOR_SPECIFIC_COMMAND. A estrutura contém um identificador do fabricante, uma versão LMP (protocolo de gerenciamento de vínculo), um cabeçalho de comando HCI e os dados de comando do fornecedor associado que incluem dados 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 eventInfo membro da estrutura de 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 informações da estrutura STATUS_BLOCK será definido como o tamanho, em bytes, do buffer que contém a resposta de comando.
O membro status é definido como um dos valores na tabela a seguir.
Valor do 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. |
Observações
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 LMP (ID do fabricante e protocolo de gerenciamento de link) que estão no BTH_VENDOR_SPECIFIC_COMMAND ajuda na estrutura para 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 Data membro da estrutura de 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 |
---|---|
de cliente com suporte mínimo | 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 |