Wi-Fi direct 配对实现

本部分提供外围设备参与点击和设置以及点击和重新连接用例的设计准则和要求。

注意

本主题中所述的配对实现目前在 Windows 8.1 中受支持,仅用于与打印机设备配对。

Windows 10 及更高版本支持 NFC 通过 Wi-Fi 联盟的 Wi-Fi P2P 运营商配置记录 Wi-Fi 直接静态连接切换。 有关详细信息,请参阅 Wi-Fi 联盟

外设 Wi-Fi 直接设备配对

在点击期间,NFP 从连接设备接收配对信息。 NFP 将配对信息传递给 Windows。 Wi-Fi Direct 设备遵循 Wi-Fi Alliance 带外 (OOB) 配对过程和 NFC 论坛建议。 Windows 依赖于下面定义的专有配对消息。

Windows 将提示用户同意,如果同意,Windows 将按顺序尝试连接到每个地址,直到一个地址成功。 电脑中的 NFP 提供程序与连接设备之间没有进一步的交互。

以 NFC 为例,通过将配对信息存储在静态或被动 NFC 标记中来实现单向安装, (静态仿真模式下的主动 NFC 标记也可) 使用。 Windows 订阅此配对信息。 电脑上启用 NFC 的 NFP 提供程序从标记接收连接信息,并将其作为订阅者传递给 Windows。 收到连接信息后,Windows 将使用特定于设备类的技术执行带内设备的实际安装。

互操作性要求

为了确保 NFP 提供程序之间的互操作性,配对信息应封装在提供程序特定的消息格式中。

如本文档的其他地方所述,除了支持 NFC 的 NFP 提供商之外,对邻近感应技术没有特定要求。

Windows 要求支持 NFC 的 NFP 提供程序支持特定 NFC 论坛定义的机制,以便为单向配对传达 Wi-Fi 直接 OOB 配对信息。 NDEF 消息包含 TNF 字段值为 0x01 的第一条记录和等于“Hs”的 TYPE 字段,以及指向 Wi-Fi 直接运营商配置记录的备用运营商记录。 在此方法中,将仅使用 NDEF 记录的有效负载。

将 NFC 用于 Wi-Fi Direct 的单向配对

本部分详细介绍了 NFC、Wi-Fi Direct 和 Windows 如何协同工作以支持 Wi-Fi Direct 设备(如打印机)的单向无线配对。

NFP 提供程序引用

Wi-Fi 直接配对是使用 NFC 论坛标准化连接切换选择消息类型完成的。 下图概述了如何为 Wi-Fi Direct 设备配对应用“连接切换选择”消息,特别是 NDEF 记录 3 和 4。 “移交选择”消息描述了一条或多条“ac”或“备用运营商”记录。 这些记录按顺序遵循“移交选择”记录,每个记录都有一个明确定义的类型。 最后,该消息将包含 Microsoft 定义的设备配对记录,该记录为 Windows 提供有关如何处理配对操作的信息。

连接交接选择消息。

Wi-Fi Direct 设备配对消息

在后面的示例用例中,NFC 类型 2 标记用作说明性示例。 如果需要使用不同的 NFC 标记类型,则必须根据该标记定义正确封装 NDEF 消息。

字段 说明
Tnf 0x02 后面的“类型”字段的格式。 RFC 2046 中定义的媒体类型。
类型 'application/vnd.ms-windows.wfd.oob' 为此方案定义的新类型字符串。
OOB 数据的大小 WORD 最多支持 64 KB 的 OOB 数据。
Wi-Fi 直接 OOB 数据 <由上一个字段指示的大小的 blob> Wi-Fi 定义直接 OOB 数据。

Wi-Fi 直接 OOB 格式

下表描述了 WiFi Direct OOB 数据的格式。 OOB 单向数据可由任何单向 P2P OOB 设备传输。

属性 属性 ID 必需/可选 注意
OOB 标头

请参阅 OOB 标头属性格式表。
空值 必需 OOB 标头属性应存在于 P2P OOB 数据 Blob 中,并将其 OOB 类型值设置为“OOB 单向预配数据”。
OOB 设备信息

请参阅 OOB 设备信息属性格式表。
1 必须 此属性必须存在。 它提供有关此 P2P 设备的信息。
OOB 预配信息 2 必需 此属性必须存在。 它提供此 P2P 设备预期使用的预配信息。
OOB 配置超时 5 必需 此属性必须存在。 它提供有关此 P2P 设备将通过 Wi-Fi Direct 等待响应的时间的信息。

