Сбой системного Query-Power IRP в драйвере фильтра или функции

Фильтровый драйвер или функциональный драйвер (не являющийся владельцем политики питания для устройства) может отклонить запрос IRP_MN_QUERY_POWER, если одно из следующих условий выполнено.

  • Устройство включено для пробуждения, и запрошенное состояние питания системы меньше, чем значение SystemWake, которое указывает на наименьшее состояние питания, из которого устройство может разбудить систему. Например, устройство, которое может пробудить систему из S2, но не из S3, не пройдет проверку на S3, но успешно пройдет проверку на S2.

  • При вводе состояния питания устройства, соответствующего запрошенному состоянию, драйвер может отказаться от операции, которая потеряет данные, например открытое подключение к модему. Драйвер редко завершает запрос по этой причине; В большинстве случаев приложение обрабатывает такие случаи.

Чтобы отклонить запрос IRP_MN_QUERY_POWER для состояния энергопотребления системы, драйвер должен выполнить следующие действия:

  1. Вызовите PoStartNextPowerIrp, чтобы указать, что драйвер готов обрабатывать следующую мощность IRP. (Только Windows Server 2003, Windows XP и Windows 2000)

  2. Задайте Irp->IoStatus.Status в статус ошибки и вызовите IoCompleteRequest, указав IO_NO_INCREMENT. Не передайте IRP дальше вниз по стеку устройств.

  3. Вызовите IoReleaseRemoveLock, чтобы освободить ранее полученную блокировку.

  4. Возвращает состояние сбоя из подпрограммы DispatchPower.