Двоякое описание выгрузки сервиса в MSDN — Bluetooth и все, что с ним связано

Двоякое описание выгрузки сервиса в MSDN


Начал свою писанину с сервисов, придется продолжить ;).
Понадобилось мне как-то выгрузить сервис на конкретном устройстве, а имеено на HTC Cruise. Не мой сервис, системный (в том смысле что не мое это произведение и не я его загружал). Хочу сказать, что сервис не критический и на других устройствах вообще я его уже выгружал без проблем. А тут не смог. В любопытстве мне не откажешь, решил я разобраться почему.

Принцип выгрузки сервера «хорошо» описан в документации. Но как раз в кавычках и дело, потому что как раз в документации похоже ошибка. Функция остановки сервиса DeregisterService первым делом вызывает xxx_IOControl с кодом IOCTL_SERVICE_QUERY_CAN_DEINIT, типа спрашивает у сервиса можно ли его остановить. В свою очередь если xxx_IOControl возвращает TRUE и устанавливает передаваемый ей буфер в ненулевое значение, то DeregisterService не мождет выгрузить сервис. Это написано в ссылке. А вот если почитать описание кода IOCTL_SERVICE_QUERY_CAN_DEINIT, то тут написано другое, а именно: если сервис не хочет что бы его выгружали, от должен вернуть TRUE и установить буфер в ноль !. В этом случае DeregisterService возвратит FALSE с кодом ERROR_SERVICE_CANNOT_ACCEPT_CTRL.
Так где же все таки правильное описание ?
Я сделал FeedBack на MSDN и еще в один в блог, посвященный сервиам. В ожидании реакции, (уже прошло 7 дней, а ее нет, и скорее всего не будет) вспомнил что есть Embeded и что можно глянуть в код! Оказывается, правильное описание находится во второй ссылке, т.е. буфер должен устанавливаться в 0.

Резюме: описание функции DeregisterService неправильное.

Have any Question or Comment?

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Октябрь 2022
Пн Вт Ср Чт Пт Сб Вс
 12
3456789
10111213141516
17181920212223
24252627282930
31