Как в драйвере отследить такие события, как shutdown, sleep и hibernat

Тема в разделе "WASM.NT.KERNEL", создана пользователем Nouzui, 17 ноя 2006.

  1. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    как в драйвере отследить такие события, как shutdown, sleep и hibernate?
    почему драйвер не получает сообщений IRP_MJ_POWER?
    как создать PDO и получить запрос IRP_MJ_PNP?
     
  2. ubil

    ubil New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2004
    Сообщения:
    203
    Адрес:
    ODESSA:)
    Если я не ошибаюсь, то при засыпании компа pnp драйвер получает IRP_MN_QUERY_STOP_DEVICE
    В свое время я заметил что из-за отсутствия обработчика этого(или может слегка другого:) ) события вообще не получается войти в sleep режим.

    ЗЫ: в книжках типа Windows 2000 driver book и Programming the Microsoft Windows Driver Model все это описывается, правда в первой во всех проектах есть баг связанный с удалением устройства из стека:)
     
  3. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    Эти сообщения получает WDM-драйвер. В чем отличие модели WDM от Legacy, написано в большинстве книг про драйверы и в DDK. В DDK еще есть примеры простейших PnP драйверов (toaster например)
     
  4. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    я уже пытался списывать с toaster, только убирал всю функциональность из обработчиков... не работает...
    проделываешь в DriverEntry то же самое, указываешь AddDevice, ретурнишься, и все - эта AddDevice никем не вызывается
     
  5. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    Ну да, надо же добавить в систему устройство. Там в описалове это есть
     
  6. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    яясно..
    буду разбираться )
     
  7. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    очередной глупый вопрос: как этот pnpшный драйвер потом выгрузть?
    а то надоело уже: disable device->restart, disable device->restart...
     
  8. Pinkbyte

    Pinkbyte Member

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    106
    KmdKit от Four-F тебе в помощь...
     
  9. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    не хочет...
    я, кажется, вспомнил: такое уже было и лечилось просто созданием объекта устройства в DriverEntey (совершенно не используемого устройства, однако если его не создать и указать AddDevice в DriverExtension, драйвер перестает выгружаться несмотря на наличие обработчика Unload). Поможет ли это драйверу, загруженному менеджером PnP, не знаю, нужно проверить..
     
  10. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    все, сказанное в предыдущем посте - бред
     
  11. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    При удалении всех устройств и закрытии всех ссылок и хендлов должен сам выгружаться
     
  12. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    щас...
    все равно надо перезагружаться
     
  13. Guest

    Guest Guest

    Публикаций:
    0
    shutdown - почитай про IoRegisterShutdownNotification(pDriverObject->DeviceObject); После регистрации следует отлавливать IRP_MJ_SHUTDOWN.
    p.s. Без регистрации этого уведомления, IRP_MJ_SHUTDOWN просто не поступит, я тоже с этим сталкивался. По поводу остального ничего сказать не могу, но исходники ReactOS должны помочь.
     
  14. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    да я уже все написал )
    всем спасибо за помощь...
     
  15. ntcdm

    ntcdm New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2007
    Сообщения:
    247
    Мне нужно, когда мой Legacy драйвер загружен, запретить уход компьютера в спящий или hibernate режимы. Как это можно сделать? Начал копать, понял что надо обрабатывать IRP_MJ_POWER, но как корректно отловить там спящий или hibernate режимы не совсем понятно.

    Помогите,пожалуйста, буду рад любому совету.