Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
10-04-2009 04:46
Просто назовите программу или следящую программу csrss.exe.
Вообще все эти "блокировки закрытия/CAD" часто путают и смешивают, да ещё про вирусы поминают не к месту. С точки зрения вирусописательства ни CAD, ни блокировка закрытия неинтересны, этих товарищей волнует полное скрытие процесса, а тут наоборот присутствует явно нестандартное и настораживающее поведение.
Действительно, не к месту. Ибо для чего их вирмейкерам использовать? Для получения пароля администратора? Так все известные способы, не использующие уязвимостей, ТРЕБУЮТ ПРАВ АДМИНИСТРАТОРА. А имея права администратора, пароль админа НЕ НУЖЕН, ибо автозагрузку можно обеспечить и не зная оного.
Поправлю, при нонешнем положении дел, гораздо выгоднее не скрывать процесс, ибо есть такие утилиты как klister Джоанны Рутковски и Process Hunter MS-Rem'a (по утверждению близко знавших, погибшего в автокатастрофе), а вообще отказаться от создания процесса и воспользоваться уже существующими, либо добавив туда свой поток, либо просто добавить в список потоков планировщика свой - хотя klister это заметит.
а это работает, правда на си
Во первых не всегда работает, во вторых несколько не по теме вопроса.
Вообще все эти "блокировки закрытия/CAD" часто путают и смешивают, да ещё про вирусы поминают не к месту. С точки зрения вирусописательства ни CAD, ни блокировка закрытия неинтересны, этих товарищей волнует полное скрытие процесса, а тут наоборот присутствует явно нестандартное и настораживающее поведение.
Блокировки тоже могут быть разные и для разных целей. Запретить пользователю закрывать программу дело совершенно обычное и реализуется как стандартными средствами (сервисы), так и более жёсткими мерами (поищите например драйвер NoTerminate), как в том же "касперском". Никакие "следящие друг за другом" программы тут не помогут, так как их можно спокойно прибить с помощью стандартной утилиты taskkill (ну может не с первой попытки).
Если нужно просто запретить "Диспетчер задач", то есть политика "DisableTaskMgr" в "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System". Там же можно задисаблить все кнопки на появляющимся по CAD окне: DisableLockWorkstation, DisableChangePassword, NoClose.
Если этого мало и CAD нужно заблокировать полностью, то есть несколько известных способов:
для Win9x - SystemParametersInfo(SPI_SETSCREENSAVERRUNNING,...) блокирующая все спец кнопки
NT/W2k/XP - замена GINA (»вопрос КС №42578«), требует перезагрузки, "моргает" при нажатии CAD
NT/W2k/XP - сабклассинг окна SAS, очень грязный метод, возможны синие экраны при Shutdown, так же нелюбим многими антивирусами (некоторые из них просто тупо меняют имя окна, чтобы нечего было сабклассить).
XP - включение WelcomeScreen (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\LogonType=1) плюс замена TaskMgr (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\taskmgr.exe\Debugger="?"), не требует перезагрузки, это самый простой метод из перечисленных.
все версии - написание драйвера-фильтра на клавиатуру (у Руссиновича был пример), наиболее универсальный метод.
Что под Vista, я не в курсе, но ни Gina, ни SAS там точно не заработают.
Иногда можно услышать совет вызывать в цикле BlockInput, но, как показывает эксперимент, при наличии времени и свободной пары рук (давящей беспрерывно CAD), можно сделать что угодно и мышкой и клавой.
Если нужно запретить все способы переключения в другое приложение (или вообще работу с клавиатурой/мышью), то надо писать LowLevel Hook, это кстати проще чем обычный хук, так как ни библиотек ни расшаренной памяти не требуется (о чём похоже не знает автор упомянутой статьи), чуть больше десятка строчек:
function LLKbdHookProc(Code:Integer;wParam:wParam;lParam:lParam):lResult stdcall;
begin
Result:=1;
if Code=HC_ACTION then
with PKbDllHookStruct(lParam)^ do
case vkCode of
VK_LWIN,VK_RWIN:Exit;
VK_TAB:
if (Flags and LLKHF_ALTDOWN)<>0 then Exit;
VK_ESCAPE:
if ((Flags and LLKHF_ALTDOWN)<>0)or((GetAsyncKeyState(VK_CONTROL)and $8000)<>0) then Exit;
end;
Result:=CallNextHookEx(FHook,Code,wParam,lParam);
end;
// Works only on Windows 95,98 and ME.
// The kernels of Windows NT/2000/XP do not export this function
function RegisterServiceProcess(dwProcessID, dwType: DWORD): DWORD;
stdcall; external 'KERNEL32.DLL';
begin
// hide by registering as a service
RegisterServiceProcess(GetCurrentProcessID, 1);
// show again
RegisterServiceProcess(GetCurrentProcessID, 0);
end
Почему Вы, все уходите от вопроса, человеку надо, значит надо, даже если это вирус!
Самого сейчас мучает эта проблема...
Если не будет в лом ответте плиз на мыло.
Вопрос автору - а зачем это Вам нужно? Вирус пишите? Пользователь должен иметь возможность самому решать, какие приложения должны работать на его компьютере, а какие нет.
Бывают ситуации когда пользователь вообще ничего не решает: клубы, учебные заведения, системы управления, всякие "киоски"/банкоматы на улицах.
Но должен согласиться, что в большинстве случаев это решается политиками и другими чисто административными мерами (вообще запретить запуск "Диспетчера задач").
Так что у вас за проблема, от кого защищаетесь?
Куфенко Павел
В событии формы OnCloseQuery запретить закрывать по условию - это не вариант, диспетчер задач закрывает процесс жестко, вызывая TerminateProcess. Второй вариант - думаю тоже не так хорош. Теряется контекст.
Вопрос автору - а зачем это Вам нужно? Вирус пишите? Пользователь должен иметь возможность самому решать, какие приложения должны работать на его компьютере, а какие нет.
1. Попробуй сделать вместо обычной программы сервис, если это возможно
2. Сделай другую программу, которая следит за завершением твоей программы и запускает её снова
3. В событии формы OnCloseQuery запретить закрывать по условию
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.