_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
指向要传递给 ObReferenceObject 和 ObDereferenceObject 的对象的指针,该对象保留其引用计数。
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) |