Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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

Пардон, не дописал! Добавь в 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.04.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.02 c
1-91391
Jam
2003-04-16 10:18
2003.04.28
Слияние файлов


1-91307
DeMoN-777
2003-04-17 15:25
2003.04.28
Ворд+Delphi


8-91416
Stager
2003-01-25 00:00
2003.04.28
Быстрая отрисовка 2D


1-91246
paxer
2003-04-15 17:45
2003.04.28
Как в переменной типа vaiant сохранить Pointer?


14-91506
Mike Kouzmine
2003-04-10 11:45
2003.04.28
Можно ли по документу определить принтер





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский