Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Scheduler [D4, D7, Win95/98, WinME, NT4, Win2k, WinXP]


Task ©   (2004-06-24 22:05:00) 

Как скрыть прогу не зависимо от платформы Win9x или WinNT(2000, XP).
Что бы её ни где не было видно т.е. что бы обычному пользователю
завершить её работу было очень сложно.
Смысл - есть две программы одна Scheduler (которую нужно спрятать)
вторая доступная пользователю для редактирования файла который использует
Scheduler. Файл ситывается при запуске Scheduler'a. Если во второй
программе изменили файл, посылается сообщение Scheduler'у тот в свою
очередь загружает новые данные из файла.
Или как лучше всего сделать этого гребаного Scheduler,a???
Если можно пример по спрятыванию проги не зависимо от платформы.


Игорь Шевченко   (2004-06-26 00:20:00) [1]


> это Админ должен делать, тогда это не пойдет.


Именно. В противном случае задача не имеет смысла.


Task   (2004-06-25 23:25:00) [2]

Игорь еще раз СПАСИБО!
Пример неплох (\Delphi\Demos\IPCDemos\*.*) буду изучать.

(Эта задача для NT-систем решается стандартными средствами системы, ограничением прав пользователя, установкой нужного дескриптора безопасности у твоего процесса (запрещающего доступ к процессу для его закрытия).)

Каким образом программно программа отнимет у пользователя все эти права или это Админ должен делать, тогда это не пойдет.


Игорь Шевченко   (2004-06-25 23:14:00) [3]


> Впринципе открывается ну бог сним. В самом начале в вопросе
> были строки "что бы обычному пользователю
> завершить её работу было очень сложно".


Эта задача для NT-систем решается стандартными средствами системы, ограничением прав пользователя, установкой нужного дескриптора безопасности у твоего процесса (запрещающего доступ к процессу для его закрытия).


> Если процесс скрыт, окно непоказывается что вернет функция
> FindWindow. Или как мне посылать сообщения скрытому процессу?


Если окно есть, но не показано, то FindWindow вернет его Handle.
Но я бы посоветовал посмотреть в
Program Files\Borland\Delphi\Demos\IPCDemos\*.* - там описаны примеры межпроцессного взаимодействия.


Task   (2004-06-25 22:58:00) [4]

И вот еще вопрос. Если процесс скрыт, окно непоказывается что вернет функция FindWindow. Или как мне посылать сообщения скрытому процессу?


Task   (2004-06-25 22:56:00) [5]

Спасибо Игорь, и всем кто откликнулся.
Впринципе открывается ну бог сним. В самом начале в вопросе были строки "что бы обычному пользователю
завершить её работу было очень сложно". Мне ненужно её прятать от Хакеров, Крякеров и иже с ними. Вообщем я нашел код который прячет процесс под NT - платформами по крайней мере под XP.
Проверил - работает только насколько корректно незнаю я в API слабоват. Могу выложить сюда для оценки (большой очень).


Игорь Шевченко   (2004-06-25 21:09:00) [6]


> Это я так понял "сокрытие" процесса на WinNT - платформах


Это все открывается


Task   (2004-06-25 20:52:00) [7]

Кто сможет ВОТ ЭТО (ниженаписанное) перевести на язык понятный DELPHI??????
Это я так понял "сокрытие" процесса на WinNT - платформах

NTAPI Hook_NtQuerySystemInformation(
  LONG type,
  PVOID SystemInformation,
  LONG SystemInformationLength,
  PLONG ReturnLength
  );

typedef struct {
FILETIME ProcessorTime;
ULONG unk2, unk3;
FILETIME CreateTime;
ULONG unk6;
ULONG StartAddress;
ULONG ProcessID;
ULONG ThreadID;
ULONG CurrentPriority;
ULONG BasePriority;
ULONG ContextSwitchesPerSec;
ULONG ThreadState;
ULONG ThreadWaitReason;
ULONG unk15;
} SYSTEM_THREAD_INFORMATION;

