_BRB_L2CA_OPEN_CHANNEL構造体 (bthddi.h)
_BRB_L2CA_OPEN_CHANNEL構造体は、リモート デバイスに対して開く L2CAP チャネル、またはリモート デバイスによって開始された受信 L2CAP 接続要求を受け入れるか拒否するプロファイル ドライバーからの応答を記述します。
構文
struct _BRB_L2CA_OPEN_CHANNEL {
BRB_HEADER Hdr;
L2CAP_CHANNEL_HANDLE ChannelHandle;
union {
struct {
USHORT Response;
USHORT ResponseStatus;
};
USHORT Psm;
};
ULONG ChannelFlags;
BTH_ADDR BtAddress;
struct {
ULONG Flags;
L2CAP_CONFIG_VALUE_RANGE Mtu;
L2CAP_CONFIG_VALUE_RANGE FlushTO;
L2CAP_FLOWSPEC Flow;
USHORT LinkTO;
ULONG NumExtraOptions;
PL2CAP_CONFIG_OPTION ExtraOptions;
struct {
UCHAR ServiceType;
ULONG Latency;
} LocalQos;
} ConfigOut;
struct {
ULONG Flags;
L2CAP_CONFIG_VALUE_RANGE Mtu;
L2CAP_CONFIG_RANGE FlushTO;
} ConfigIn;
ULONG CallbackFlags;
PFNBTHPORT_INDICATION_CALLBACK Callback;
PVOID CallbackContext;
PVOID ReferenceObject;
CHANNEL_CONFIG_RESULTS OutResults;
CHANNEL_CONFIG_RESULTS InResults;
UCHAR IncomingQueueDepth;
};
メンバー
Hdr
現在の BRB に関する情報を含む BRB_HEADER 構造体。
ChannelHandle
正常な接続時に接続を識別するために使用されるハンドル。 BRB_L2CA_OPEN_CHANNELを送信すると、BRB が完了すると入力されます。 BRB_L2CA_OPEN_CHANNEL_RESPONSEを送信する場合は、BRB を送信する前にサーバーで入力する必要があります。 割り当てられる値は、 INDICATION_PARAMETERS::ConnectionHandle
IndicationRemoteConnect 中に渡された 値である必要があります。
Response
BRB_L2CA_OPEN_CHANNEL_RESPONSEでのみ使用されます。 CONNECT_RSP_RESULT_Xxx値の 1 つが使用されます。
BRB が STATUS_REQUEST_NOT_ACCEPTED の状態で を返す場合、 Response にはリモート ホストからの否定応答が含まれます。
ResponseStatus
Response がCONNECT_RSP_RESULT_PENDINGと等しい場合、このフィールドは有効です。 CONNECT_RSP_STATUS_XXX値の 1 つが使用されます。
Psm
チャネルがリモート デバイスへの接続に使用するプロトコル/サービス マルチプレクサー (PSM)。 BRB_L2CA_OPEN_CHANNEL要求と共に使用すると、このメンバーは入力フィールドとして設定されます。 BRB_L2CA_OPEN_CHANNEL_RESPONSE要求と共に使用する場合、このメンバーは出力フィールドとして使用されます。
ChannelFlags
開くチャネルの要件を指定するフラグ。 有効なフラグ値を次の表に示します。
フラグ | 説明 |
---|---|
CF_LINK_AUTHENTICATED | リンクを認証する必要があります。 |
CF_LINK_ENCRYPTED | リンクは暗号化する必要があります。 このフラグを設定すると、CF_LINK_AUTHENTICATED フラグも設定されます。 |
CF_LINK_SUPPRESS_PIN | プロファイル ドライバーは、ユーザーに PIN の入力を求めないことを示します。 |
BtAddress
接続の対象となるデバイスの Bluetooth アドレス。
ConfigOut
リモート デバイスに送信される BRB_L2CA_OPEN_CHANNEL BRB のパラメーター設定を含むサブ構造体。
ConfigOut.Flags
開くチャネルの要件を指定するフラグ。 有効なフラグ値を次の表に示します。
フラグ | 説明 |
---|---|
CF_LINK_AUTHENTICATED | リンクを認証する必要があります。 |
CF_LINK_ENCRYPTED | リンクは暗号化する必要があります。 このフラグを設定すると、CF_LINK_AUTHENTICATED フラグも設定されます。 |
CF_LINK_SUPPRESS_PIN | プロファイル ドライバーは、ユーザーに PIN の入力を求めないことを示します。 |
ConfigOut.Mtu
チャネルの送信半分のサイズをネゴシエートするために使用されるメッセージ転送ユニット (MTU) の範囲。
ConfigOut.FlushTO
チャネルの送信半分のフラッシュ タイムアウトに使用できる値の範囲。
ConfigOut.Flow
将来利用するために予約されています。 使用しないでください。
ConfigOut.LinkTO
リンク マネージャーのリンクタイムアウト。
ConfigOut.NumExtraOptions
ExtraOptions メンバーに含まれる配列項目の数。 ほとんどのクライアントでは、この値は 0 にする必要があります。
ConfigOut.ExtraOptions
ExtraOptions メンバーに含まれる配列項目の数。 ほとんどのクライアントでは、この値は 0 にする必要があります。
ConfigOut.LocalQos
将来利用するために予約されています。 使用しないでください。
ConfigOut.LocalQos.ServiceType
将来利用するために予約されています。 使用しないでください。
ConfigOut.LocalQos.Latency
将来利用するために予約されています。 使用しないでください。
ConfigIn
リモート デバイスから送信される受信 BRB_L2CA_OPEN_CHANNEL_RESPONSE BLOB を検証するためのパラメーター設定を含むサブ構造体。
ConfigIn.Flags
開くチャネルの要件を指定するフラグ。 有効なフラグ値を次の表に示します。
フラグ | 説明 |
---|---|
CF_LINK_AUTHENTICATED | リンクを認証する必要があります。 |
CF_LINK_ENCRYPTED | リンクは暗号化する必要があります。 このフラグを設定すると、CF_LINK_AUTHENTICATED フラグも設定されます。 |
CF_LINK_SUPPRESS_PIN | プロファイル ドライバーは、ユーザーに PIN の入力を求めないことを示します。 |
ConfigIn.Mtu
チャネルの送信半分のサイズをネゴシエートするために使用されるメッセージ転送ユニット (MTU) の範囲。
ConfigIn.FlushTO
チャネルの送信半分のフラッシュ タイムアウトに使用できる値の範囲。
CallbackFlags
イベントが発生したことをプロファイル ドライバーに通知するコールバック ルーチンを生成する必要があるイベントを指定するフラグ。 有効なフラグ値を次の表に示します。
フラグ | 説明 |
---|---|
CALLBACK_CONFIG_EXTRA_IN | 設定すると、リモート デバイスの構成要求に追加のオプションが含まれているときにコールバック ルーチンが呼び出されます。 設定されていない場合、追加の構成オプションは不明なオプションとして拒否されます。 このフラグは、BRB_L2CA_OPEN_CHANNEL_RESPONSE BLOB と共に使用されます。 |
CALLBACK_CONFIG_EXTRA_OUT | 設定されている場合、リモート デバイスがBRB_L2CA_OPEN_CHANNEL要求から追加の構成オプションを拒否すると、コールバック ルーチンが呼び出されます。 が設定されておらず、リモート デバイスが追加のオプションのために構成要求を拒否した場合、接続は閉じられます。 |
CALLBACK_CONFIG_QOS | 設定されている場合、リモート デバイスが QOS 値を含む構成要求を送信すると、コールバック ルーチンが呼び出されます。 このフラグが設定されておらず、リモート デバイスが構成要求で QOS パラメーターを送信するか、プロファイル ドライバーの要求された QOS パラメーターを拒否した場合、接続は切断されます。 |
CALLBACK_DISCONNECT | 設定されている場合、リモート デバイスが L2CAP チャネルから切断されると、コールバック ルーチンが呼び出されます。 |
CALLBACK_RECV_PACKET | 設定した場合、プロファイル ドライバーが受信 L2CAP パケットを受信すると、コールバック ルーチンが呼び出されます。 |
Callback
プロファイル ドライバーによって実装される L2CAP コールバック関数 。Bluetooth ドライバー スタックがを呼び出して、L2CAP 接続への変更についてプロファイル ドライバーに通知する必要があります。
CallbackContext
Callback メンバーで指定されたコールバック関数に渡すコンテキスト。 プロファイル ドライバーは、この値を定義します。
ReferenceObject
参照カウントを保持する ObReferenceObject および ObDereferenceObject に渡すオブジェクトへのポインター。
OutResults
送信要求の構成パラメーターを含む CHANNEL_CONFIG_RESULTS 構造体。
InResults
受信要求の構成パラメーターを含むCHANNEL_CONFIG_RESULTS構造体。
IncomingQueueDepth
受信キューの長さをメッセージ転送単位 (MTU) で指定します。
Response
このメンバーは、 BRB_L2CA_OPEN_CHANNEL_RESPONSE 要求の入力パラメーターと、 BRB_L2CA_OPEN_CHANNEL 要求の出力パラメーターとして使用されます。
BRB_L2CA_OPEN_CHANNEL_RESPONSE要求の場合、このメンバーは、リモート デバイスに対するプロファイル ドライバーの応答を示すフラグを保持します。 有効なフラグ値を次の表に示します。
フラグ | 説明 |
---|---|
CONNECT_RSP_RESULT_NO_RESOURCES | リソースが不足しているため、プロファイル ドライバーが接続を拒否しました。 |
CONNECT_RSP_RESULT_PENDING | プロファイル ドライバーは現在ビジー状態であり、接続を受け入れることができません。 後で再試行してください。 |
CONNECT_RSP_RESULT_PSM_NEG | PSM がサポートされていないため、プロファイル ドライバーは接続を拒否しました。 |
CONNECT_RSP_RESULT_SECURITY_BLOCK | プロファイル ドライバーは、セキュリティ上の理由から接続を拒否しました。 |
CONNECT_RSP_RESULT_SUCCESS | プロファイル ドライバーが接続を受け入れた。 |
BRB_L2CA_OPEN_CHANNEL BRB の場合、このメンバーには、プロファイル ドライバーが接続しようとしたリモート デバイスからの応答が含まれます。 有効なフラグ値を次の表に示します。
フラグ | 説明 |
---|---|
CONNECT_RSP_RESULT_NO_RESOURCES | リソースが不足しているため、リモート デバイスは接続を拒否しました。 |
CONNECT_RSP_RESULT_PSM_NEG | リモート デバイスが接続を拒否しました。 |
CONNECT_RSP_RESULT_SECURITY_BLOCK | リモート デバイスは、セキュリティ上の理由から接続を拒否しました。 |
CONNECT_RSP_RESULT_SUCCESS | リモート デバイスが接続を受け入れた。 |
ResponseStatus
BRB_L2CA_OPEN_CHANNEL_RESPONSE BRB の呼び出し中に Response メンバーが にCONNECT_RSP_RESULT_PENDING
設定されている場合、このメンバーは有効であり、次のいずれかの値を含みます。
- CONNECT_RSP_STATUS_AUTHENTICATION_PENDING
- CONNECT_RSP_STATUS_AUTHORIZATION_PENDING
- CONNECT_RSP_STATUS_NO_INFORMATION
注釈
L2CAP チャネルを開くには、プロファイル ドライバーがBRB_L2CA_OPEN_CHANNEL要求をビルドして送信する必要があります。
クライアントとして機能するプロファイル ドライバーは、宛先アドレス、PSM、およびさまざまな構成パラメーターを指定します。
BRB_L2CA_OPEN_CHANNEL要求が正常に完了すると、新しく作成された接続に関するさまざまな情報が OutResults メンバーと InResults メンバーで入手できます。 OutResults はチャネルの送信半分のパラメーターを指定し、 InResults は チャネルの受信半分のパラメーターを指定します。
Mtu メンバーなど、この構造体で渡されるいくつかの構成パラメーターは、リモート無線とのネゴシエーションに使用される範囲です。 クライアントは、チャネル ネゴシエーションが成功する可能性を高めるために、可能な限り広い範囲を提供する必要があります。 基本的な Bluetooth 最小 MTU サイズより大きい最小 MTU サイズの指定は、絶対に必要な場合にのみ行う必要があります。 ネゴシエーションが失敗した場合、接続は失敗します。
プロファイル ドライバーは、ExtraOptions メンバーに格納されている配列を格納するためにメモリを割り当てる必要があります。Callback メンバーで定義されているコールバック関数が Indication パラメーターに渡された値INDICATION_CODE IndicationFreeExtraOptions通知を返すまで、このメモリを解放しないでください。
_BRB_L2CA_OPEN_CHANNEL構造体の IncomingQueueDepth メンバーは、Bluetooth ドライバー スタックが受信する MTU の最大数を指定し、破棄を開始する前に接続でキューに入れます。 この値を非常に小さい値に設定すると、データ損失の可能性が高くなりますが、非常に大きな数に設定するとメモリ使用量が増加する可能性があります。 このメンバーを 10 に設定することは、効果的な侵害です。
リモート デバイスによって開始された受信 L2CAP 接続要求を受け入れるか拒否するには、プロファイル ドライバーがBRB_L2CA_OPEN_CHANNEL_RESPONSE要求をビルドして送信する必要があります。
プロファイル ドライバーは、Bluetooth ドライバー スタックがプロファイル ドライバーの L2CAP コールバック関数を呼び出し、コールバック関数の Indication パラメーターにIndicationRemoteConnect を渡すときに、BRB_L2CA_OPEN_CHANNEL_RESPONSE要求をビルドして送信する必要があります。
この構造体の Response メンバーの値に基づいて、Bluetooth ドライバー スタックは接続要求を受け入れるか拒否します。
プロファイル ドライバーは、この構造体の Response メンバーに適切な値を格納することによって、接続を受け入れる必要があるかどうかを指定します。
CONNECT_RSP_RESULT_PENDING応答を受信すると、接続クライアントは接続タイマーをリセットし、更新された接続応答メッセージを待つ必要があります。 応答メンバーが CONNECT_RSP_RESULT_PENDING に設定されているBRB_L2CA_OPEN_CHANNEL_RESPONSE BRB を呼び出すプロファイル ドライバーは、更新された接続値を持つ追加の BRB_L2CA_OPEN_CHANNEL_RESPONSE BRB をすぐに発行する必要があります。 更新された値には、 応答 メンバーに記述されている状態コード (CONNECT_RSP_RESULT_PENDING値の再送信を含む) のいずれかを指定できます。
プロファイル ドライバーは、ExtraOptions メンバーに格納されている配列を格納するメモリを割り当てる必要があります。Callback メンバーで定義されているコールバック関数が、Indication パラメーターに渡された値INDICATION_CODE IndicationFreeExtraOptions 通知を返すまで、このメモリを解放しないでください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | バージョン:Windows Vista 以降の_Supported。 |
Header | bthddi.h (Bthddi.h を含む) |