Где-то в дебрях System32 лежит TaskMgr.exe Замени на пустышку. Вот только надо обойти систему восстановления системных файлов. (сорри за такой слоган)))
В общем в папку с резервными копиями запихнуть тоже левый файл. Я так делал.
Позволит. Только если в системе не отключено восстановление системы (блин, неудачно выразился, но ладно), придется заменить еще и резервную копию программы taskmgr.exe, которая лежит в system32\dllcache. А то XP их начнет сравнивать и легко убедится в том, что taskmgr из system32 не соответстует резервной копии оригинала в dllcache.. И естественно попробует это дело исправить. То есть восстановить taskmgr в system32 из dllcache.. Ну то есть замени taskmgr и там и там. Чтобы различий не было и винда не порывалась это исправить.
Много вижу таких вопросов, но сам никогда не сталкивался. Предлагаю решение - ищем по имени заголовка окна (в данном случае "Диспетчер задач Windows") , его хендл и по хендлу закрываем. Искать нужно по таймеру, т.е. скажем каждые 500 мс. Еще есть вариант номер 2 , но более трудоемкий
Получаем текущий список процессов и делаем СВОЙ таск менеджер , отображаем в нем все процессы кроме нашей проги ну и ессно делаем его максимально похожим на оригинал. после чего заменяем оригинальный на свой, и никто ничего не заподозрит - и программу вашу невидно
Это всё полная ерунда. Почему? Потому что процессы может показывать не
только стандартный таск мэнеджер, но и куча других программ сторонних
производителей. Я сам таких не видел, но знающие люди рассказывали,
что даже Far это умеет. Поэтому такой способ решения продвинутого
юзера не остановит.
Кстати, этот вопрос здесь уже неоднократно обсуждался.
TaskMgr.exe и понял, что для меня он не подходит, т.к. будет работать не всегда – всё зависит от настроек Windows. В определённых случаях Win сразу начинает “верещат”, заметив подмену. Буду искать что-то более приемлемое…
Доброго времени суток, Михаил. Есть альтернативный вариант. Эта проблема решается при помощи написания программы-сервиса под WinNT. Тогда Ваша программа не будет видна в списке TaskManager'а. Но это очень трудоемкий процесс. Объясните какую программу Вы хотите написать, может тогда я смогу подсказать Вам что-либо более определенное.
Тут вопрос не в продвинутости юзера, большинство ведь юзает обычный таск менеджер , а если стоит задача именно скрыть присутстиве какой то программы - вариант вполне подходит. Нормальному человеку в голову не стукнет без веских причин запускать сторонние менеджеры процессов.
Пишу я очередную версию свой программы Internet Connection Counter
(ICC) - учет трафика, времени и денег при работе в Интернете (dial-up или GPRS удалённый доступ). Для пробы можете взять на моём сайте http://www.counterslab.com/rus . Если решите, что она Вам пригодится в хозяйстве, то я с удовольствием вышлю ключик – Вы уже достаточно много времени потратили на мою проблему J
Насчёт программы-сервиса под WinNT – это очень хорошая мысль, она уже приходила мне в голову, но я совершенно не знаю с какого боку подходить для её реализации. В этом случае решилась бы более важная, чем Ctrl+Alt+Del, для меня проблема – я бы смог интегрировать свой
ICC в систему, т.е. автоматический его запуск при попытке установить какое-либо IE-удалённое соединение, а то пользователи жалуются, что забывают запускать ICC вручную, а запускать ICC вместе с Windows не хотят в целях рационального использования ресурсов, и их можно понять. В Win 98 мне, кажется, удалось это сделать при помощи написания на C++ своей dll-ки и указания на ее расположение в ключе реестра HKEY_CURRENT_USER\RemoteAccess\Profile\Xxxx (имя соединения), а в XP и 2000-ом этот способ не работает…
А удаление
ICC из списка диспетчера задач (Ctrl+Alt+Del) мне понадобилось, потому что, выполняя просьбу пользователей, делаю доступ к программным настройкам через пароль, чтобы не все могли беспрепятственно выгружать ICC из памяти и т.п. Это в основном детей касается. В Win 98 мне это удалось достаточно легко сделать, а в Win с ядром NT опять же нет. С уважением, Михаил.
Насчет заблокировать - не знаю, но скрыть из списка задач и процессов свою программу реально, по крайней мере в WIN2000 .. Один парень делал с помощью АПИ но правда на Билдере... я не думаю что нельзя этот код пересобачить на VB. Так что если надо то могу узнать.
Вот узнал... есть исходники но на сях..... а вот само описание:
СОКРЫТИЕ ПРОЦЕССА ОТ ФУНКЦИИ NtQuerySystemInformation В WINDOWS 2000/NT
Я довольно долго пытался сделать свою программу невидимой в Windows 2000. Максимум, что я смог найти в интернете - это то что основой любого диспетчера задач является функция NtQuerySystemInformation, ееописание, а также то, что обмануть эту функцию невозможно. Не знаю, почему так говорят, но обмануть ее можно и это очень просто.
Вот, что мне удалось нарыть про эту функцию:
NTAPI Hook_NtQuerySystemInformation( LONG type, // тип требуемой информации PVOID SystemInformation, // указатель на буфер, в который вернется информация LONG SystemInformationLength, // размер буфера в байтах PLONG ReturnLength // сколько байт было возвращено или требуется );
Как было указано, первый параметр отвечает за тип требуемой информации. Нас интересует только информация о процессах (type = 5). Далее работаем со следующими структурами:
После вызова функции, если не произошло ошибки, первым элементом буфера окажется структура SYSTEM_PROCESS_INFORMATION, описывающая отдельный процесс. Первым членом этой структуры будет смещение, указывающее на следующий процесс или NULL, если это последний процесс в списке.
Теперь осталось только перехватить все вызовы этой функции и немного поменять смещения, чтобы вызывающая функцию программа перепрыгнула через наш процесс. Наш это процесс или не наш определяем по идентификатору процесса progProcessId, определяемому при запуске программы. Теперь, после перехвата функции NtQuerySystemInformation (все детали перехвата очень подробно описаны в книге Рихтера или смотрите исходники), вместо оригинальной функции сначала вызывается наша:
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); } } }}
Теперь любая вызывающая программа при просмотре возвращенного буфера будет прыгать через наш процесс. Вот и все. В исходниках находится программа, демонстрирующая все вышеизложенное. Сначала компилируем библиотеку, затем программу.
Конечно для полного сокрытия программы в WINDOWS 2000 этого маловато, стоит также перехватить функции просмотра загруженных библиотек, FindFirsFile, FindNextFile, подставляя вместо нужного файла "..".
Мдяяяяя...... ну и видок конечно стал...... интересно тут <pre> будет работать ? Короче кому если надо тот поймет написанное выше и приведет в нормальный вид