Перехват процесса завершения работы.

Тема в разделе "WASM.COMMERCE", создана пользователем moonin, 3 апр 2019.

  1. moonin

    moonin New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2019
    Сообщения:
    4
    Нужен способ прервать процесс shut down, инициированный через кнопку пуск.

    в лк.
     
  2. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.954
  3. moonin

    moonin New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2019
    Сообщения:
    4
    Нужно было уточнить в самом начале. Не должно появляться каких то окон, что какое то приложение блокирует завершение работы. Поэтому первый вариант не подходит.
    По второй ссылке, если я правильно понимаю эта функция не сработает, она отменяет завершение инициированное только через InitiateSystemShutdown с таймаутом. Через пуск - другая история: https://docs.microsoft.com/ru-ru/windows/desktop/api/winuser/nf-winuser-exitwindowsex
     
  4. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.954
    Тогда остается инжект в explorer.exe и сабклассить саму кнопку (SetWindowLong+GWL_WNDPROC) и TrackPopupMenu при клике правой кнопкой по кнопке пуск (там тоже завершение работы есть). Возможно еще в локальных политиках что-то такое есть.
     
  5. Minzdrav

    Minzdrav Well-Known Member

    Публикаций:
    0
    Регистрация:
    21 мар 2017
    Сообщения:
    1.082
    Я ничего не понял как обычно. Процесс shutdown запускается из командной строки.
    Как его можно инициировать через кнопку Пуск? И самое главное где эта кнопка
    находится?
    Это кнопка включения компьютера? Ты хочешь прервать выключение сразу после включения?

    "в лк" - это значит что тебе в личку нужно написать этот страшный секрет?
     
    example нравится это.
  6. moonin

    moonin New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2019
    Сообщения:
    4

    Пользователь нажимает Пуск -> Завершение работы.
    Нужно не дать системе завершить работу. Тихо, без окон или уведомлений. Как будто туда и не нажимали. :acute:

    в лк - с тем кто возьмется за это дело, предлагается обсудить в личке все более подробно.
     
  7. ECk

    ECk Member

    Публикаций:
    0
    Регистрация:
    9 апр 2004
    Сообщения:
    454
    Адрес:
    Russia
    Hard reset или Power off аппаратные перехватывать придется, а это в SMM обработчик лезть может понадобиться. А если он залоченый через D_LOCK, то никак. И если гипервизор перехватывающий обращения к SMM, тоже никак.
     
  8. Коцит

    Коцит Active Member

    Публикаций:
    0
    Регистрация:
    31 янв 2017
    Сообщения:
    130
    ..угу, скажи ещё из юзера.
    наиболее приземлённый вариант - это вообще убрать буттон "Завершение работы"
     
  9. moonin

    moonin New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2019
    Сообщения:
    4
    Звучит как то дико сложно.
    Может есть вариант перехватить клик мышки в меню до всего этого? :scratch_one-s_head:

    не от юзера, права админские
    убрать кнопку к сожалению не подходит.
     
  10. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Я посмотрел в 8-ке. Действительно вызывается ExitWinEx() без каких либо проверок до этого, что бы событие можно было отключить. Эта апи посылает запрос в серверный процесс. Интересно что эта часть совпадает с сурками XP :)

    winsrv.SrvExitWindowsEx и в этой же группе есть сервис SrvCancelShutdown, который вызывается так же и при завершении работы из предыдущей апи в случае ошибки. Смотрим откуда вызывается - user32.CancelShutdown(). Судя по гуглу апи не паблик. Вот наверно её стоит потестить.

    [​IMG]
     
    hiddy нравится это.
  11. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Тс не достаточно данной инфы. Нужен кто то, что бы потестил апишку.
     
  12. Minzdrav

    Minzdrav Well-Known Member

    Публикаций:
    0
    Регистрация:
    21 мар 2017
    Сообщения:
    1.082
    Представил я такой прикол. Хочет виндусятник завершить работу, вкладку открывает, а
    кнопки "выключить" нету... :) :)
    Эко у него мозги на бекрень встанут.
     
  13. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.954
  14. Коцит

    Коцит Active Member

    Публикаций:
    0
    Регистрация:
    31 янв 2017
    Сообщения:
    130
    HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
    Создаем DWORG ключ с именем "NoClose"
    Значение: 0 = завершение разрешено, 1 = завершение заблокировано
     
  15. sn0w

    sn0w Active Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    956
    нене, это всё баян и список твиков (уверен что далеко не полный) есть например тут: http://www.rusdoc.ru/material/os/win/reestr.shtml.

    вернёмся к сути, господа: надо так, чтобы при нажатии пимпы "завершить работу" не происходило ничего. f13nd прав, я тоже кроме сабкласса ничего не вижу рационального.
     
  16. b1337z

    b1337z New Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2017
    Сообщения:
    2
  17. sn0w

    sn0w Active Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    956
  18. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    sn0w,

    Тс ушёл с инфой про CancelShutdown() ничего не сказав, если бы это не сработало, то продолжил вопрос. Так что всё ясно.