Hint: искать в гугле примерно "NtQuerySystemInformation hooking"
Наврядли... Основное назначение этой функции — держать процесс запущенным, когда юзер разлогинивается... Хотя, это уже к топикстартеру.28.08.06 14:59 Автор: HandleX <Александр М.> Статус: The Elderman
"Основное ее назначение - скрыть процесс из task manager-а :-)" Точна-а!29.08.06 22:00 Автор: Fighter <Vladimir> Статус: Elderman Отредактировано 29.08.06 22:03 Количество правок: 1
Года 4 назад написал программку для удаленного управления машинами в сети. Недавно потребоволась снова но для машин под ХР. Клиентская часть отказалась запускаться с криками "RegisterServiceProcess не найдена в kernel32.dll!"
Ну в общем то сокрытие процессов под NT-ями такая избитая тема, что даже лень чего либо писать29.08.06 23:54 Автор: amirul <Serge> Статус: The Elderman
Вкратце: ЕДИНСТВЕННЫЙ способ получить из юзермоды список процессов - через функцию NtQuerySystemInformation (либо ее Zw аналог - в юзермоде они ничем не отличаются). Все psapi и прочие таскманагеры используют именно ее. Задача сводится к перехвату этой фукнции и фильтрации возвращаемых данных в соответствии с собственными пожеланиями. А уж способов перехвата придумано море. Самые популярные: патч прямо в юзерлевеле (ищи Джеффри Рихтер) и патч таблицы системных сервисов в нулевом кольце. Первый популярен среди людей, которые принципиально не хотят писать драйвера. Второй - среди остальных
> Вкратце: ЕДИНСТВЕННЫЙ способ получить из юзермоды список > процессов - через функцию NtQuerySystemInformation (либо ее > Zw аналог - в юзермоде они ничем не отличаются). Все psapi > и прочие таскманагеры используют именно ее. Задача сводится > к перехвату этой фукнции и фильтрации возвращаемых данных в > соответствии с собственными пожеланиями. А уж способов Если делать по честному - тогда да. А если не совсм, так навскидку (чисто юзерспейс) ;) -
1)Если не перехывтывает ZwOpenProcess
for(DWORD i=0;i<0x10000;i+=2)
{
Handle prc= ::OpenProcess(...
}
Вариация - вместо OpenProcess - DebugActiveProcess, который благополучно работает через csrss.exe
2)Если имеет окна
EnumWindows/GetWindowThreadProcessId
3)Тот же NtQuerySystemInformation, но перечисляющий например хэндлы (и их процессы-владельцы)
> перехвата придумано море. Самые популярные: патч прямо в > юзерлевеле (ищи Джеффри Рихтер) и патч таблицы системных > сервисов в нулевом кольце. Первый популярен среди людей, > которые принципиально не хотят писать драйвера. Второй - > среди остальных Насчет принципов и перехвата со стороны юзермода - не всегда есть права админа для загрузки драйвера. + к тому - вспомним мой фтпдрайв - тут неожиданный плюс вылез перехвата в юзермоде (проме того что он и из-под гостя запускается) - он под вистой прекрасно работает. И пофиг ему что там навороченная защита ядра, начиная с проверки сертификатов загружаемых драйверов и заканчивая периодической проверкой целостности KeServiceDescriptorTable, PsProcessList и иже с ними.
Принципиально надо скрывать процесс? Напиши службу в DLL, которую будет загружать svchost.exe, юзер не продыбает (скорее всего), где твоя служба, ибо svchost "хостит" множество виндовозных служб.30.08.06 08:02 Автор: HandleX <Александр М.> Статус: The Elderman Отредактировано 30.08.06 08:02 Количество правок: 1
Каюсь, программа была сделана через одно место (нужно было попроще, побыстрее) и поэтому основное назначение RegisterServiceProcess было не прятать ее от менеджера задач, а убирать окно с глаз и с таскбара. Собсно, щас требования не поменялись.
Ну, тогда юзай SrvAny.exe от M$, тип службы выставь как "Noninteractive", и окошко никогда не вылезет. Изменений минимум.30.08.06 13:09 Автор: HandleX <Александр М.> Статус: The Elderman Отредактировано 30.08.06 13:11 Количество правок: 2
Но, поскольку всё равно перекомпилить прогу прийдётся во имя избавления от RegisterServiceProcess, то может стоит сделать её "настоящей" службой? Это будет незабываемый экспириенс. -))
Короче в FAQ по службам есть все эти темы, в том числе и про srvany.
Пасиба ишшо раз. FAQ я уже прочитал, разобрался, но народ-то интересовался "зачем"30.08.06 13:13 Автор: Fighter <Vladimir> Статус: Elderman
Ну нету в Win9x-ME нормального TaskManager'a, но это болезнь виндов, а не системных функций... Тот же Far, к примеру, с превеликим удовольствием покажет процесс, зарегистрированный как ServiceProcess в Win9x.28.08.06 21:12 Автор: HandleX <Александр М.> Статус: The Elderman