Nonstop Service in Vista
От: VintVV Россия  
Дата: 01.09.08 08:14
Оценка:
Здравствуйте.

Пишу прогу для работы со службами (включение, выключение и т.д.). Возникла такая проблема:
в Висте есть службы которые остановить нельзя (служба "Планировщик заданий"), но при определении
статуса службы посредством вызова QueryServiceStatus, смотрю в dwControlsAccepted, а там есть
флаг SERVICE_ACCEPT_STOP, что, как я понимаю, говорит о возможности остановки. При попытке остановить
данную службу ничего не происходит, т.е. она попрежнему остается включенной.
Но в стандартной оснастке Windows Service вижу, что возможность остановки заблокирована.
Может быть есть еще какие-то флаги, которые говорят что служба не может быть отключена?

В XP у меня все показывается точно как в стандартном Windows Service.

Проверяю флаги так:

        FCanStop := ((dwControlsAccepted and SERVICE_ACCEPT_STOP) = SERVICE_ACCEPT_STOP);
        FCanPauseContinue := ((dwControlsAccepted and SERVICE_ACCEPT_PAUSE_CONTINUE) = SERVICE_ACCEPT_PAUSE_CONTINUE);
Re: Nonstop Service in Vista
От: Alexey Frolov Беларусь  
Дата: 03.09.08 11:19
Оценка:
Здравствуйте, VintVV, Вы писали:

VVV>Здравствуйте.


VVV>Пишу прогу для работы со службами (включение, выключение и т.д.). Возникла такая проблема:

VVV>в Висте есть службы которые остановить нельзя (служба "Планировщик заданий"), но при определении
VVV>статуса службы посредством вызова QueryServiceStatus, смотрю в dwControlsAccepted, а там есть
VVV>флаг SERVICE_ACCEPT_STOP, что, как я понимаю, говорит о возможности остановки. При попытке остановить
VVV>данную службу ничего не происходит, т.е. она попрежнему остается включенной.
VVV>Но в стандартной оснастке Windows Service вижу, что возможность остановки заблокирована.
VVV>Может быть есть еще какие-то флаги, которые говорят что служба не может быть отключена?

VVV>В XP у меня все показывается точно как в стандартном Windows Service.


VVV>Проверяю флаги так:


VVV>
VVV>        FCanStop := ((dwControlsAccepted and SERVICE_ACCEPT_STOP) = SERVICE_ACCEPT_STOP);
VVV>        FCanPauseContinue := ((dwControlsAccepted and SERVICE_ACCEPT_PAUSE_CONTINUE) = SERVICE_ACCEPT_PAUSE_CONTINUE);
VVV>


SERVICE_ACCEPT_STOP говорит о том что сервис предоставляет такую возможность в принципе, но возможно не вам. Нужно смотретьв security descriptor сервиса, у вас может отсутствовать право SERVICE_STOP
Re[2]: Nonstop Service in Vista
От: VintVV Россия  
Дата: 03.09.08 14:00
Оценка:
Здравствуйте, Alexey Frolov, Вы писали:

AF>Здравствуйте, VintVV, Вы писали:


VVV>>Здравствуйте.


VVV>>Пишу прогу для работы со службами (включение, выключение и т.д.). Возникла такая проблема:

VVV>>в Висте есть службы которые остановить нельзя (служба "Планировщик заданий"), но при определении
VVV>>статуса службы посредством вызова QueryServiceStatus, смотрю в dwControlsAccepted, а там есть
VVV>>флаг SERVICE_ACCEPT_STOP, что, как я понимаю, говорит о возможности остановки. При попытке остановить
VVV>>данную службу ничего не происходит, т.е. она попрежнему остается включенной.
VVV>>Но в стандартной оснастке Windows Service вижу, что возможность остановки заблокирована.
VVV>>Может быть есть еще какие-то флаги, которые говорят что служба не может быть отключена?

VVV>>В XP у меня все показывается точно как в стандартном Windows Service.


VVV>>Проверяю флаги так:


VVV>>
VVV>>        FCanStop := ((dwControlsAccepted and SERVICE_ACCEPT_STOP) = SERVICE_ACCEPT_STOP);
VVV>>        FCanPauseContinue := ((dwControlsAccepted and SERVICE_ACCEPT_PAUSE_CONTINUE) = SERVICE_ACCEPT_PAUSE_CONTINUE);
VVV>>


AF>SERVICE_ACCEPT_STOP говорит о том что сервис предоставляет такую возможность в принципе, но возможно не вам. Нужно смотретьв security descriptor сервиса, у вас может отсутствовать право SERVICE_STOP


Работаю под Администратором, смотрю, например, "Планировщик заданий" получаю его security descriptor, получаю указатель на DACL,
вытаскиваю от туда все ACE, смотрю маску доступа:
для SYSTEM и Администраторов стоит бит SERVICE_STOP, т.е. security позволяет остановить данную службу и при запросе
QueryServiceStatus есть флаг SERVICE_ACCEPT_STOP, что говорит о том что он обрабатывает IO_CTRL_STOP, но в стандартной Windows оснастке возможность остановить заблокированна.... Не понимаю
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.