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
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.
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 |