Информация об изменениях

Сообщение Re[5]: Когда же винда научится извлекать устройства? от 10.01.2024 15:15

Изменено 10.01.2024 15:33 Pavel Dvorkin

Re[5]: Когда же винда научится извлекать устройства?
Здравствуйте, Nuzhny, Вы писали:

PD>>ОС не может решать, какие сервисы полезные, а какие нет.


N>Не может или не хочет? Вполне можно заложить в логику извлечения устройства приостановку работы служб, которые мешают. Почему нет? Сделать список служб, которые ни в каком случае нельзя приостанавливать, а остальным отсылать соответствующее сообщение.


Хм. По каким критериям ? Если бы сервисы делала только сама MS — еще можно подумать. Ну а если я захочу свой сервис сделать ? Мне тоже нужно (или кажется, что нужно) запретить его приостанавливать. И будет в итоге то же самое, только с лишним флагом.



>>>Или должна сама предлагать их отключить в случае проблем.

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. Должен. Но не более.
Re[5]: Когда же винда научится извлекать устройства?
Здравствуйте, 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. Должен. Но не более.