Здравствуйте, Nuzhny, Вы писали:
PD>>ОС не может решать, какие сервисы полезные, а какие нет.
N>Не может или не хочет? Вполне можно заложить в логику извлечения устройства приостановку работы служб, которые мешают. Почему нет? Сделать список служб, которые ни в каком случае нельзя приостанавливать, а остальным отсылать соответствующее сообщение.
Все это есть. Но не директивно. Не то, чтобы нельзя XYZ, а не хотят XYZ
SERVICE_ACCEPT_PAUSE_CONTINUE
0x00000002
Службу можно приостановить и продолжить.
Этот код элемента управления позволяет службе получать уведомления SERVICE_CONTROL_PAUSE и SERVICE_CONTROL_CONTINUE .
SERVICE_ACCEPT_PRESHUTDOWN
0x00000100
Служба может выполнять задачи предварительного завершения.
Этот код элемента управления позволяет службе получать уведомления SERVICE_CONTROL_PRESHUTDOWN . Обратите внимание, что ControlService и ControlServiceEx не могут отправить это уведомление; Только система может отправить его.
Windows Server 2003 и Windows XP: Это значение не поддерживается.
SERVICE_ACCEPT_SHUTDOWN
0x00000004
Служба получает уведомление при завершении работы системы.
Этот код элемента управления позволяет службе получать уведомления SERVICE_CONTROL_SHUTDOWN . Обратите внимание, что ControlService и ControlServiceEx не могут отправить это уведомление; Только система может отправить его.
SERVICE_ACCEPT_STOP
0x00000001
Службу можно остановить.
Этот код элемента управления позволяет службе получать уведомления SERVICE_CONTROL_STOP .
https://learn.microsoft.com/ru-ru/windows/win32/api/winsvc/ns-winsvc-service_status_process
>>>Или должна сама предлагать их отключить в случае проблем.
PD>>Хм. Ты предлагаешь, чтобы обычному пользователю ОС предлагала — а не отключить ли Вам "Брокер системных событий" ? Или "Клиент групповой политики" ?
N>Нет, я предлагаю сделать механизм прерывания работы этих служб. Даже интерфейс, а не механизм — он есть готовый, вплоть до того, перезапускать ли службу после сбоев, сколько раз пробовать это делать и с какими таймаутами. Тут нет никакого риска.
Так все это есть в оснастке "Сервисы". И остановить, и приостановить, и перезапуск и т.д. Плюс (не все) в Task Manager
Плюс net start/stop/pause/continue
Что-то я не пойму, что ты хочешь... Чтобы сообщали имя сервиса, который держит хендл ? Или чтобы ему автоматически делали net stop ?
PD>>Прерваться совсем — это есть, net stop, но при этом он не прервется, а закончит работу, и можно его будет разве что заново запустить net start.
PD>>Вот только это лишь просьба — SERVICE_CONTROL_STOP. Он может не прерваться. Аналогично тому, как нажатие на крестик в верхнем правом углу окна означает лишь посылку WM_CLOSE, а закроется ли окно — зависит от того, что сделает обработчик.
N>А как же SERVICE_CONTROL_PAUSE?
N>https://learn.microsoft.com/en-us/windows/win32/api/winsvc/nf-winsvc-controlserviceexa
А так же
Notifies a service that it should pause. The hService handle must have the SERVICE_PAUSE_CONTINUE access right.
It should. Должен. Но не более.