![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Убийство приложений [D6, WinXP]
Colt © (2003-02-25 09:08:00)Пишу программу, в функции которой входит ограничение работы пользователя по времени за компьютером. Вся проблема теперь свелась к тому, что пользовтель может через Regedit (самое элементарное)убрать строку на запуск программы из реестра (доп. утилиты и программы для редактирования автозапуска системы не установленны). Можно убрать программу через диспетчер программ, Подскажите как и что использовать в решении этой проблеммы, желательно как просто убивать окна диспетчера задач или редактор реестра.
Кто может помогите исходником.
ers (2003-02-25 10:05:00) [21]А эта вот процедара отключает диспечер задач в реестре
procedure NoTaskMngr(enabled:boolean);
var
reg: TRegistry;
begin
reg:=TRegistry.Create;
reg.RootKey:=HKEY_CURRENT_USER;
reg.OpenKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System",true);
if enabled=true
then reg.WriteInteger("DisableTaskMgr",1)
else reg.WriteString("DisableTaskMgr","");
reg.CloseKey;
reg.Free;
end;
Только не забудь добавить в uses юнит registry
Использование этих двух функций такое:
Выключение диспечера задач: NoTaskMngr(true);
Включение диспечера задач: NoTaskMngr(False);
-------
Убийство проги по её заголовку: KillProgram(nil,"Delphi 6");
Убийство проги по классу: killProgram("ProgMan",nil);
Можно задавать как класс, так и заголовок!
Удачи!
ers (2003-02-25 09:56:00) [22]А вот код который не дает проге убится диспечером задач:
if (InitializeAcl(ACL,SizeOf(_ACL),ACL_REVISION)) and (IsValidAcl(ACL))
then SetSecurityInfo(OpenProcess(PROCESS_ALL_ACCESS,false,GetCurrentProcessID),SE_KERNEL_OBJECT,DACL_SECURITY_INFORMATION,nil,nil,@ACL,nil);
в Var ACL : _ACL;
ers (2003-02-25 09:54:00) [23]Во-первых: Можно сделать так, чтоб диспечер задачь не убивал твою прогу! Потом в моей проге вообще отключен диспечер задачь, тоесть его вызвать можно только вызовом экзешника, а это не так просто у меня......
Если говорить о реестре в плане автозагрузки своей проги, то я сделал по другому! В 2000 да я думаю и в хп, можно заменить стандартный эксплодер своей прогой, это раз! А во вторых можно создать "список разрешенных для запуска программ", кроме которых ничего не сможет загрузится, и ещё! Можно в реестре отключить возмность запуска regedit`a
Код убийства программы по её класу и/или заголовку:
procedure KillProgram(ClassName: PChar; WindowTitle: PChar);
const
PROCESS_TERMINATE = $0001;
var
ProcessHandle : THandle;
ProcessID: Integer;
TheWindow : HWND;
begin
TheWindow := FindWindow(PChar(ClassName), PChar(WindowTitle));
GetWindowThreadProcessID(TheWindow, @ProcessID);
ProcessHandle := OpenProcess(PROCESS_TERMINATE, FALSE, ProcessId);
TerminateProcess(ProcessHandle,4);
end;