Compartilhar via


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

IRP_MJ_DEVICE_CONTROL

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.

Aviso O processo que envia IOCTL_BTH_HCI_VENDOR_COMMAND deve ter o privilégio SE_LOAD_DRIVER_NAME. Um processo em execução no sistema ou em um contexto de administrador pode elevar seu privilégio usando as funções LookupPrivilegeValue e AdjustTokenPrivileges do SDK. O exemplo de código a seguir demonstra como obter esse privilégio. Observe que o exemplo não demonstra o tratamento de erros.
 
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

Confira também

BTH_COMMAND_HEADER

BTH_VENDOR_PATTERN

BTH_VENDOR_SPECIFIC_COMMAND