OOB 标头属性格式

字段名称 大小 (八进制数) 说明
总数据长度 2 变量 整个 OOB 数据 Blob (包括标头) 的长度。
Length 2 变量 OOB 标头中以下字段的长度。
版本 1 0x10 标识此 P2P OOB 记录版本的值。
OOB 类型 1 变量 标识 OOB 事务类型的值。 特定值在 OOB 事务类型 表中定义。
OUI 0 或 3 变量 特定于供应商的 OUI。 此值为可选值。 仅当 OOB 类型为特定于供应商时,必须存在。
OUI 类型 0 或 1 变量 特定于供应商的类型。 此值为可选值。 仅当 OOB 类型为特定于供应商时,必须存在。

OOB 事务类型

OOB 类型 (十六进制) 说明
0x00 OOB 单向预配数据
0x01 OOB 预配侦听器数据
0x02 OOB 预配连接器数据
0x03 OOB Reinvoke 数据
0x04-0xDC 预留
0xDD 特定于供应商
0xDE-0xFF 预留

OOB 设备信息属性格式

字段名称 大小 (八进制) 描述
属性 ID 1 1 标识 P2P OOB 属性的类型。 特定值在 P2P OOB 属性表中定义。
Length 2 变量 属性中以下字段的长度。
P2P 设备地址 6 如 P2P 规范中定义。 用于唯一引用 P2P 设备的标识符。
配置方法 2 如 P2P 规范中定义。 此设备支持的 WSC 方法。

注意: “配置方法”字段中的字节顺序应为 big-endian。
主设备类型 8 如 P2P 规范中定义。 P2P 设备的主设备类型。 仅包含 WSC 主设备类型属性的数据部分, (排除属性 ID 和长度字段) 。

注意: “主要设备类型”字段中的字节顺序应为 big-endian。
设备功能位图 1 如 P2P 规范中定义。 一组指示 P2P 设备功能的参数。
设备名称 变量 如 P2P 规范中定义。 P2P 设备的友好名称。 包含整个 WSC 设备名称属性 TLV 格式。

注意: “设备名称”字段中的字节顺序应为 big-endian。

P2P OOB 属性

OOB 类型 (十六进制) 描述
0x00 OOB 状态
0x01 OOB 设备信息
0x02 OOB 预配信息
0x03 OOB 组 ID
0x04 OOB 侦听通道
0x05 OOB 配置超时
0x06-0xDC 预留
0xDD 供应商特定属性
0xDE-0xFF 预留

OOB 预配信息属性格式

字段名称 大小 (八进制) 描述
属性 ID 1 1 标识 P2P OOB 属性的类型。 特定值在 P2P OOB 属性 表中定义。
Length 2 变量 属性中以下字段的长度。
预配设置位图 1 变量 一组预配设置选项,如“ 预配设置” 表所定义。
所选配置方法 2 如 P2P 规范中定义。 此 P2P 设备选择用于预配的 WSC 方法。
引脚长度 1 0 - 8 以下 PIN 数据字段中的字节数。 此字段设置为 0 表示没有其他 PIN 数据。
固定数据 变量 n 此字段是可选的。 仅当“PIN 长度”字段不为 0 时,此字段才存在,并且包含表示要用于预配的 PIN 的八进制数数组。

预配设置

位 () 信息 备注
0 创建新组 如果此预配信息用于与目标 P2P 设备形成新组,则“创建新组”位设置为 1。 否则,此预配信息用于加入现有组。
1 强制实施组类型设置 如果必须强制实施所需组类型位,则“强制组类型设置”位设置为 1;否则,“所需组类型”位只是首选项。
2 所需组类型 如果所需组类型是暂时性的,则所需组类型位应设置为 0;如果所需组类型持久,则应设置为 1。
3 - 7 预留  

OOB 配置超时属性格式

字段名称 大小 (八进制数) 描述
属性 ID 1 5 标识 P2P OOB 属性的类型。 特定值在 P2P OOB 属性 表中定义。
Length 2 1 属性中以下字段的长度。
侦听器配置超时 1 0 - 255 此 P2P 设备在 OOB 数据传输后等待 Wi-Fi 直接通信所花费的时间(以 100 毫秒为单位)。 (最大为 25.5 秒) 。

