Compartir a través de


IOCTL_BTH_HCI_VENDOR_COMMAND IOCTL (bthioctl.h)

La solicitud IOCTL_BTH_HCI_VENDOR_COMMAND permite que las aplicaciones Bluetooth envíen comandos específicos del proveedor a las radios.

Código principal

IRP_MJ_DEVICE_CONTROL

Búfer de entrada

El miembro AssociatedIrp.SystemBuffer apunta a una estructura de BTH_VENDOR_SPECIFIC_COMMAND . La estructura contiene un identificador de fabricante, una versión del protocolo de administración de vínculos (LMP), un encabezado de comando de HCI y los datos de comandos del proveedor asociados que incluyen datos de patrón opcionales para que coincidan con un evento con el comando.

Longitud del búfer de entrada

Longitud de una estructura de BTH_VENDOR_SPECIFIC_COMMAND .

Búfer de salida

El miembro AssociatedIrp.SystemBuffer apunta a un búfer que contiene los datos de evento devueltos desde la radio. Los datos están disponibles en el miembro EventInfo de la estructura 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;

El miembro EventSize proporciona el tamaño de los datos de eventos específicos del proveedor devueltos desde la radio.

Longitud del búfer de salida

Longitud de una estructura de BTH_VENDOR_EVENT_INFO .

Bloque de estado

Si la solicitud se realiza correctamente, el miembro Information de la estructura STATUS_BLOCK se establece en el tamaño, en bytes, del búfer que contiene la respuesta del comando.

El miembro Status se establece en uno de los valores de la tabla siguiente.

Valor de estado Descripción
STATUS_SUCCESS El IOCTL se completó correctamente.
STATUS_BUFFER_TOO_SMALL El búfer de entrada que se pasó era demasiado pequeño.
STATUS_INVALID_PARAMETER El búfer de entrada que se pasó no era válido.
STATUS_PRIVILEGE_NOT_HELD El autor de la llamada no tiene los privilegios necesarios.
STATUS_INSUFFICIENT_RESOURCES No había memoria suficiente disponible para procesar la solicitud.

Comentarios

La solicitud IOCTL_BTH_HCI_VENDOR_COMMAND proporciona un mecanismo que permite a los proveedores crear comandos específicos de sus radios Bluetooth.

Los valores de versión del protocolo de administración de vínculos y identificadores de fabricante (LMP) que se encuentran en BTH_VENDOR_SPECIFIC_COMMAND estructura ayudan a evitar el envío de comandos específicos del proveedor a la radio incorrecta. La versión LMP permite a los proveedores enviar comandos específicos del proveedor a las radios que tienen una versión LMP coincidente. Si la versión LMP es cero, todas las radios de ese proveedor recibirán el comando específico del proveedor.

Los patrones son necesarios si un comando específico del proveedor no sigue el control de flujo de HCI estándar y se genera un evento específico del proveedor en respuesta al comando específico del proveedor.

Si se requieren patrones, el comando debe seguir las estructuras de BTH_VENDOR_PATTERN para los patrones que están presentes en el evento. Estos patrones permiten que la pila del controlador Bluetooth coincida con eventos específicos del proveedor con los comandos específicos del proveedor correspondientes.

La estructura BTH_VENDOR_PATTERN especifica estos patrones que siguen los datos de comandos específicos del proveedor que se especifican en el miembro Data de BTH_VENDOR_SPECIFIC_COMMAND estructura. El tamaño total máximo de todos los patrones que siguen el comando no debe ser mayor que 255.

Advertencia El proceso que envía IOCTL_BTH_HCI_VENDOR_COMMAND debe tener el privilegio SE_LOAD_DRIVER_NAME. Un proceso que se ejecuta en el sistema o en un contexto de administrador puede elevar sus privilegios mediante las funciones LookupPrivilegeValue y AdjustTokenPrivileges del SDK. En el ejemplo de código siguiente se muestra cómo obtener este privilegio. Tenga en cuenta que el ejemplo no muestra el control de errores.
 
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);

El evento que se genera debido a este comando se copia en el búfer de salida (incluido el encabezado de evento).

Requisitos

Requisito Value
Cliente mínimo compatible Versiones: _Available en Microsoft Windows Vista SP2 y versiones posteriores del sistema operativo.
Encabezado bthioctl.h (incluya Bthioctl.h)
IRQL <= PASSIVE_LEVEL

Consulte también

BTH_COMMAND_HEADER

BTH_VENDOR_PATTERN

BTH_VENDOR_SPECIFIC_COMMAND