Форум: "WinAPI";
Текущий архив: 2003.04.28;
Скачать: [xml.tar.bz2];
ВнизУбийство приложений Найти похожие ветки
← →
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
Пардон, не дописал! Добавь в constACL_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 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.04.28;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.009 c