функция обратного вызова 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
Дескриптор для блока контекста, связанного с видеоадаптером. Функция DxgkDdiAdddDevice драйвера мини-порта дисплея ранее предоставляла этот дескриптор подсистеме ядра графики DirectX.
[in] DeviceUid
Положительное целое число, определяющее устройство, для которого должно быть задано состояние питания. Если DeviceUid равен DISPLAY_ADAPTER_HW_ID (определяется в Video.h), устройство является видеоадаптером. В противном случае DeviceUid — это идентификатор дочернего устройства видеоадаптера. Идентификаторы дочерних устройств ранее были назначены функцией DxgkDdiQueryChildRelations .
[in] DevicePowerState
Значение перечисления DEVICE_POWER_STATE , которое предоставляет состояние питания (PowerDeviceD0, PowerDeviceD1, PowerDeviceD2, PowerDeviceD3), для которого должно быть задано устройство.
[in] ActionType
Значение перечисления POWER_ACTION , указывающее причину (PowerActionSleep, PowerActionHibernate, PowerActionShutdown) для изменения состояния питания.
Возвращаемое значение
DxgkDdiSetPowerState возвращает STATUS_SUCCESS в случае успешного выполнения. DxgkDdiSetPowerState никогда не должен завершаться ошибкой; однако он может возвращать любое типизированное значение NTSTATUS, определенное в ntstatus.h и передающее макрос NT_SUCCESS(Состояние).
Комментарии
Если запрошенное состояние равно PowerDeviceD1, PowerDeviceD2 или PowerDeviceD3, DxgkDdiSetPowerState сохраняет контекст, который позже потребуется для возврата устройства в PowerDeviceD0 , а затем переводит устройство в запрошенное состояние. Если запрошенное состояние — PowerDeviceD0 (полностью включено), DxgkDdiSetPowerState восстанавливает контекст устройства и помещает устройство в PowerDeviceD0.
Если dxgkDdiSetPowerState вызывается с запросом на перевод видеоадаптера с поддержкой VGA в режим гибернации, он не должен выключать видеоадаптер. Вместо этого он должен сохранить контекст и позволить водителю шины выключать видеоадаптер. Таким образом, диспетчер питания может отображать ход гибернации после уведомления драйвера минипорта дисплея об изменении состояния питания.
Операционная система может вызывать DxgkDdiSetPowerState на дочернем устройстве видеоадаптера, которое больше не подключено (например, монитор, который недавно был отключен). Эта аномалия возникает из-за внутренней задержки между временем, когда операционная система вызывает DxgkDdiSetPowerState драйвера, и временем, когда операционная система обрабатывает отключение. Драйвер должен обрабатывать такие ситуации без сбоя.
Если DevicePowerState равен PowerDeviceD0, не полагайтесь на значение ActionType.
Начиная с windows Display Driver Model (WDDM) 1.2, если параметр DevicePowerState имеет значение PowerDeviceD0, драйвер мини-порта дисплея должен вызвать DxgkCbAcquirePostDisplayOwnership , чтобы запросить сведения о режиме отображения. Этот режим отображения мог быть ранее задан встроенным ПО и системным загрузчиком. Если DxgkCbAcquirePostDisplayOwnership возвращается с STATUS_SUCCESS, драйвер должен определить, нужно ли повторно инициализировать дисплей на основе сведений о режиме отображения, возвращенных с помощью параметра DisplayInfo . В противном случае драйвер не должен предполагать, что на устройстве в настоящее время включен какой-либо конкретный режим отображения, и он должен инициализировать дисплей.
Функция DxgkDdiSetPowerState должна быть доступной для страниц.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Доступно начиная с Windows Vista. |
Целевая платформа | Персональный компьютер |
Верхняя часть | dispmprt.h |
IRQL | PASSIVE_LEVEL |