DXGKDDI_SET_POWER_STATE回调函数 (dispmprt.h)
DxgkDdiSetPowerState 函数设置显示适配器或显示适配器的子设备的电源状态。
语法
DXGKDDI_SET_POWER_STATE DxgkddiSetPowerState;
NTSTATUS DxgkddiSetPowerState(
[in] IN_CONST_PVOID MiniportDeviceContext,
[in] IN_ULONG DeviceUid,
[in] IN_DEVICE_POWER_STATE DevicePowerState,
[in] IN_POWER_ACTION ActionType
)
{...}
参数
[in] MiniportDeviceContext
与显示适配器关联的上下文块的句柄。 显示微型端口驱动程序的 DxgkDdiAddDevice 函数以前向 DirectX 图形内核子系统提供了此句柄。
[in] DeviceUid
一个正整数,用于标识要为其设置电源状态的设备。 如果 DeviceUid 等于 DISPLAY_ADAPTER_HW_ID(在 Video.h 中定义),则设备是显示适配器本身。 否则,DeviceUid 是显示适配器的子设备的标识符。 子设备标识符以前由 DxgkDdiQueryChildRelations 函数分配。
[in] DevicePowerState
提供电源状态(PowerDeviceD0、PowerDeviceD1、PowerDeviceD2、PowerDeviceD3)的 DEVICE_POWER_STATE 枚举值。
[in] ActionType
一个 POWER_ACTION 枚举值,该值提供电源状态更改的原因(PowerActionSleep、PowerActionHibernate、PowerActionShutdown)。
返回值
DxgkDdiSetPowerState 如果成功,则返回 STATUS_SUCCESS。 DxgkDdiSetPowerState 绝不应失败;但是,它可以返回在 Ntstatus.h 中定义的任何 NTSTATUS 类型值,并传递 NT_SUCCESS(Status) 宏。
言论
如果请求的状态等于 PowerDeviceD1、PowerDeviceD2或 PowerDeviceD3,DxgkDdiSetPowerState 保存以后将设备重新 PowerDeviceD0,然后将设备置于请求状态的任何上下文。 如果请求的状态 PowerDeviceD0(完全打开),DxgkDdiSetPowerState 还原设备上下文并将设备置于 PowerDeviceD0。
如果 DxgkDdiSetPowerState 通过请求将已启用 VGA 的显示适配器置于休眠状态,则它不应关闭显示适配器。 相反,它应保存上下文,让总线驱动程序关闭显示适配器。 这样,电源管理器就可以在显示微型端口驱动程序收到有关电源状态更改的通知后显示休眠进度。
作系统可能会在不再连接的显示适配器的子设备上调用 DxgkDdiSetPowerState(例如,最近取消连接的监视器)。 发生此异常的原因是作系统调用驱动程序 DxgkDdiSetPowerState 和作系统处理断开连接的时间之间存在固有延迟。 驱动程序必须处理此类情况,而不会失败。
如果 DevicePowerState 等于 PowerDeviceD0,则不依赖于 actionType 的值。
从 Windows 显示驱动程序模型 (WDDM) 1.2 开始,如果 DevicePowerState 参数设置为 PowerDeviceD0,则显示微型端口驱动程序应调用 DxgkCbAcquirePostDisplayOwnership 来查询有关显示模式的信息。 此显示模式可能以前由固件和系统加载程序设置。 如果 DxgkCbAcquirePostDisplayOwnership 返回 STATUS_SUCCESS,驱动程序应根据 DisplayInfo 参数返回的显示模式信息来确定是否必须重新初始化显示。 否则,驱动程序不应假定设备上当前启用了任何特定的显示模式,并且应初始化显示。
应将 DxgkDdiSetPowerState 函数设为可分页。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 从 Windows Vista 开始可用。 |
目标平台 | 桌面 |
标头 | dispmprt.h |
IRQL | PASSIVE_LEVEL |