枚举关键字

NDIS 6.0 及更高版本的 NDIS 为网络设备的微型端口驱动程序提供标准化枚举关键字。 枚举关键字与在菜单中显示为列表的值相关联。

以下示例演示枚举关键字 (keyword) 的 INF 文件定义。

HKR, Ndi\params\<SubkeyName>, ParamDesc, 0, "%<SubkeyName>%"
HKR, Ndi\params\<SubkeyName>, Type, 0, "enum"
HKR, Ndi\params\<SubkeyName>, Default, 0, "3"
HKR, Ndi\params\<SubkeyName>, Optional, 0, "0"
HKR, Ndi\params\<SubkeyName>\enum, "0", 0, "%Disabled%"
HKR, Ndi\params\<SubkeyName>\enum, "1", 0, "%Tx Enabled%"
HKR, Ndi\params\<SubkeyName>\enum, "2", 0, "%Rx Enabled%"
HKR, Ndi\params\<SubkeyName>\enum, "3", 0, "%Rx & Tx Enabled%"

常规枚举关键字为:

*SpeedDuplex
设备支持的速度和双工设置。 设备 INF 文件应仅列出关联设备支持的设置。 也就是说,对于仅支持全双工模式的以太网 10/100 设备,千兆或更高速度或半双工的设置不应在关联的 INF 文件中列出。

未专门定义且枚举值为 0 到 10 的速度值可以设置为直接以 Mbps 为单位的值的数字。 直接值必须至少为 1,000 Mbps (1 Gbps) 及以上。 下面是一些直接指定速度的示例:

SpeedDuplex 值 结果速度
1,000 1 Gbps
10,000 10 Gbps
25,000 25 Gbps
50,000 50 Gbps
100,000 100 Gbps

*FlowControl
设备在发送或接收路径中启用或禁用流控制的功能。

注意以太网设备目前支持流控制,并且 LAN 的Windows 8内置驱动程序默认启用流控制。 当内核调试器连接到其中一个 LAN 适配器时,NIC 将开始将流控制暂停帧推送到网络中。 大多数网络交换机的反应是暂时关闭连接到同一集线器的所有其他计算机的网络。 这是一种常见的开发方案,最终用户体验既不可取,又难以诊断。

注意 客户端和服务器默认值不同;请参阅下面的默认值表。

因此,在 Windows 8 及更高版本中,在计算机上启用调试时,NDIS 将自动禁用流控制 (例如,在命令行) 键入 bcdedit /set debug。 启用内核调试并且微型端口调用 NdisReadConfiguration 并为 Keyword 参数传递“*FlowControl”时,NDIS 将替代配置的值并返回零。

如果需要在调试时启用流控制,NDIS 会提供 AllowFlowControlUnderDebugger 注册表值来允许你执行此操作。 AllowFlowControlUnderDebugger 注册表值阻止 NDIS 禁用流控制,并允许 NIC 保留其配置的行为。 可以在以下注册表项下找到它:

\ HKEY_LOCAL_MACHINE系统\CurrentControlSet\服务\Ndis\参数

将此注册表值设置为 0x00000001。

如果不存在,可以创建一个名称为 AllowFlowControlUnderDebugger 且类型 为 REG_DWORD 的值,并将其设置为 0x00000001。

*PriorityVLANTag
一个 值,该值指示设备是否已启用或禁用了为数据包优先级和虚拟 LAN 插入 802.1Q 标记的功能, (VLAN) 。 此关键字 (keyword) 不指示设备是启用或禁用数据包优先级还是 VLAN 标记。 相反,它描述了以下内容:

  • 设备是否在发送操作期间插入 802.1Q 标记
  • NET_BUFFER_LIST 带外 ( OOB) 信息中是否提供 802.1Q 标记信息
  • 设备是否在接收操作期间将 802.1Q 标记复制到 OOB

