Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Войти
 
Страницы: 1
RSS
Работа с сервисами
 
Доброго времени суток.

Надо мне закрыть один очень интересный сервис...Сервис антивируса Панда Титаниум. У мну XP
Накидал код:
1) В schandle - хэндл менеджера сервисов, открытого с правами SC_MANAGER_ALL_ACCESS
2) "PavProc" - один из сервисов антивируса Панды (точно запущен и активен)
Код
SC_HANDLE hs;
if ((hs = OpenService (schandle,"PavProc",SERVICE_STOP)) == NULL) printf ("Error opening service..\n");
SERVICE_STATUS lpServiceStatus;
int status = ControlService(hs,SERVICE_CONTROL_STOP,&lpServiceStatus);
if(!status)  {
   printf ("Can't stop service\n");
   return ;
}
status = DeleteService(hs);
if(!status) printf ("Error deleting service\n");


В результате работы прога спотыкается на ControlService, т.е. не может она остановить сервис Панды...
Вот меня интересует вопрос, каким образом я смог открыть сервис Панды (OpenService возвратил не нулевое значение) с правами, на его остановку (SERVICE_STOP), а остановить не получается????
Если у кого нб есть мысли, буду очень признателен...
 
Попробуй запросить QueryServiceConfig() на предмет того, может ли сервис быть остановлен вообще. ControlService() выполняет команду только после проверки того, что сервис поддерживает указанный тип "контроля".
И не забывай GetLastError() проверять
 
Проверка последней ошибки возвращает мне глубокомысленную строку:
"команда не уместна для данной службы", что видимо и означает Вашу правоту...

Ну неужели этот драйвер "PavProc" вообще нельзя выгрузить? Я не слишком силен в драйверах, но как я понял у объекта драйвера всегда должна быть функция DriverUnload, автоматически вызываемая при выгрузке драйвера (или она есть, но на деле ничего не выгружает?)...

Можно ли как то выгрузить драйвер, если он не поддерживает выгрузку? (Извиняюсь за корявый вопрос  :) )
 
Так это служба или драйвер?
Если служба -- отсановить можно стандартными средствами, если STOP поддерживается (при старте сервиса SCM-у об этом сообщается)
Если драйвер -- копай в сторону IoDeleteDevice()
 
Цитата
Я не слишком силен в драйверах, но как я понял у объекта драйвера всегда должна быть функция DriverUnload, автоматически вызываемая при выгрузке драйвера (или она есть, но на деле ничего не выгружает?)...
Не обязательно. Если DriverUnload нет, это как раз и означает, что драйвер не поддерживает выгрузку. В таком случае документированными методами его не выгрузить - остается хак (хуки его функций, тот же IoDeleteDevice/IoDetachDevice)
 
Всем спасибо! План работы ясен)
Страницы: 1
Читают тему