Есть довольно старый драйвер, который не умеет обрабатывать IRP с функцией MJ_POWER. Он просто пропускает их вниз через IoCallDriver. Соответственно, поскольку не вызывается PoStartNextPowerIrp, на XP при остановке системы регулярно возникает синий экран DRIVER_POWER_STATE_FAILURE (9F) с подкодом 500
Возникает вопрос: возможно ли бороться с этим внешними средствами.
1) Может, системе можно запретить посылать IRP с функцией MJ_POWER конкретному драйверу, например, какими-либо настройками параметров энергопотребления?
2) Насколько плоха идея написать фильтр, который не будет пропускать IRP с функцией MJ_POWER на проблемный драйвер?
Вообще, буду рад, если ткнете меня в более подробную документацию, где можно было бы прочитать о схемах энергопотребления, в частности, о параметрах PDCAP_XX_SUPPORTED
Здравствуйте, Black Fregat, Вы писали:
BF>1) Может, системе можно запретить посылать IRP с функцией MJ_POWER конкретному драйверу, например, какими-либо настройками параметров энергопотребления? BF>2) Насколько плоха идея написать фильтр, который не будет пропускать IRP с функцией MJ_POWER на проблемный драйвер?
Да, фильтр — хорошое решение.
Однако можно еще попробовать подменить IRP_MJ_POWER в MajorFunction этого старого драйвера и в своем обработчике обрабатывать этот IRP как следует. Однако, этот метод имеет ряд недостатков.