typedef struct {
ULONG NextOffest;  // следующий процесс
ULONG ThreadCount;
ULONG unk2, unk3, unk4, unk5, unk6, unk7;
FILETIME CreateTime;
FILETIME UserTime;
FILETIME KernelTime;
ULONG unk14;
WCHAR *pModuleName; /* unicode */
ULONG BasePriority;
ULONG ProcessID;
ULONG InheritedFromUniqueProcessID;
ULONG HandleCount;
ULONG unk20, unk21;
ULONG PeekVirtualSize;
ULONG VirtualSize;
ULONG PageFaultCountPerSec;
ULONG PeakWorkingSetSize;
ULONG WorkingSetSize;
ULONG PeekPagedPoolUsage;  
ULONG PagedPoolUsage;
ULONG PeekNonPagedPoolUsage;  
ULONG NonPagedPoolUsage;
ULONG unk31;    /* PagefileUsage ? */
ULONG PeakPagefileUsage;
ULONG unk33;    /* PrivateBytes ? */
SYSTEM_THREAD_INFORMATION ThreadInfos[1];  // потоки данного процесса
} SYSTEM_PROCESS_INFORMATION;

NTAPI Hook_NtQuerySystemInformation(
              LONG type,                    // тип информации
              PVOID SystemInformation,      // указатель на буфер
              LONG SystemInformationLength, // размер буфера в байтах
              PLONG ReturnLength            // указатель на 32-битное число
              )
{
SYSTEM_PROCESS_INFORMATION *pinfo, *pinfo_last;

     // вызываем оригинальную функцию
     ((PFNNtQuerySystemInformation)(PROC) g_NtQuerySystemInformation)
           (type, SystemInformation, SystemInformationLength, ReturnLength);
   
     // если получается информация о процессах
     if(type == 5)
     {
           if(SystemInformationLength > 20000)
           {
                 pinfo = (SYSTEM_PROCESS_INFORMATION*)SystemInformation;
                 for(;;)
                 {
                       // если идентификатор процесса равен идентификатору нашего процесса
                       if(pinfo->ProcessID == progProcessId)
                       {
                            // если наш процесс последний в списке
                             if(pinfo->NextOffest == 0)
                             {                // предпоследний процесс теперь стал последним, а наш исчез
                                   pinfo_last->NextOffest = 0;
                             }
                             else
                             {                // или прыгаем через наш процесс
                                   pinfo_last->NextOffest += pinfo->NextOffest;
                             }
                       }
                       if(pinfo->NextOffest == 0) break;
                       // предудущий процесс теперь равен текущему
                       pinfo_last = pinfo;
                       // переходим к следующему процессу
                       pinfo = (SYSTEM_PROCESS_INFORMATION*)((char *)pinfo + pinfo->NextOffest);
                 }
           }
     }
}


Task   (2004-06-25 20:00:00) [8]

НЕ ВЕРЮ что никто незнает или не хочет помочь!


Task   (2004-06-25 18:51:00) [9]

Да... А реально ли сделать такую прогу которая при старте проверяла какая ОС если Win9x то пряталась бы функцией RegisterServiceProcess, а если WinNT(XP, 2000) запускалась как сервис?


Task   (2004-06-25 18:48:00) [10]

panov ©   (25.06.04 17:13) [8]
Я понял что не так то просто скрыть процесс под NT?

[5]
Можно ли пример минимального приложения работающего как сервис?
Как отобрать права у пользователя?
??????????????????????????????????


panov   (2004-06-25 17:13:00) [11]

http://www.delphimaster.ru/cgi-bin/forum.pl?n=5&id=1080805108


Task   (2004-06-25 16:33:00) [12]

Дмитрий2004   (25.06.04 16:26) [6]
Да, но в этом случае и завершить прогу не проблема.
Под Win98 работает function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall;   external 'KERNEL32.DLL';в WinXP это не пашет:(
Прочтите [5]


Дмитрий2004   (2004-06-25 16:26:00) [13]

Держи правда видно только в процессе
ShowWindow(Handle,SW_Hide);
ShowWindow(Application.Handle,SW_Hide);


Task   (2004-06-25 15:56:00) [14]

Можно ли пример минимального приложения работающего как сервис?
Как отобрать права у пользователя?


Task   (2004-06-25 14:41:00) [15]

Игорь Шевченко ©   (25.06.04 10:25) [3]
Каким образом ее запускать как сервис и будет ли это работать в Win98(95)


Игорь Шевченко   (2004-06-25 10:25:00) [16]

А зачем ее прятать ? Запусти, как сервис, отбери у пользователя права


miwa   (2004-06-24 23:49:00) [17]

В факе смотрел?


Task   (2004-06-24 23:30:00) [18]

?????


Наверх

Титульная страница Поиск, карта сайта Написать письмо