Windows 设备配对记录

Windows 设备配对记录遵循 NDEF 规范。 它向 Windows 提供有关如何处理连接切换选择消息的其他信息。 必须根据 NDEF 规范指定 TNF 和 Type 字段。 以下其他字段将按顺序列在 NDEF 记录的“有效负载”字段中。

字段名称 长度值 描述
Tnf 0x02 3 位 后面的“类型”字段的格式。 RFC 2046 中定义的媒体类型。
类型 'application/vnd.ms-windows.devicepairing' 0x28 字节 为此方案定义的新类型字符串。
MajorVersion 0x1 2 个字节 需要0x1主版本。
MinorVersion 0x0 2 个字节 需要0x0次要版本。
Flags 0x0或0x01 4 个字节 设置为 0x0 以尝试所有传输。

设置为 0x1 按顺序尝试安装,并在第一次成功后停止。 传输的首选项由备用载波记录序列指示。

注意 保留0x0002到0x0064的值。
设备友好名称的长度 设备友好名称字段的长度。 1 个字节 设备友好名称的长度。
设备友好名称 UTF-8 编码字符串,最多 255 字节。 设备友好名称的长度 将在客户端上的同意 UI 中显示的设备的友好名称。

Wi-Fi Direct 刚工作仪式,静态连接交接标记格式

例如,下面是 NFC 被动标记的典型实现。 这对应于具有 Wi-Fi Direct 运营商记录、网络共享打印机和 ms-device 配对记录的静态连接切换情况。

第一个表说明了标记的 Wi-Fi Direct 配对部分的格式。

Offset Content Length 说明
0 0x91 1 NDEF 记录标头:

MB=1b、ME=0b、CF=0b、SR=1b、IL=0b、TNF=001b
1 0x02 1 记录类型长度:2 个八进制
2 0x0A 1 记录类型长度:10 个八位字节
3 0x48 0x73 2 记录类型:“Hs”
5 0x12 1 版本号:主要 = 1,次要 = 2
6 0xD1 1 NDEF 记录标头:

MB=1b、ME=1b、CF=0b、SR=1b、IL=0b、TNF=001b
7 0x02 1 记录类型长度:2 个八进制
8 0x04 1 有效负载长度:4 个八位字节
9 0x61 0x63 2 记录类型:“ac”
11 0x01 1 运营商标志:CPS=1,“活动”
12 0x01 1 运营商数据参考长度:1 八进制
13 0x30 1 运营商数据参考:“0”
14 0x00 1 辅助数据引用计数:0
15 0x1A 1 NDEF 记录标头:

MB=0b、ME=0b、CF=0b、SR=1b、IL=1b、TNF=010b
16 0x22 1 记录类型名称长度:34 个八位字节
17 0x3E 1 有效负载长度:62 个八位字节
18 0x01 1 ID 长度:1 个八进制
19 0x61 0x70 0x70 0x6C 0x69 0x63 0x61 0x74

0x69 0x6F 0x6E 0x2F

0x76 0x6E 0x64 0x2E

0x6D 0x73 0x2D 0x77 0x69 0x6E 0x64 0x6F

0x77 0x73 0x2E 0x77

0x66 0x64 0x2E 0x6F 0x6F 0x62





34 记录类型名称:“application/vnd.ms-windows.wfd.oob”
53 0x30 1 ID:“0”
54 0x3E 0x00 2 Wi-Fi 直接 OOB 数据长度:62 个八位字节。 长度读取为无符号短,并且包含整个 blob。 包括 2 个长度八位字节。 此值必须以 little-endian 格式存储。
56 0x02、0x00 2 标头长度:2 个八位字节
58 0x10 1 版本:0x10
59 0x00 1 OOB 类型:0x00 (单向)
60 0x01 1 属性:0x01 (设备信息属性)
61 0x22 0x00 2 设备信息长度:34 个八进制数
63

0x01 0x23 0x34 0xab 0xcd 0xef
6 Wi-Fi Direct P2P 设备 MAC 地址:“01:23:34:ab:cd:ef”
69 0x01 0x00 2 配置类型
71

0x00 0x01 0x00 0x50 0xF2 0x00 0x00 0x00
8 主要设备类型
79 0x12 1 功能
80 0x10 0x11 2 属性:设备名称
82 0x00 0x0d 2 设备名称长度:13 个八进制数
84

