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 结构中的 状态 成员设置为相应的 NDIS_STATUS_Xxx 值。
通过调用 NdisMSendNetBufferListsComplete 函数完成所有挂起的发送请求。 驱动程序必须将每个 NET_BUFFER_LIST 结构中的 状态 成员设置为 NDIS_STATUS_LOW_POWER_STATE。
通过调用 NdisMSendNetBufferListsComplete 函数,立即拒绝对其 MiniportSendNetBufferLists 函数发出的所有新发送请求。 驱动程序必须将每个 NET_BUFFER_LIST 结构中的 状态 成员设置为 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 仅在 NDIS 调用驱动程序的 miniportPause MiniportRestart 函数后才转换为全功率状态,前提是 NDIS 在转换为低功率状态之前调用驱动程序的 MiniportPause 函数。
注意 中间驱动程序必须始终将 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