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 等于 Video.h ) 中定义的DISPLAY_ADAPTER_HW_ID (,则设备本身是显示适配器。 否则, DeviceUid 是显示适配器的子设备的标识符。 子设备标识符以前由 DxgkDdiQueryChildRelations 函数分配。
[in] DevicePowerState
一个DEVICE_POWER_STATE枚举值,该值提供设备应设置为的电源状态 (PowerDeviceD0、PowerDeviceD1、PowerDeviceD2、PowerDeviceD3) 。
[in] ActionType
一个 POWER_ACTION 枚举值,该值提供电源状态更改 (PowerActionSleep、PowerActionHibernate、PowerActionShutdown) 的原因。
返回值
如果成功,DxgkDdiSetPowerState 将返回STATUS_SUCCESS。 DxgkDdiSetPowerState 不应失败;但是,它可以返回 Ntstatus.h 中定义并传递 NT_SUCCESS (Status) 宏的任何 NTSTATUS 类型值。
注解
如果请求的状态等于 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 |