0x43 0x6f 0x6e 0x74 0x6f 0x73 0x6f 0x20

0x4d 0x6f 0x75 0x73

0x65
13 UTF-8 中的设备友好名称。 请注意,没有 NULL 终止字符,UTF-8 可以是每个字符一个或两个字节。 此示例显示“Contoso 鼠标”
97 0x02 1 属性:预配信息
98 0x0c 0x00 2 预配信息长度:12 个八进制数
100 0x07 1 设置位图:新组,强制实施持久性
101 0x01 0x00 2 配置方法:pin 条目
103 0x08 1 引脚长度:8 个八位字节
104 0x01 0x02 0x03 0x04

0x05 0x06 0x07 0x08
8 固定:“12345678”
112 0x05 1 属性:配置超时信息
113 0x01 0x00 2 配置超时长度
115 0x64 1 10 秒,以 100 毫秒为单位

第二个表说明了标记的网络打印机配对部分的格式。

Offset Content Length 说明
116 0x12 1 NDEF 记录标头:
MB=0b,ME=0b, CF=0b, SR=1b, IL=0b,TNF=010b
117 0x29 1 “类型长度”字段
118 0x19 1 有效负载长度字段
119

0x61 0x70 0x70 0x6c 0x69 0x63 0x61 0x74



0x69 0x6f 0x6e 0x2f 0x76 0x6e 0x64 0x2e

0x6d 0x73 0x2d 0x77

0x69 0x6e 0x64 0x6f

0x77 0x73 0x2e 0x6e

0x77 0x70 0x72 0x69 0x6e 0x74 0x69 0x6e

0x67 0x2e 0x6f 0x6f 0x62



41 记录类型名称:“application/vnd.ms-windows.nwprinting.oob”
160

0x5c 0x5c 0x70 0x72 0x69 0x6e 0x74 0x53

0x65 0x72 0x76 0x65

0x72 0x5c 0x70 0x72

0x69 0x6e 0x74 0x65

0x72 0x4e 0x61 0x6d 0x65

25 打印机名称:“\printServer\printerName”

此第三个表说明了标记的 MS-Device 配对部分的格式。

Offset Content Length 说明
185 0x52 1 NDEF 记录标头:

MB=0b,ME=1b,CF=0b,SR=1b,IL=0b,TNF=010b
186 0x28 1 “类型长度”字段
187 0x15 1 有效负载长度字段
188

0x61 0x70 0x70 0x6c 0x69 0x63 0x61 0x74

0x69 0x6f 0x6e 0x2f

0x76 0x6e 0x64 0x2e

0x6d 0x73 0x2d 0x77

0x69 0x6e 0x64 0x6f

0x77 0x73 0x2e 0x64

0x65 0x76 0x69 0x63

0x65 0x70 0x61 0x69 0x72 0x69 0x6E 0x67

40 记录类型名称:“application/vnd.ms-windows.devicepairing”
228 0x00 0x01 0x00

0x00
4 版本:主要 = 1,次要 = 0
232 0x00 1 标志:设置为 0,请尝试所有传输
233 0x0F 1 设备友好名称的长度
234 0x43 0x6f 0x6e 0x74

0x6f 0x73 0x6f 0x20

0x50 0x72 0x69 0x6e

0x74 0x65 0x72
15 向用户显示的设备友好名称:“Contoso Printer”

Wi-Fi 直接连接要求

设备和客户端必须打开 Wi-Fi 无线电。 否则,配对将失败。

处理边缘事例

如果用户之前已配对设备,但随后从设备列表中手动删除设备,则再次点击将导致尝试安装或配对。

如果用户进入操作范围,但在传输带外 (OOB) 信息之前突然离开,则设备可能会变得可连接,但电脑不会查找该设备。 在这种情况下,电脑将没有同意 UI,用户需要再次点击。 如果设备在再次点击时已可发现,它应保持可发现状态,并应重置超时期限。

对于 Wi-Fi Direct 设备,如果 Wi-Fi 无线电关闭,则安装不会成功。

如果用户几乎同时点击两个设备,则只会尝试对第一个收到的 OOB 信息进行配对。

在运行不支持“点击设置”或“点击以重新连接”的操作系统的系统上点击设备的任何尝试都可能导致设备进入可连接模式,但不会进行配对。 用户需要使用为蓝牙提供的配对 UI,并使用配对按钮启动配对。