Сервис отображается в диспетчере задач
Добрый день. У меня следующая проблема: мой сервис вдруг стал виден в процессах в диспетчере задач, почему - даже приблизительно не представляю. Также он по прежнему виден в службах. Если у кого-то есть соображения, из-за чего это могло произойти, подскажите, буду признателен! На всякий случай: тип сервиса win32_own_process | interactive_process.
под win9x службы не показываются это объясняется диспетчером задач этих систем а в XP200NT всё по нормальному
служба-драйвер показываться не будет:))) все остальные будут работать под SYSTEM. и будут видны. не уверен, но спрятать можно вроде бы, окольными путями :)))
под win9x службы не показываются это объясняется диспетчером задач этих систем а в XP200NT всё по нормальному[/QUOTE]
Win9x не поддерживает сервисы, поэтому службы там, как таковые, отсутствуют в принципе.
Тем не менее мой сервис, не являющийся драйвером, до поры до времени не отображался в диспетчере. Факт. И если посмотреть список служб, наверняка можно найти такие же недрайвера, которых не видно в процессах.
значит эти не дравера запускаются что то делают и завершаются и потом не висят в процессах
Возможно что-то не так с инициализацией. Так что, как грится, явите код...
{
MyStatusHandler=RegisterServiceCtrlHandlerEx("SystemMonitoring",MyServiceCtrlHandlerEx,NULL);
MyServiceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS;
MyServiceStatus.dwCurrentState = SERVICE_START_PENDING;
MyServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN;
MyServiceStatus.dwWin32ExitCode = NO_ERROR;
MyServiceStatus.dwServiceSpecificExitCode = 0;
MyServiceStatus.dwCheckPoint = 0;
MyServiceStatus.dwWaitHint = 0;
SetServiceStatus(MyStatusHandler,&MyServiceStatus);
MyServiceStatus.dwCurrentState = SERVICE_RUNNING;
MyServiceStatus.dwCheckPoint = 0;
MyServiceStatus.dwWaitHint = 0;
SetServiceStatus(MyStatusHandler, &MyServiceStatus);
hWS = OpenWindowStation("Winsta0", FALSE, GENERIC_ALL);
SetProcessWindowStation(hWS);
hDT = OpenDesktop("Default", 0, FALSE, GENERIC_ALL);
SetThreadDesktop(hDT);
hProcDll=LoadLibrary("ProcDll.dll");
...
mouse=SetWindowsHookEx(WH_MOUSE,(HOOKPROC)lpMouseProc,hProcDll,0);
kbd=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)lpKeyboardProc,hProcDll,0);
cbt=SetWindowsHookEx(WH_CBT,(HOOKPROC)lpCBTProc,hProcDll,0);
Дальше, наверное, нет смысла приводить код. Сервис устанавливает глобальные хуки, для этого нужна ProcDll. Так как хуки на мышь, клаву и активацию окон, то он интерактивный, для этого нужен выбор виндовс-станции и рабочего стола. Вот как раз сомнения у меня насчет OpenWindowStation, OpenDesktop и SetThreadDesktop. Может из-за них трабл?
[/QUOTE]
Бобер, выдыхай.
liferМожет он у тебя начал работать, а раньше завершался с ошибками ;)
Кстати, ты считаешь, нормально, что сервис виден в таскмэнеджере?!
Кстати, ты считаешь, нормально, что сервис виден в таскмэнеджере?!
[/QUOTE]
Ты про какую винду говориш - в 2k/XP всегда отображался, отображается и будет отображаца.
К вопросу о драйверах. И они там тоже есть и видны как один псевдо-процесс - "System", так как выполняются в kernel-mode.
От себя хочу лишь добавить, что сервисы (как самые обычные прочессы), имеются в системной таблице процессов. Есть такая опция в NT-шном диспетчере - "отображать процессы всех пользователей" (вроде бы так называется)
[/QUOTE]
Ну лично у меня все сервисы отображаются и без нее (галочки)
[QUOTE=rjx]
так вот все службы там есть, правда, запущенные от имени SYSTEM
[/QUOTE]
На самом деле службы могут быть запущены и от другого имени (скажем LocalService или NetworkService)
Сервисы всегда отображались. Возможно недоглядел. Или имя сервиса поменял.
Цитата:
Кстати, ты считаешь, нормально, что сервис виден в таскмэнеджере?!
Это даже не нормально, это обязательное условие нормального функционирования системы :)
это просто закон
они отображаются, вот это факт! сервис - обычный процесс и прятать его можно так же подменив ZwQuerySystemInformation, к примеру. а то будут тут еще баги искать на которых выехать можно, блин... :о)))