![]() |
|
|
#1
|
||||
|
||||
|
салам всем, кто знает как написать dll (в этом я не силен), и программу, которая, без именно этой библиотеки в корне своей папки не будет запускаться(проверять подлинность dll) - это первая проблема, вторая - сама dll - некий хук, которая отрубает зараннее в нее записанный список процессов.(И возможно ли отрубать процессы не по имени окна, а еще как нить). Помогите хотябы в чем нибудь.
|
|
#2
|
|||
|
|||
|
Насчет dll не знаю, не работал. Могу только сказать, что если программе нужна dll и её, то Windows выдаст об этом сообщение, и программа не загрузиться
|
|
#3
|
||||
|
||||
|
ну а если подмена dll хотя да, туплю я чет, ну а насчет процессов?
|
|
#4
|
||||
|
||||
|
Код:
library ProjectDll1; function Test: Boolean; begin Result:=True; end; exports Test; begin end. Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
function Test: Boolean; external 'ProjectDll1.dll';
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Test;
end;
end. http://data.cod.ru/71911 |
|
#5
|
||||
|
||||
|
пасиб понятно теперь, еще бы функцию в ней для убийства процессов=)
|
|
#6
|
||||
|
||||
|
кстати заменив функцию в dll и запустив программу пишет, что точка входа в процедуру Test не найдена в dll, то бишь палит всю кантору, можно как нить повесить перехватчик ошибки, что бы без правильной dll не только не запускалась программа но и не писала ошибку и почему она происходит?
|
|
#7
|
||||
|
||||
|
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TTest = function: Boolean;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
h: Cardinal;
p: Pointer;
begin
try
h:=LoadLibrary('ProjectDll1.dll');
if h=0 then raise Exception.Create('ProjectDll1.dll not found');
try
p:=GetProcAddress(h, 'Test');
if p=nil then raise Exception.Create('Test not found');
TTest(p);
finally
FreeLibrary(h);
end;
except
PostMessage(Handle, WM_CLOSE, 0, 0);
end;
end;
end.а лучше все это вставить в файл проекта. |
|
#8
|
|||
|
|||
|
winexec('taskkill /F /IM "notepad.exe" /T', 0)
- один из самых простых способов или // s - имя процесса procedure KilProc(s:string); begin winexec(pchar(taskkill /F /IM "+s+" /T), 0) // ноль - чтобы не отображалось консольное окошко end; вообщето для того чтобы убить процесс dll как бы не нужна... |