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


Сбой системного 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 .