Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Процессы


Автор: Sheff 10.12.2002, 01:42
Как в Win2000/NT зарегистрировать процесс как сервисный или отладочный ? Мне нужно сделать так, чтобы процесс нельзя было выгрузить.

Автор: Klin 10.12.2002, 01:54
Не знаю, пойдёт ли в NT или в 2000, но 98 идёт.
Код
typedef DWORD (WINAPI *LPREGISTERSERVICEPROCESS) (DWORD, DWORD);
   HINSTANCE h_i;
   LPREGISTERSERVICEPROCESS lpRegProc;
   h_i = LoadLibrary("KERNEL32.DLL");

   if (h_i)
   {
       lpRegProc = (LPREGISTERSERVICEPROCESS)GetProcAddress(h_i, "RegisterServiceProcess");
       if (lpRegProc)
       {
           lpRegProc(NULL, 1);
       }
       FreeLibrary(h_i);
   }

Изчезает из процесов и нельзя завершить.

Автор: Grey 10.12.2002, 02:09
Это не пойдет в 2000/NT.
Для того чтоб сделать процесс сервисным, надо реализовать в нем несклько специальных функций см. RegisterServiceCtrlHandler

Автор: Sheff 12.12.2002, 00:34
Цитата(Grey @ 09.12.2002, 18:09)
Это не пойдет в 2000/NT.
Для того чтоб сделать процесс сервисным, надо реализовать в нем несклько специальных функций см. RegisterServiceCtrlHandler

Дело в том, что мне надо заблокировать чужой процесс.

Автор: Grey 12.12.2002, 01:27
Т.е. надо приостановить выплонение процесса, типа SuspendThread?

Автор: Step 12.12.2002, 01:31
Цитата(Grey @ 11.12.2002, 17:27)
Т.е. надо приостановить выплонение процесса, типа SuspendThread?

нет, ему надо сделать так чтоб чужой процесс нельзя было выгрузить, Шеф или я что-то не так понял

Автор: Sheff 13.12.2002, 03:31
Step, ты всё правильно понял, мне нужно, чтобы процесс нормально пахал, но чтобы нельзя было его выгрузить.

Автор: XpyDi 13.12.2002, 23:14
Запускай подопытный процесс функцией CreateProcess с установленным флагом
DEBUG_PROCESS - для создания видимости отладки процесса, тогда пока происходит отладка процесс невозможно будет закрыть. А отладки на самом деле никакой не будет происходить, просто мы об этом только известим систему и всё.
и
DEBUG_ONLY_THIS_PROCESS - чтобы не отлаживать все процессы, которые породит наш "подопытный кролик".

Плюсы: можно также отлаживать производить и реальную отладку процесса.
Минусы: по-моему, если закрыть твой процесс, то и отлажываемый закроеться сразу же.
Хотя свой процесс ты уже можешь написать его сервисным.

Автор: Step 14.12.2002, 19:33
Шеф, я вот о чем подума, а ты не пробывал перехватывать все сообщения винды, до их попадания приложения, и обрабатывать сообщения твоим программам, как только пришло сообщения от системы для закрытия программы ты его блакируеш, а системы кидаеш сообщения что прога закрыта, или что то в этом роде.

Автор: Step 14.12.2002, 19:42
Цитата(Step @ 14.12.2002, 11:33)
Шеф, я вот о чем подума, а ты не пробывал перехватывать все сообщения винды, до их попадания приложения, и обрабатывать сообщения твоим программам, как только пришло сообщения от системы для закрытия программы ты его блакируеш, а системы кидаеш сообщения что прога закрыта, или что то в этом роде.

я еще чучуть подумал.
по всей видимости после такой махинации система прогу в качестве мусора попробует выкинуть.
для решения этого вопроса поищи "бои в памяти" по поиску.

Автор: Fantasist 15.12.2002, 07:01
Цитата(XpyDi @ 13.12.2002, 15:14)
Запускай подопытный процесс функцией CreateProcess с установленным флагом
DEBUG_PROCESS - для создания видимости отладки процесса, тогда пока происходит отладка процесс невозможно будет закрыть.

Неужто? Помниться я сам (не раз) отлаживал программу и попросил виндос закрыть отлаживаемый процесс. В результате закрывается виндос. Виснит просто. Это Win98.

Автор: Step 16.12.2002, 20:28
Цитата(Fantasist @ 14.12.2002, 23:01)
Цитата(XpyDi @ 13.12.2002, 15:14)
Запускай подопытный процесс функцией CreateProcess с установленным флагом
DEBUG_PROCESS - для создания видимости отладки процесса, тогда пока происходит отладка процесс невозможно будет закрыть.

Неужто? Помниться я сам (не раз) отлаживал программу и попросил виндос закрыть отлаживаемый процесс. В результате закрывается виндос. Виснит просто. Это Win98.

ты по ошибке не ту прогу закрыл, :) вот винда и глюканула. :)  :)

Автор: XpyDi 17.12.2002, 02:40
Цитата(Fantasist @ 15.12.2002, )
Неужто? Помниться я сам (не раз) отлаживал программу и попросил виндос закрыть отлаживаемый процесс. В результате закрывается виндос. Виснит просто. Это Win98.

Когда я писал я в первую очередь основывался на личном опыте в работе и в написании отладчиков, а также документации(MSDN). Хотя смотря какой отладчик, для Win98 все-таки частенько и сама виснит(основываясь на опыте своем, друзей и знакомых)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)