添加和删除低功耗协议卸载

若要添加低功耗协议卸载,NDIS 协议驱动程序会发出 OID_PM_ADD_PROTOCOL_OFFLOAD的 OID 集请求。 NDIS_OID_REQUEST 结构的 InformationBuffer 成员包含指向NDIS_PM_PROTOCOL_OFFLOAD结构的指针。

注意 如果传入的数据包与卸载的协议和 (模式匹配,例如,由于) 配置错误,则网络适配器应响应数据包并唤醒计算机。

NDIS_PM_PROTOCOL_OFFLOAD结构包括以下信息:

成员 说明

Priority

包含协议卸载的优先级。 如果在没有可用于更多协议卸载的资源时,过度部署的驱动程序添加了更高优先级的协议卸载,则 NDIS 可能会删除优先级较低的协议卸载,以释放资源。 微型端口驱动程序应忽略此成员。 协议驱动程序可以提供预定义范围内从NDIS_PM_PROTOCOL_OFFLOAD_PRIORITY_LOWEST到NDIS_PM_PROTOCOL_OFFLOAD_PRIORITY_HIGHEST的任何值。

ProtocolOffloadType

包含指定协议卸载类型的 NDIS_PM_PROTOCOL_OFFLOAD_TYPE 值。

FriendlyName

包含一个 NDIS_PM_COUNTED_STRING 结构,该结构包含用户可读的低功耗协议卸载说明。

ProtocolOffloadId

包含标识卸载协议的 NDIS 提供的值。 在 NDIS 将 OID_PM_ADD_PROTOCOL_OFFLOAD 的 OID 请求向下发送到基础 NDIS 驱动程序或完成对超载驱动程序的请求之前,NDIS 会将 ProtocolOffloadId 设置为在网络适配器上的协议卸载之间唯一的值。

NextProtocolOffloadOffset

包含OID_PM_PROTOCOL_OFFLOAD_LIST OID 列表中下一个NDIS_PM_PROTOCOL_OFFLOAD结构的偏移量(OID 请求 InformationBuffer 的开头)。 有关OID_PM_PROTOCOL_OFFLOAD_LIST的详细信息,请参阅 获取低功耗协议卸载的当前参数设置

ProtocolOffloadParameters

包含联合中的 IPv4ARPParametersIPv6NSParametersDot11RSNRekeyParameters 结构之一。

术语 说明

IPv4ARPParameters

包含 IPv4 ARP 参数。

IPv6NSParameters

包含 IPv6 邻居请求 (NS) 参数。

Dot11RSNRekeyParameters

包含 IEEE 802.11 可靠安全网络 (RSN) 握手参数

 

NDIS 将网络适配器唯一的标识符分配给每个卸载的协议。 协议卸载标识符是网络适配器上卸载的每个协议的唯一值。 但是,协议卸载标识符并非在所有网络适配器上全局唯一。 当 NDIS 向微型端口驱动程序发送 OID_PM_ADD_PROTOCOL_OFFLOAD OID 请求时,NDIS 将此标识符传递给基础微型端口驱动程序。 如果卸载协议成功,NDIS 会将标识符返回到卸载协议的过度驱动程序。 超载驱动程序使用 标识符删除以前卸载的协议。 当从网络适配器中删除卸载的协议时,协议卸载标识符也用于上层驱动程序的状态指示。

在关闭到该网络适配器的绑定之前,协议驱动程序必须从网络适配器中删除所有卸载的协议。 若要删除低功耗协议卸载,协议驱动程序会发送 OID_PM_REMOVE_PROTOCOL_OFFLOAD的 OID 集请求。 NDIS_OID_REQUEST 结构的 InformationBuffer 成员包含指向协议卸载标识符的指针。

NDIS 允许多个 NDIS 协议驱动程序将协议卸载添加到同一网络适配器。 为了确保当请求的卸载协议数大于网络适配器可以支持的数量时,正确的协议集已卸载到网络适配器,协议驱动程序会为每个卸载的协议分配优先级。 当 NDIS 由于网络适配器资源不足而无法卸载新的高优先级协议时,如果有任何) ,NDIS 会删除 (某个优先级较低的卸载协议,并再次尝试卸载高优先级协议。

注意 微型端口驱动程序应使低功耗协议卸载添加请求失败,并返回STATUS_NDIS_PM_PROTOCOL_OFFLOAD_LIST_FULL状态代码,以允许 NDIS 重新确定协议卸载的优先级。

如果由于卸载高优先级协议而删除某个优先级较低的卸载协议,则 NDIS 会发送 NDIS_STATUS_PM_OFFLOAD_REJECTED 状态指示,以通知设置已删除协议卸载的过度驱动程序。 NDIS_STATUS_INDICATION 结构的 StatusBuffer 成员包含已拒绝的协议卸载的协议卸载标识符。 NDIS 在 NDIS_PM_PROTOCOL_OFFLOAD 结构的 ProtocolOffloadId 成员中提供了协议卸载标识符。