_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值之一。

如果 BRB 返回状态为STATUS_REQUEST_NOT_ACCEPTED,则 响应 将包含来自远程主机的负响应。

ResponseStatus

如果 响应 等于CONNECT_RSP_RESULT_PENDING,则此字段有效。 使用其中一个CONNECT_RSP_STATUS_XXX值。

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

连接的设备的蓝牙地址。

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 成员中包含的数组项数。 对于大多数客户端,此值应为零。

ConfigOut.ExtraOptions

ExtraOptions 成员中包含的数组项数。 对于大多数客户端,此值应为零。

ConfigOut.LocalQos

保留以供将来使用。 请勿使用。

ConfigOut.LocalQos.ServiceType

保留以供将来使用。 请勿使用。

ConfigOut.LocalQos.Latency

保留以供将来使用。 请勿使用。

ConfigIn

包含参数设置的子结构,用于验证从远程设备发送的传入 BRB_L2CA_OPEN_CHANNEL_RESPONSE BRB。

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 BR。
CALLBACK_CONFIG_EXTRA_OUT 如果已设置,则当远程设备拒绝来自BRB_L2CA_OPEN_CHANNEL请求的额外配置选项时,将调用回调例程。 如果未设置,并且远程设备由于其他选项而拒绝配置请求,连接将关闭。
CALLBACK_CONFIG_QOS 如果设置,远程设备发送包含 QOS 值的配置请求时,将调用回调例程。 如果未设置此标志,远程设备要么在配置请求中发送 QOS 参数,要么拒绝配置文件驱动程序请求的 QOS 参数,连接将断开连接。
CALLBACK_DISCONNECT 如果设置,当远程设备与 L2CAP 通道断开连接时,将调用回调例程。
CALLBACK_RECV_PACKET 如果已设置,则当配置文件驱动程序收到传入的 L2CAP 数据包时,将调用回调例程。

Callback

L2CAP 回调函数 由配置文件驱动程序实现,蓝牙驱动程序堆栈应调用以通知配置文件驱动程序对 L2CAP 连接所做的任何更改。

CallbackContext

要传递给 Callback 成员中指定的回调函数的上下文。 配置文件驱动程序定义此值。

ReferenceObject

指向要传递给 ObReferenceObjectObDereferenceObject 的对象的指针,该对象保留其引用计数。

OutResults

包含出站请求的配置参数的 CHANNEL_CONFIG_RESULTS 结构。

InResults

包含入站请求的配置参数的CHANNEL_CONFIG_RESULTS结构。

IncomingQueueDepth

指定消息传输单元(MTU)中的传入队列长度。

响应

此成员用作 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 期间,响应 成员设置为 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 成员)是用于与远程无线电协商的范围。 客户端应尽可能广泛地提供,以增加成功通道协商的机会。 仅当绝对必要时,才应指定大于基本蓝牙最小 MTU 大小的最小 MTU 大小。 如果协商失败,连接将失败。

配置文件驱动程序必须分配内存来存储存储在 ExtraOptions 成员中的数组,并且除非在 Callback 成员中定义的回调函数返回并返回 IndicationFreeExtraOptions 通知 INDICATION_CODE 值,否则不应释放此内存。

_BRB_L2CA_OPEN_CHANNEL结构的 IncomingQueueDepth 成员指定蓝牙驱动程序堆栈在开始放弃连接之前接收和排队的最大 MTU 数。 将此值设置为极少数会增加数据丢失的可能性,同时将其设置为非常大的数量可能会增加内存使用量。 将此成员设置为 10 是有效的妥协。

若要接受或拒绝远程设备发起的传入 L2CAP 连接请求,配置文件驱动程序应 生成并发送 BRB_L2CA_OPEN_CHANNEL_RESPONSE 请求。

当蓝牙驱动程序堆栈调用配置文件驱动程序的 L2CAP 回调函数 时,配置文件驱动程序应生成并发送 BRB_L2CA_OPEN_CHANNEL_RESPONSE 请求,并在回调函数的 指示 参数中传递 IndicationRemoteConnect

根据此结构的 响应 成员的值,蓝牙驱动程序堆栈随后将接受或拒绝连接请求。

配置文件驱动程序指定是否应通过将此结构的 响应 成员中存储适当的值来接受连接。

收到CONNECT_RSP_RESULT_PENDING响应后,连接客户端应重置其连接计时器并等待更新的连接响应消息。 调用 BRB_L2CA_OPEN_CHANNEL_RESPONSE BRB 的配置文件驱动程序,其中 响应 成员设置为CONNECT_RSP_RESULT_PENDING应立即发出具有更新连接值的附加 BRB_L2CA_OPEN_CHANNEL_RESPONSE BRB。 更新的值可以是 响应 成员中描述的任何状态代码,包括重新发送CONNECT_RSP_RESULT_PENDING值。

配置文件驱动程序必须分配内存以存储存储在 ExtraOptions 成员中的数组,并且除非在 Callback 成员中定义的回调函数返回并返回 IndicationFreeExtraOptions 通知 INDICATION_CODE 值,否则不应释放此内存。

要求

要求 价值
最低支持的客户端 Windows Vista 及更高版本中的版本:_Supported。
标头 bthddi.h (包括 Bthddi.h)

另请参阅

BRB_HEADER

BRB_L2CA_OPEN_CHANNEL

BRB_L2CA_OPEN_CHANNEL_RESPONSE

BRB_L2CA_REGISTER_SERVER

CHANNEL_CONFIG_RESULTS

INDICATION_CODE

INDICATION_PARAMETERS

L2CAP 回调函数

L2CAP_CONFIG_OPTION

ObDereferenceObject

ObReferenceObject