Общие сведения об операции ожидания и пробуждения
Механизм пробуждения операционной системы работает, как показано на следующем рисунке.
Пока система и устройство находятся в рабочем состоянии, владелец политики питания для устройства определяет, что его устройство должно быть включено ("вооружены") для пробуждения. Владелец политики управления питанием запрашивает IRP питания (PoRequestPowerIrp с незначительным кодом IRP_MN_WAIT_WAKE) для отправки в PDO для информирования всех драйверов в стеке устройств. В запросе владелец политики указывает подпрограмму обратного вызова (не совпадает с процедурой IoCompletion ).
Диспетчер питания через диспетчер ввода-вывода отправляет IRP в верхнюю часть стека устройств.
Водители устанавливают процедуры IoCompletion и передают IRP вниз, пока он не достигнет водителя автобуса.
Водитель шины включает пробуждение на физическом устройстве, если это возможно, и помечает ожидание IRP. При необходимости он также запрашивает IRP ожидания и пробуждения для своего родительского объекта.
Через некоторое время поступает внешний сигнал пробуждения.
Водитель автобуса завершает IRP_MN_WAIT_WAKE.
Диспетчер ввода-вывода вызывает подпрограммы IoCompletion , которые были заданы в качестве драйверов, передаваемых IRP в стеке.
Диспетчер ввода-вывода вызывает подпрограмму обратного вызова, заданную владельцем политики, когда он запрашивает IRP.
Запрос IRP_MN_WAIT_WAKE не изменяет состояние питания устройства или системы. Он просто включает пробуждение на устройстве, чтобы позже, если устройство перейдет в соответствующее состояние спящего режима, внешний сигнал приведет к пробуждению устройства (и, возможно, системы).
При поступлении сигнала пробуждения поведение водителей будет одинаковым, независимо от того, разбудит ли устройство систему или только само. Если устройство включено для пробуждения и система находится в спящем режиме, из которого устройство может его разбудить, устройство разбудит систему. Если устройство включено для пробуждения и система находится в рабочем состоянии, пробуждается только устройство.
Так как компьютеры и устройства различаются по дизайну, особенно в отношении плоскостей питания, поддерживаемые состояния питания системы и устройства , и, следовательно, состояния, поддерживающие ожидание и пробуждение, не совпадают на всех конфигурациях оборудования. Таким образом, любой драйвер, владеющий политикой питания для своего устройства, и каждый водитель шины должны внимательно относиться к возможностям отдельной конфигурации, в которой он работает. Дополнительные сведения см. в разделе Определение того, может ли устройство разбудить систему.
Дополнительные сведения об операциях ожидания и пробуждения см. в разделах Общие сведения о пути irPs ожидания и пробуждения в дереве устройств и Общие сведения о завершении IRP ожидания и пробуждения.