IOCTL_BTH_HCI_VENDOR_COMMAND IOCTL (bthioctl.h)

Запрос IOCTL_BTH_HCI_VENDOR_COMMAND позволяет приложениям Bluetooth отправлять на радио команды конкретных поставщиков.

Основной код

IRP_MJ_DEVICE_CONTROL

Входной буфер

Элемент 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.

Предупреждение Процесс, который отправляет IOCTL_BTH_HCI_VENDOR_COMMAND, должен иметь привилегию SE_LOAD_DRIVER_NAME. Процесс, выполняемый в системе или контексте администратора, может повысить привилегии с помощью функций SDK LookupPrivilegeValue и AdjustTokenPrivileges . В следующем примере кода показано, как получить эту привилегию. Обратите внимание, что в примере не демонстрируется обработка ошибок.
 
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

См. также раздел

BTH_COMMAND_HEADER

BTH_VENDOR_PATTERN

BTH_VENDOR_SPECIFIC_COMMAND