Поделиться через


функция обратного вызова 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

Значение перечисления 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, DxgkDdiSetState сохраняет любой контекст, который позже потребуется для возврата устройства в 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

См. также

DxgkCbAcquirePostDisplayOwnership

DxgkDdiAddDevice

DxgkDdiQueryChildRelations