IOCTL_BTH_HCI_VENDOR_COMMAND IOCTL (bthioctl.h)
Запрос IOCTL_BTH_HCI_VENDOR_COMMAND позволяет приложениям Bluetooth отправлять на радио команды конкретных поставщиков.
Основной код
Входной буфер
Элемент AssociatedIrp.SystemBuffer указывает на структуру BTH_VENDOR_SPECIFIC_COMMAND . Структура содержит идентификатор производителя, версию протокола управления ссылками (LMP), заголовок команды HCI и связанные данные команды поставщика, которые включают необязательные данные шаблона для сопоставления события с командой.
Длина входного буфера
Длина структуры BTH_VENDOR_SPECIFIC_COMMAND .
Выходной буфер
Элемент AssociatedIrp.SystemBuffer указывает на буфер, содержащий данные события, возвращаемые радио. Данные доступны в элементе EventInfoструктуры 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;
Элемент EventSize предоставляет размер данных о событиях конкретного поставщика, возвращаемых радио.
Длина выходного буфера
Длина структуры BTH_VENDOR_EVENT_INFO .
Блок состояния
Если запрос выполнен успешно, элементу Information структуры STATUS_BLOCK присваивается размер (в байтах) буфера, в котором содержится ответ команды.
Для элемента Status задано одно из значений в следующей таблице.
Значение состояния | Описание |
---|---|
STATUS_SUCCESS | IOCTL успешно завершен. |
STATUS_BUFFER_TOO_SMALL | Переданный входной буфер был слишком мал. |
STATUS_INVALID_PARAMETER | Переданный входной буфер был недопустимым. |
STATUS_PRIVILEGE_NOT_HELD | Вызывающий объект не имеет необходимых привилегий. |
STATUS_INSUFFICIENT_RESOURCES | Недостаточно памяти для обработки запроса. |
Комментарии
Запрос IOCTL_BTH_HCI_VENDOR_COMMAND предоставляет механизм, позволяющий поставщикам создавать команды, относящиеся к их радиомодулем Bluetooth.
Значения версии идентификатора производителя и протокола управления ссылками (LMP), которые находятся в BTH_VENDOR_SPECIFIC_COMMAND структура помогает предотвратить отправку определенных поставщиком команд на неправильный радио. Версия LMP позволяет поставщикам отправлять команды конкретных поставщиков радиомодулям, имеющим соответствующую версию LMP. Если версия LMP равна нулю, все радиомодулы от этого поставщика будут получать команду конкретного поставщика.
Шаблоны необходимы, если команда конкретного поставщика не соответствует стандартному элементу управления потоком HCI и в ответ на команду конкретного поставщика создается событие конкретного поставщика.
Если требуются шаблоны, за командой должны следовать BTH_VENDOR_PATTERN структуры для шаблонов, присутствующих в событии . Эти шаблоны позволяют стеку драйверов Bluetooth сопоставлять события конкретного поставщика с соответствующими командами поставщика.
Структура BTH_VENDOR_PATTERN определяет такие шаблоны, которые соответствуют данным команды конкретного поставщика, указанным в элементе Data структуры 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);
Событие, созданное из-за этой команды, копируется в выходной буфер (включая заголовок события).
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Versions:_Available в Microsoft Windows Vista с пакетом обновления 2 (SP2) и более поздних версиях операционной системы. |
Верхняя часть | bthioctl.h (включая Bthioctl.h) |
IRQL | <= PASSIVE_LEVEL |