微型端口驱动程序应从所有接收数据包中删除 802.1Q 标头,而不考虑 *PriorityVLANTag 设置。 如果 802.1Q 标头保留在数据包中,则其他驱动程序可能无法正确分析数据包。

如果在接收路径上启用了 Rx 标志,微型端口驱动程序应将删除的 802.1Q 标头复制到 OOB 中。

否则,如果禁用 Rx 标志,微型端口驱动程序不应将删除的 802.1Q 标头复制到 OOB 中。

如果在传输路径上启用了 Tx 标志,微型端口驱动程序应执行以下操作:

  • 将 802.1Q 标头插入到每个传出数据包中,如果 OOB) 中存在任何非零数据,则使用来自 OOB (的数据填充该标头。
  • NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES (NDIS_MAC_OPTION_8021P_PRIORITY 和NDIS_MAC_OPTION_8021Q_VLAN) 中播发相应的 MacOptions

否则,如果禁用 Tx 标志,则:

  • 微型端口筛选器不应遵循 OOB (中的 802.1Q 信息,因此不应) 插入任何标记。
  • 微型端口筛选器不应在 NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES 中播发相应的 MacOptions

注意如果微型端口驱动程序支持 NDIS 服务质量 (QoS) ,则它还必须读取 *QOS 关键字 (keyword) 值。 根据 QOS 关键字 (keyword) 值,*PriorityVLANTag 关键字 (keyword) 值会以不同的方式解释。 有关详细信息,请参阅 NDIS QoS 的标准化 INF 关键字

*InterruptModeration
一个 值,该值描述设备是启用或禁用中断审查。 中断审查算法依赖于设备。 设备制造商可以使用非标准化关键字来支持算法设置。 有关中断审查的详细信息,请参阅 中断审查

*Rss
一个 值,该值描述设备是启用或禁用接收端缩放 (RSS) 。 有关 RSS 的详细信息,请参阅 接收方缩放

*HeaderDataSplit
一个 值,该值描述设备是启用或禁用标头数据拆分。 有关标头数据拆分的详细信息,请参阅 标头数据拆分

以下关键字与连接卸载服务相关联:

*TCPConnectionOffloadIPv4

*TCPConnectionOffloadIPv6

有关连接卸载关键字的详细信息,请参阅 使用注册表值启用和禁用连接卸载

以下关键字与任务卸载服务相关联:

*IPChecksumOffloadIPv4

*TCPChecksumOffloadIPv4

*TCPChecksumOffloadIPv6

*UDPChecksumOffloadIPv4

*UDPChecksumOffloadIPv6

*LsoV1IPv4

*LsoV2IPv4

注意对于同时支持大型发送卸载版本 1 (LSOv1) 和 LSOv2 over IPv4 的设备,在 INF 文件和注册表值中只应使用 *LsoV2IPv4 关键字 (keyword) 。 例如,如果 *LsoV2IPv4 关键字 (keyword) 出现在 INF 文件中,并且 *LsoV1IPv4 关键字 (keyword) 出现在注册表中 (反之亦然) ,则 *LsoV2IPv4 关键字 (keyword) 始终优先。

*LsoV2IPv6

*IPsecOffloadV1IPv4

*IPsecOffloadV2

*IPsecOffloadV2IPv4

*TCPUDPChecksumOffloadIPv4

*TCPUDPChecksumOffloadIPv6

有关 TCP/IP 卸载关键字的详细信息,请参阅 使用注册表值启用和禁用任务卸载

本主题末尾的表中的列描述了枚举关键字的以下属性:

SubkeyName
必须在 INF 文件中指定且显示在注册表中的关键字 (keyword) 的名称。

ParamDesc
SubkeyName 关联的显示文本。


与列表中的每个选项关联的枚举整数值。 此值存储在 NDI\params\SubkeyName\Value 中。

EnumDesc
与菜单中显示的每个值关联的显示文本。

Default
菜单的默认值。

下表列出了所有关键字,并描述了驱动程序必须用于上述属性的值。 有关关键字 (keyword) 的详细信息,请在 WDK 文档中搜索关键字 (keyword) 。

SubkeyName ParamDesc EnumDesc
*SpeedDuplex 速度 & 双工 0(默认值) 自动协商
1 10 Mbps 半双工
2 10 Mbps 全双工
3 100 Mbps 半双工
4 100 Mbps 全双工
5 1.0 Gbps 半双工
6 1.0 Gbps 全双工
7 10 Gbps 全双工
8 20 Gbps 全双工
9 40 Gbps 全双工
10 100 Gbps 全双工
*FlowControl 流控制 0(服务器默认值) Tx & Rx 已禁用
1 已启用 Tx
2 Rx 已启用
3 (客户端默认) 已启用 Rx & Tx
4 自动协商
*PriorityVLANTag 数据包优先级 & VLAN 0 数据包优先级 & VLAN 已禁用
1 已启用数据包优先级
2 已启用 VLAN
3 (默认) 已启用数据包优先级 & VLAN
*InterruptModeration 中断调解 0 已禁用
1 (默认) 已启用
*Rss 接收方缩放 0 已禁用
1 (默认) 已启用
*HeaderDataSplit 标头数据拆分 0(默认值) 已禁用
1 已启用
*TCPConnectionOffloadIPv4 TCP 连接卸载 (IPv4) 0 已禁用
1 (默认) 已启用
*TCPConnectionOffloadIPv6 TCP 连接卸载 (IPv6) 0 已禁用
1 (默认) 已启用
*IPChecksumOffloadIPv4 IPv4 校验和卸载 0 已禁用
1 已启用 Tx
2 Rx 已启用
3 (默认) 已启用 Rx & Tx
*TCPChecksumOffloadIPv4 TCP 校验和卸载 (IPv4) 0 已禁用
1 Tx 已启用
2 Rx 已启用
3 (默认) 已启用 Rx & Tx
*TCPChecksumOffloadIPv6 TCP 校验和卸载 (IPv6) 0 已禁用
1 Tx 已启用
2 Rx 已启用
3 (默认) 已启用 Rx & Tx
*UDPChecksumOffloadIPv4 UDP 校验和卸载 (IPv4) 0 已禁用
1 Tx 已启用
2 Rx 已启用
3 (默认) 已启用 Rx & Tx
*UDPChecksumOffloadIPv6 UDP 校验和卸载 (IPv6) 0 已禁用
1 Tx 已启用
2 Rx 已启用
3 (默认) 已启用 Rx & Tx
*LsoV1IPv4 大型发送卸载版本 1 (IPv4) 0 已禁用
1 (默认) 已启用
*LsoV2IPv4 大型发送卸载版本 2 (IPv4) 0 已禁用
1 (默认) 已启用
*LsoV2IPv6 大型发送卸载版本 2 (IPv6) 0 已禁用
1 (默认) 已启用
*IPsecOffloadV1IPv4 IPsec 卸载版本 1 (IPv4) 0 已禁用
1 已启用身份验证标头
2 ESP 已启用
3 (默认) 已启用身份验证标头 & ESP
*IPsecOffloadV2 IPsec 卸载 0 已禁用
1 已启用身份验证标头
2 ESP 已启用
3 (默认) 已启用身份验证标头 & ESP
*IPsecOffloadV2IPv4 仅 IPsec 卸载 (IPv4) 0 已禁用
1 已启用身份验证标头
2 ESP 已启用
3 (默认) 已启用身份验证标头 & ESP
*TCPUDPChecksumOffloadIPv4 TCP/UDP 校验和卸载 (IPv4) 0 已禁用
1 Tx 已启用
2 Rx 已启用
3 (默认) 已启用 Tx 和 Rx
*TCPUDPChecksumOffloadIPv6 TCP/UDP 校验和卸载 (IPv6) 0 已禁用
1 Tx 已启用
2 Rx 已启用
3 (默认) 已启用 Tx 和 Rx