Остледить завершение работы Windows 2000/XP

Тема в разделе "WASM.NT.KERNEL", создана пользователем netROCK, 9 фев 2009.

  1. netROCK

    netROCK New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2004
    Сообщения:
    5
    Здравствуйте!
    Возник такой вопрос, можно ли отследить из драйвера завершение работы системы, ведь при этом DriverUnload не вызывается?
     
  2. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Нужно зарегистрироваться IoRegisterShutdownNotification. При завершении системы получишь IRP_MJ_SHUTDOWN.
    Естественно нужно предусмотреть обработчик MajorFunction[IRP_MJ_SHUTDOWN]
     
  3. netROCK

    netROCK New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2004
    Сообщения:
    5
    Partner
    Большое спасибо за помощь!
     
  4. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    Вот я сделал так, но обработчки заработал (поставил бесконечный цикл) только когда, когда уже все программы выклчились и горел экран приветствия (Завершение работы).

    А как можно определить момент выключения чуть раньше, чтобы можно было отправить юзермодному приложению что работа завершается.
    (приложение не имеет граф. окон) поэтому стандарные способы не работают (через сообщения WM_SHUTDOWN или как-то так)

    Интересно...
     
  5. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    test555
    Пускай юзермодное приложение создаст себе невидимое окно и ловит сообщения WM_QUERYENDSESSION, WM_ENDSESSION
     
  6. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    Partner, в этом то и фишка. Что если создается окно, то утилита типа AZV находит скрытый процесс.
    (программа не хакерская, просто необходимо чтобы она была невидимой).

    Можно конечно перехватить кое какую функцию...
    Так - ясно.

    Мне просто было интересно, можно ли в ядре отследить это. Видимо нельзя..

    Спасибо за ответ
     
  7. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    test555
    отселдить посылку вышеупомянутых сообщений какомунить окну? я хотя не совсм в курсях как это делаеться, но мочемуто мне кажеться что жо возможно )
    Покапай NtUserWaitMessage, не уверен сам не копал.. но поназванию то что надо )
     
  8. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    [del]
     
  9. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    test555
    Скрытое окно - это просто невидимое окно. Скрытый процесс здесь абсолютно непричем.
     
  10. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    Partner, АВЗ находит скрытые процессы путем перечисления окон в системе, потом опрашивает систему "чье это окно". Я проверял.
    В статье МС-РЕМА про обнаружение скрытых процессов этот способ описан.

    Чтобы защититься от такого способа обнаружения необходимо перехватывать функцию NTUSERQUERYWINDOW... Для этого вроде надо искать адрес теневой KeServiceDescriptorTableShadow.
    У меня ничего не получалось (искать надо в контексте ГУИ процесса). Решено было отказаться от окон в программе.
    Вроде так.
     
  11. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    test555
    Я не понял. Твой процесс должен быть скрытым?
     
  12. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    Partner, да, мой процесс скрытым должен быть..
    ОФФ ТОП: есть ли IRP запрос наподобии IRP_MJ_SHUTDOWN, но который вызается при переходе в спящий режим?
    Похоже что нет..
     
  13. barton

    barton New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2008
    Сообщения:
    164
    Адрес:
    Czechoslovakia
    А почему бы не перехватить WM_QUERYENDSESSION для любого другого существующего окна? Например, окна эксплорера. Например, SysListView32 ("FolderView") ?
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    NtShutdownSystem и никаких окон :)
     
  15. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    Спасибо, почитаю на досуге..