Bluetooth 要求ブロック の構築と送信 (BRB)
次の手順では、プロファイル ドライバーが Bluetooth 要求ブロック (BRB) をビルドして送信するために従う一般的なプロセスの概要を示します。 BRB は、実行する Bluetooth 操作を記述するデータのブロックです。
BRB をビルドして送信するには
- IRPを割り振ります。 IRPsの使用方法についての詳細は、以下を参照してください 取り扱いIRPs.
- BRBを割り当てる。 BRBを割り当てるためには、コールその Bth配分するBrb 機能 Bluetooth ドライバー スタックは、プロファイル ドライバーで使用できるようにエクスポートされます。 へのポインターを取得するには Bth配分するBrb を参照、してください 関数 Bluetooth インターフェースの ための ング。
- BRB のパラメーター化を初期化します。 各 BRB は、対応する構造体を使用します。 構造体のメンバーを意図された用途に従って設定してください。 BRBとそれに対応する構造の一覧については、以下を参照してください Bluetoothドライバースタックの使用。
- IRP のパラメーター化を初期化します。 セットその 主要機能 の会員 IRP へIRP_MJ_INTERNAL_DEVICE_CONTROL。 セットその Parameters.DeviceIoControl.IoControlCode IOCTL_INTERNAL_BTH_SUBMIT_BRB のメンバー。 セットその Parameters.Others.Argument1 会員 までBRB をポイントします。
- IRP をドライバー スタックに渡します。 コール IoCallDriver までIRP を一つ下のドライバーに送信します。
次の擬似コードの例は、Bluetooth ドライバー スタックが処理できるように L2CAP Ping BRB を設定する方法を示しています。 読みやすくするために、この例ではエラー処理を示していません。
#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 );