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


Устройство сообщило о включении при возврате системы в S0

[Применимо только к KMDF]

Когда система возвращается к рабочему состоянию (S0) из состояния низкой мощности, диспетчер PnP отправляет системный IRP (IRP_MN_SET_POWER) для возврата устройства в рабочее состояние (D0). WDF обрабатывает системный запрос IRP на установку мощности. Однако, так как в сценарии с несколькими компонентами драйвер напрямую зарегистрирован в платформе управления питанием (PoFx), драйвер должен вызывать PoFxReportDevicePoweredOn, когда устройство завершило переход на его полное состояние питания (D0). Драйвер может выполнить это, зарегистрировав подпрограмму предварительной обработки WDM для получения уведомлений при поступлении IRP на установку питания.

Драйвер может использовать следующую процедуру:

  1. Вызовите WdfDeviceInitAssignWdmIrpPreprocessCallback, чтобы зарегистрировать функцию обратного вызова EvtDeviceWdmIrpPreprocess для IRP_MN_SET_POWER. В обратном вызове драйвер устанавливает флаг в расширении устройства, чтобы указать, что необходимо будет вызвать PoFxReportDevicePoweredOn при следующем вызове обратной функции EvtDeviceD0Entry.
  2. В EvtDeviceD0Entry, если установлен флаг, драйвер очищает флаг и вызывает PoFxReportDevicePoweredOn.
  3. Драйвер также проверяет флаг в EvtDeviceSelfManagedIoFlush. Если флаг задан, устройство не удалось вернуться в D0 и устройство было удалено. В этом случае драйвер вызывает PoFxReportDevicePoweredOn, а затем отменяет регистрацию в энергетической системе.