Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.28;
Скачать: CL | DM;

Вниз

Убийство приложений   Найти похожие ветки 

 
Colt ©   (2003-02-25 09:08) [0]

Пишу программу, в функции которой входит ограничение работы пользователя по времени за компьютером. Вся проблема теперь свелась к тому, что пользовтель может через Regedit (самое элементарное)убрать строку на запуск программы из реестра (доп. утилиты и программы для редактирования автозапуска системы не установленны). Можно убрать программу через диспетчер программ, Подскажите как и что использовать в решении этой проблеммы, желательно как просто убивать окна диспетчера задач или редактор реестра.
Кто может помогите исходником.


 
ers   (2003-02-25 09:54) [1]

Во-первых: Можно сделать так, чтоб диспечер задачь не убивал твою прогу! Потом в моей проге вообще отключен диспечер задачь, тоесть его вызвать можно только вызовом экзешника, а это не так просто у меня......
Если говорить о реестре в плане автозагрузки своей проги, то я сделал по другому! В 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;


 
ers   (2003-02-25 09:56) [2]

А вот код который не дает проге убится диспечером задач:
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 10:05) [3]

А эта вот процедара отключает диспечер задач в реестре
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);
Можно задавать как класс, так и заголовок!
Удачи!



 
Игорь Шевченко ©   (2003-02-25 10:09) [4]

А вот есть еще Process Explorer, который все потуги по неубиению сводит на нет :-) www.sysinternals.com


 
ers   (2003-02-25 10:54) [5]

> Игорь Шевченко Энто точно;))))) Ну с этим ничего не поделаешь, им можно и системные процессы спокойненько убить, пока как боротся с этим кроме как закрытия никто не придумал! Будем думать!;)) Так же всё убивает и фар;)


 
Colt ©   (2003-02-25 12:13) [6]

А вот код который не дает проге убится диспечером задач:
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;
===================================
Я не такой Гуру в делфях, не могу понять что ему надо сделать чтобы он не ругался на ACL_REVISION


 
gsu ©   (2003-02-25 12:16) [7]

>> TheWindow := FindWindow(PChar(ClassName), PChar(WindowTitle))
посмотрел бы сколько их именованных ...


 
ers   (2003-02-25 12:51) [8]


> Colt © (25.02.03 12:13)
> А вот код который не дает проге убится диспечером задач:
> 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;
> ===================================
> Я не такой Гуру в делфях, не могу понять что ему надо сделать
> чтобы он не ругался на ACL_REVISION

Пардон, не дописал! Добавь в const ACL_REVISION = 2;


 
UNIVERSAL   (2003-02-25 17:01) [9]

>>ers
Указанная функция SetSecurityInfo декларируется Delphi из библиотеки ACLAPI.DLL, а у меня такой библиотеки нет. Чё делать?


 
UNIVERSAL   (2003-02-25 17:12) [10]

С предыдущим вопросом разобрался - ADVAPI32.DLL. А где в проге стделать вставку вашего куска кода. После инициализации приложения ставлю и снимаю TaskManager-ом, т.е. он (код) у меня не хотит работать. Delphi5, Win2k.


 
Colt ©   (2003-02-26 12:40) [11]

У кого что получилось ?


 
UNIVERSAL   (2003-02-26 15:18) [12]

Ну я уже писал, что получилось-то. Попробовал как писал ers - nothing


 
ers   (2003-02-26 15:46) [13]

Код нужно писать в OnCreate формы, и ещё вы код против убиения диспечером задач в Delphi 7 вам не поможет, к сожалению! :(
А вот в пятой Delphi не пробовал......
У меня шестая стоит я в ней свою прогу делаю, всё ок, а вот до этого делал в 7 прога снималась только так....
В пятой говорять всё ок должно быть!


 
ers   (2003-02-26 15:46) [14]

У меня заметьте тоже Win2k стоит


 
UNIVERSAL   (2003-02-26 15:59) [15]

В пятой тоже глухо пока...


 
Colt ©   (2003-02-27 11:10) [16]

не знаю может что и неправильно делаю но не работает, может то что у меня XP ?
---------
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const ACL_REVISION = 2;

var
Form1: TForm1;

implementation

{$R *.dfm}



procedure TForm1.FormCreate(Sender: TObject);
Var ACL : _ACL;
begin
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);
end;

end.
---------------
ругается
[Error] Unit1.pas(32): Illegal character in input file: " " ($A0)
[Error] Unit1.pas(32): Undeclared identifier: "SE_KERNEL_OBJECT"


 
ZZ ©   (2003-02-27 13:59) [17]

[Error] Unit1.pas(32): Illegal character in input file: " " ($A0)
[Error] Unit1.pas(32): Undeclared identifier: "SE_KERNEL_OBJECT"

А ты точно уверен, что тебе когда нибудь понадобится прятать свою прогу? Ты уверен, что в состоянии написать какую нибудь прогу? :))

PS. Ctrl+C/Ctrl+V это конечно хорошо, но иногда можно и ручками...
PPS. в uses добавь Aclapi и Accctrl (или что-то похожее :)
PPPS. под XP не будет работать..


 
Colt ©   (2003-02-27 14:28) [18]

[Error] Unit1.pas(32): Illegal character in input file: " " ($A0)
-----------------------
Осталась только эта ошибка.


 
ZZ ©   (2003-02-27 16:07) [19]

Colt
Внимательно перечитываем про вред использования Ctrl+C и Ctrl+V :))


 
Colt ©   (2003-02-28 07:44) [20]

ZZ Ты хоть сам то знаешь о чём говоришь. Я у людей спросил совета и помощи, а ты похоже умника из себя строишь, не хочешь помочь - ненадо.


 
ers   (2003-02-28 09:01) [21]

Сейчас пошлю вам ещё разок код, кстати он немного бъется по пути, проверьте на восклицательные знаки и т.д.
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);

В const ACL_REVISION = 2;
В Var ACL : _ACL;
В uses AclApi, Accctrl
Ну вродебы всё;)
Удачи!
ЕЩЁ РАЗ ПРОВЕРЬТЕ НА ВОСКЛ ЗНАКИ!!!!



 
ers   (2003-02-28 09:04) [22]

А вообще можно это использовать без ифа, но это не нужно;)))


 
ZZ ©   (2003-02-28 16:18) [23]

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

ЗЫ. Когда пофиксишь ошибку, то поймешь при чем тут Ctrl+C...



Страницы: 1 вся ветка

Текущий архив: 2003.04.28;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.02 c
14-91553
Johnmen
2003-04-11 15:46
2003.04.28
ВНИМАНИЕ!!! Голосование!!! Лучший Смит&Вессон!!!


9-91135
drhdh
2002-11-17 18:05
2003.04.28
RPG


3-91221
Jao
2003-04-10 08:45
2003.04.28
День добрый. Комментарии в SQL-запросе при конекте через ADO


3-91170
Anton.
2003-04-09 14:30
2003.04.28
Как узнать пустой DBEdit или нет.


1-91250
Light
2003-04-14 18:48
2003.04.28
Проблема с RichEdit