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 メンバーは、無線から返されるイベント データを含むバッファーを指します。 データは、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要求は、ベンダーが Bluetooth 無線に固有のコマンドを作成できるようにするメカニズムを提供します。

の製造元 ID とリンク管理プロトコル (LMP) バージョン値 BTH_VENDOR_SPECIFIC_COMMAND 構造は、ベンダー固有のコマンドが間違った無線に送信されるのを防ぐのに役立ちます。 LMP バージョンを使用すると、ベンダーは、一致する LMP バージョンを持つ無線にベンダー固有のコマンドを送信できます。 LMP バージョンが 0 の場合、そのベンダーからのすべての無線はベンダー固有のコマンドを受け取ります。

ベンダー固有のコマンドが標準の HCI フロー制御に従っていない場合に、ベンダー固有のコマンドに応答してベンダー固有のイベントが生成される場合は、パターンが必要です。

パターンが必要な場合は、コマンドの後に、イベントに存在するパターンの BTH_VENDOR_PATTERN 構造体が続く必要があります。 これらのパターンを使用すると、Bluetooth ドライバー スタックはベンダー固有のイベントと対応するベンダー固有のコマンドを照合できます。

BTH_VENDOR_PATTERN構造体は、BTH_VENDOR_SPECIFIC_COMMAND 構造体の Data メンバーで指定されているベンダー固有のコマンド データに従うこのようなパターンを指定します。 コマンドに続くすべてのパターンの最大合計サイズは、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);

このコマンドのために生成されたイベントは、出力バッファー (イベント ヘッダーを含む) にコピーされます。

要件

要件
サポートされている最小のクライアント バージョン:Microsoft Windows Vista SP2 以降のオペレーティング システムバージョンの_Available。
Header bthioctl.h (Bthioctl.h を含む)
IRQL <= PASSIVE_LEVEL

こちらもご覧ください

BTH_COMMAND_HEADER

BTH_VENDOR_PATTERN

BTH_VENDOR_SPECIFIC_COMMAND