OID_PNP_SET_POWER
OID_PNP_SET_POWER OID 通知微型端口驱动程序其基础网络适配器将转换为 InformationBuffer 中指定的设备电源状态。 设备电源状态指定为以下 NDIS_DEVICE_POWER_STATE 值之一:
- NdisDeviceStateD0
- NdisDeviceStateD1
- NdisDeviceStateD2
- NdisDeviceStateD3
OID_PNP_SET_POWER请求前面可能有 OID_PNP_QUERY_POWER 请求。
从 NDIS 6.30 开始,如果满足以下条件,则 NDIS 不会在电源状态转换期间暂停和重启驱动程序堆栈中的 NDIS 驱动程序:
基础微型端口驱动程序在 NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES 结构中设置 NDIS_MINIPORT_ATTRIBUTES_NO_PAUSE_ON_SUSPEND 标志。 驱动程序在调用 NdisMSetMiniportAttributes 函数时传递指向此结构的指针。
附加到微型端口驱动程序的所有过度筛选器驱动程序都支持 NDIS 6.30 或更高版本的 NDIS。
绑定到微型端口驱动程序的所有过度协议驱动程序都支持 NDIS 6.30 或更高版本的 NDIS。
转换为Low-Power状态 (D1-D3)
当微型端口驱动程序处理OID_PNP_SET_POWER的一组请求以转换为低功耗状态时,它必须执行以下操作:
为指示的网络设备电源状态充分准备网络适配器。 微型端口驱动程序为此执行的任务取决于设备。
等待对 NdisMIndicateReceiveNetBufferLists 函数的调用返回。
等待网络适配器处理的发送请求完成。 完成后,微型端口驱动程序必须调用 NdisMSendNetBufferListsComplete 函数。 驱动程序应将每个NET_BUFFER_LIST结构中的 Status 成员设置为相应的 NDIS_STATUS_Xxx 值。
通过调用 NdisMSendNetBufferListsComplete 函数完成所有挂起的发送请求。 驱动程序必须将每个NET_BUFFER_LIST结构中的 Status 成员设置为NDIS_STATUS_LOW_POWER_STATE。
通过调用 NdisMSendNetBufferListsComplete 函数立即拒绝对其 MiniportSendNetBufferLists 函数发出的所有新发送请求。 驱动程序必须将每个NET_BUFFER_LIST结构中的 Status 成员设置为NDIS_STATUS_LOW_POWER_STATE。
支持 NDIS 6.30 及更高版本的 NDIS 的微型端口驱动程序还必须执行以下操作:
不要通过调用其 MiniportReturnNetBufferLists 函数等待挂起的接收指示完成。 此外,微型端口驱动程序不得更改等待完成的任何数据包 的NET_BUFFER_LIST 结构或数据。
处理从“已暂停”或“正在运行”适配器状态到低功耗状态的OID_PNP_SET_POWER请求。 有关这些状态的详细信息,请参阅 微型端口适配器状态和操作。
在网络适配器转换为 D3 状态之前,微型端口驱动程序必须通过执行以下任务关闭微型端口驱动程序控制下的所有内容:
在网络适配器上禁用中断和 DMA 引擎。
停止网络适配器上的接收引擎。
请勿解除分配或修改与挂起的接收指示关联的接收描述符和数据包缓冲区。
取消所有 NDIS 计时器。
注意 在总线驱动程序将网络适配器转换为 D3 状态后,微型端口驱动程序无法访问网络适配器。
转换为 Full-Power 状态 (D0)
当微型端口驱动程序处理OID_PNP_SET_POWER的一组请求以转换为全功率状态时,它必须将网络适配器的接收引擎还原到适配器转换为低功耗状态之前接收引擎处于的相同状态。
注意 微型端口驱动程序不得访问或更改与挂起接收指示关联的任何接收缓冲区。
仅当 NDIS 在转换为低功耗状态之前调用驱动程序的 MiniportPause 函数时,才在转换为全功率状态后调用微型端口驱动程序的 MiniportRestart 函数。
注意 中间驱动程序必须始终 将NDIS_STATUS_SUCCESS 返回到OID_PNP_SET_POWER查询。 中间驱动程序绝不应将OID_PNP_SET_POWER请求传播到基础微型端口驱动程序。
返回状态代码
微型端口驱动程序的 MiniportOidRequest 函数为此请求返回以下值之一:
术语 | 说明 |
---|---|
NDIS_STATUS_SUCCESS |
微型端口驱动程序成功完成请求。 |
NDIS_STATUS_PENDING |
微型端口驱动程序将以异步方式完成请求。 微型端口驱动程序完成所有处理后,必须通过调用 NdisMOidRequestComplete 函数,传递 Status 参数的NDIS_STATUS_SUCCESS来成功请求。 |
NDIS_STATUS_NOT_ACCEPTED |
正在重置微型端口驱动程序。 |
要求
版本 |
NDIS 5.1、NDIS 6.0 及更高版本支持。 |
标头 |
Ntddndis.h (包括 Ndis.h) |
另请参阅
NdisMIndicateReceiveNetBufferLists