Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В следующей процедуре описан общий процесс, который выполняет драйвер профиля для сборки и отправки блока запроса Bluetooth (BRB). BRB — это блок данных, описывающий выполнение операции Bluetooth.
Создание и отправка BRB
- Выделение IRP. Дополнительные сведения об использовании IRPs см. в разделе Обработка IRPs.
- Выделите BRB. Чтобы выделить BRB, вызовите функцию BthAllocateBrb, которую стек драйверов Bluetooth экспортирует для использования драйверами профилей. Чтобы получить указатель на функцию BthAllocateBrb, см. запросы к интерфейсам Bluetooth.
- Инициализировать параметры BRB. Каждый BRB использует соответствующую структуру. Задайте элементы структуры в соответствии с предполагаемым использованием. Для получения списка BRB и их соответствующих структур см. раздел в стеке драйверов Bluetooth.
- Инициализировать параметры IRP. Установите член IRP MajorFunction на IRP_MJ_INTERNAL_DEVICE_CONTROL. Задайте для элемента Parameters.DeviceIoControl.IoControlCode значение IOCTL_INTERNAL_BTH_SUBMIT_BRB. Задайте элемент Parameters.Others.Argument1, чтобы он указывал на BRB.
- Передайте IRP по стеку драйверов. Вызовите IoCallDriver, чтобы отправить IRP следующему драйверу ниже.
В следующем примере псевдокода показано, как настроить L2CAP Ping BRB, чтобы он обрабатывался стеком драйверов Bluetooth. Для удобства чтения пример не демонстрирует обработку ошибок.
#include <bthddi.h>
// Code for obtaining the BthInterface pointer
// Define a custom pool tag to identify your profile driver's dynamic memory allocations.
// You should change this tag to easily identify your driver's allocations from other drivers.
#define PROFILE_DRIVER_POOL_TAG '_htB'
PIRP Irp;
Irp = IoAllocateIrp( DeviceExtension->ParentDeviceObject->StackSize, FALSE );
PBRB_L2CA_PING BrbPing; // Define storage for a L2CAP Ping BRB
// Allocate the Ping BRB
BrbPing = BthInterface->BthAllocateBrb( BRB_L2CA_PING, PROFILE_DRIVER_POOL_TAG );
// Set up the next IRP stack location
PIO_STACK_LOCATION NextIrpStack;
NextIrpStack = IoGetNextIrpStackLocation( Irp );
NextIrpStack->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL;
NextIrpStack->Parameters.DeviceIoControl.IoControlCode = IOCTL_INTERNAL_BTH_SUBMIT_BRB;
NextIrpStack->Parameters.Others.Argument1 = BrbPing;
// Pass the IRP down the driver stack
NTSTATUS Status;
Status = IoCallDriver( DeviceExtension->NextLowerDriver, Irp );