как в драйвере отследить такие события, как shutdown, sleep и hibernate? почему драйвер не получает сообщений IRP_MJ_POWER? как создать PDO и получить запрос IRP_MJ_PNP?
Если я не ошибаюсь, то при засыпании компа pnp драйвер получает IRP_MN_QUERY_STOP_DEVICE В свое время я заметил что из-за отсутствия обработчика этого(или может слегка другого ) события вообще не получается войти в sleep режим. ЗЫ: в книжках типа Windows 2000 driver book и Programming the Microsoft Windows Driver Model все это описывается, правда в первой во всех проектах есть баг связанный с удалением устройства из стека
Эти сообщения получает WDM-драйвер. В чем отличие модели WDM от Legacy, написано в большинстве книг про драйверы и в DDK. В DDK еще есть примеры простейших PnP драйверов (toaster например)
я уже пытался списывать с toaster, только убирал всю функциональность из обработчиков... не работает... проделываешь в DriverEntry то же самое, указываешь AddDevice, ретурнишься, и все - эта AddDevice никем не вызывается
очередной глупый вопрос: как этот pnpшный драйвер потом выгрузть? а то надоело уже: disable device->restart, disable device->restart...
не хочет... я, кажется, вспомнил: такое уже было и лечилось просто созданием объекта устройства в DriverEntey (совершенно не используемого устройства, однако если его не создать и указать AddDevice в DriverExtension, драйвер перестает выгружаться несмотря на наличие обработчика Unload). Поможет ли это драйверу, загруженному менеджером PnP, не знаю, нужно проверить..
shutdown - почитай про IoRegisterShutdownNotification(pDriverObject->DeviceObject); После регистрации следует отлавливать IRP_MJ_SHUTDOWN. p.s. Без регистрации этого уведомления, IRP_MJ_SHUTDOWN просто не поступит, я тоже с этим сталкивался. По поводу остального ничего сказать не могу, но исходники ReactOS должны помочь.
Мне нужно, когда мой Legacy драйвер загружен, запретить уход компьютера в спящий или hibernate режимы. Как это можно сделать? Начал копать, понял что надо обрабатывать IRP_MJ_POWER, но как корректно отловить там спящий или hibernate режимы не совсем понятно. Помогите,пожалуйста, буду рад любому совету.