Здравствуйте.
Пишу прогу для работы со службами (включение, выключение и т.д.). Возникла такая проблема:
в Висте есть службы которые остановить нельзя (служба "Планировщик заданий"), но при определении
статуса службы посредством вызова 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);
Здравствуйте, 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
Здравствуйте, 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 оснастке возможность остановить заблокированна.... Не понимаю