Установка флагов объектов устройства для управления питанием
В своей подпрограмме AddDevice каждый драйвер создает объект устройства (фильтр объекта устройства (DO), объект функционального устройства (FDO) или физический объект устройства (PDO)) и задает флаги DO_XXX в объекте устройства для описания атрибутов устройства и конфигурации драйвера. Следующие флаги объектов устройства относятся к управлению питанием.
Flag | Описание |
---|---|
DO_POWER_INRUSH | Указывает, что текущий поток, нарисованный устройством, резко возрастает при первом включении устройства. Этот всплеск или "взмах" длится в течение короткого периода, после чего текущий поток, нарисованный устройством, падает на более низкий уровень работы. |
DO_POWER_PAGABLE | Указывает, что драйвер доступен для страниц. Начиная с Windows 2000, драйверы, которые могут быть разыкаться на страницы, должны устанавливать флаг DO_POWER_PAGABLE. Диспетчер питания вызывает такие драйверы в IRQL = PASSIVE_LEVEL. Дополнительные сведения о доступных для страниц драйверов см. в статье Создание драйверов для страниц. |
Флаги объекта устройства обычно устанавливаются драйвером шины при создании PDO для устройства. Однако некоторым драйверам функций может потребоваться изменить значения этих флагов в рамках процедур AddDevice . Начиная с Windows Vista операционная система не требует, чтобы все объекты устройств в стеке устройств имели одинаковые флаги, связанные с питанием. Однако в Windows Server 2003, Windows XP и Windows 2000 все объекты устройств в стеке устройств должны иметь одинаковые флаги, связанные с питанием.
Начиная с Windows 2000 драйверы устройств, которые находятся в пути разбиения по страницам, не должны устанавливать флаг DO_POWER_PAGABLE. Драйвер находится в "пути подкачки", если он участвует в операциях ввода-вывода в файле подкачки. Драйверы, которые не задают этот флаг, должны вызываться в IRQL = DISPATCH_LEVEL. Дополнительные сведения см. в разделе Ограничения подпрограмм диспетчеризации.
Как правило, водители не должны изменять значение водителя автобуса для флага DO_POWER_PAGABLE, и водитель никогда не должен устанавливать этот флаг, если водитель нижнего уровня очистил его. При обработке переходов, включающих запросы на разбиение по страницам PnP (обычно в ответ на IRP_MJ_PNP с IRP_MN_DEVICE_USAGE_NOTIFICATION запросом), драйвер хранилища должен тщательно упорядочение настройки и очистки флага.
Драйверы для устройств, требующих включения питания при запуске, должны установить флаг DO_POWER_INRUSH в объекте устройства, прежде чем очищать флаг DO_DEVICE_INITIALIZING. Только один драйвер в стеке устройств, обычно драйвер шины (PDO), должен установить флаг DO_POWER_INRUSH для устройства. Флаг уведомляет диспетчер питания о том, что такие устройства должны питаться по одному, в последовательности с другими такими устройствами, чтобы избежать перегрузки источника питания. Диспетчер питания гарантирует, что в любой момент времени в системе будет активен только один IRP для включения питания.
Начиная с Windows Vista драйверы могут устанавливать как флаг DO_POWER_PAGABLE, так и флаг DO_POWER_INRUSH. В Windows Server 2003, Windows XP и Windows 2000 драйверы не могут установить флаг DO_POWER_PAGABLE и флаг DO_POWER_INRUSH.