IOCTL_BTH_HCI_VENDOR_COMMAND IOCTL (bthioctl.h)
IOCTL_BTH_HCI_VENDOR_COMMAND请求允许蓝牙应用程序将特定于供应商的命令发送到无线电。
主要代码
输入缓冲区
AssociatedIrp.SystemBuffer 成员指向BTH_VENDOR_SPECIFIC_COMMAND结构。 结构包含制造商标识符、链接管理协议 (LMP) 版本、HCI 命令标头,以及关联的供应商命令数据,其中包括可选模式数据,以便将事件与命令匹配。
输入缓冲区长度
BTH_VENDOR_SPECIFIC_COMMAND结构的长度。
输出缓冲区
AssociatedIrp.SystemBuffer 成员指向包含从无线电返回的事件数据的缓冲区。 数据在 BTH_VENDOR_EVENT_INFO 结构的 EventInfo 成员中可用。
typedef struct _BTH_VENDOR_EVENT_INFO {
BTH_ADDR BthAddress;
ULONG EventSize;
UCHAR EventInfo[1];
} BTH_VENDOR_EVENT_INFO, *PBTH_VENDOR_EVENT_INFO;
EventSize 成员提供从无线电返回的特定于供应商的事件数据的大小。
输出缓冲区长度
BTH_VENDOR_EVENT_INFO结构的长度。
状态块
如果请求成功,STATUS_BLOCK 结构的 Information 成员将设置为保存命令响应的缓冲区的大小(以字节为单位)。
Status 成员设置为下表中的值之一。
状态值 | 说明 |
---|---|
STATUS_SUCCESS | IOCTL 已成功完成。 |
STATUS_BUFFER_TOO_SMALL | 传递的输入缓冲区太小。 |
STATUS_INVALID_PARAMETER | 传递的输入缓冲区无效。 |
STATUS_PRIVILEGE_NOT_HELD | 调用方没有所需的权限。 |
STATUS_INSUFFICIENT_RESOURCES | 内存不足,无法处理请求。 |
注解
IOCTL_BTH_HCI_VENDOR_COMMAND请求提供了一种机制,允许供应商创建特定于其蓝牙无线电的命令。
制造商 ID 和链接管理协议 (LMP) 中的版本值 BTH_VENDOR_SPECIFIC_COMMAND 结构有助于防止将特定于供应商的命令发送到错误的无线电。 LMP 版本使供应商能够将特定于供应商的命令发送到具有匹配 LMP 版本的无线电。 如果 LMP 版本为零,则来自该供应商的所有无线电都将接收特定于供应商的命令。
如果特定于供应商的命令不遵循标准 HCI 流控制,并且生成特定于供应商的事件来响应特定于供应商的命令,则需要模式。
如果需要模式,则 命令后 应BTH_VENDOR_PATTERN事件 中存在的模式的结构。 这些模式允许蓝牙驱动程序堆栈将特定于供应商的事件与相应的特定于供应商的命令进行匹配。
BTH_VENDOR_PATTERN 结构指定此类模式,这些模式遵循在 BTH_VENDOR_SPECIFIC_COMMAND 结构 的数据 成员中指定的特定于供应商的命令数据。 命令后的所有模式的最大总大小不应大于 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);
由于此命令而生成的事件将复制到输出缓冲区 (包括事件标头) 。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 版本:_Available Microsoft Windows Vista SP2 及更高操作系统版本。 |
标头 | bthioctl.h (包括 Bthioctl.h) |
IRQL | <= PASSIVE_LEVEL |