type
TMExit=procedure(Int:Integer);var
Hook:HHook;procedure MExitProcess;
begin
MessageBox(0,'','',MB_OK);
end;procedure HookApi;
var
MExit:TMExit;
D1,D2,D3:DWORD;
begin
MExit:=GetProcAddress(GetModuleHandle('kernel32.dll'),'ExitProcess');
Windows.VirtualProtect(@MExit,5,PAGE_READWRITE,D1);
WriteProcessMemory(GetCurrentProcess,@Mexit,@MExitProcess,5,D2);
end;function HookProc(Int:Integer;WParam:WParam;LParam:Lparam):LRESULT;STDCALL;
begin
HookApi;
Windows.CallNextHookEx(Hook,Int,Wparam,Lparam);
end;procedure SetHook;
begin
SetWindowsHookEx(Wh_GetMessage,@HookProc,Hinstance,0);
end;exports
SetHook;
//这个是我自己写的hookapi代码,我不是很 明白WriteProcessMemory这个函数的使用特别是第3个参数,
这个dll运行后,打开任务管理器,任务管理器出错,内存不能为write什么的,请高手搞定,不要叫我去看什么MSDN,这个我看不明白
否则就不会发什么贴子了
TMExit=procedure(Int:Integer);var
Hook:HHook;procedure MExitProcess;
begin
MessageBox(0,'','',MB_OK);
end;procedure HookApi;
var
MExit:TMExit;
D1,D2,D3:DWORD;
begin
MExit:=GetProcAddress(GetModuleHandle('kernel32.dll'),'ExitProcess');
Windows.VirtualProtect(@MExit,5,PAGE_READWRITE,D1);
WriteProcessMemory(GetCurrentProcess,@Mexit,@MExitProcess,5,D2);
end;function HookProc(Int:Integer;WParam:WParam;LParam:Lparam):LRESULT;STDCALL;
begin
HookApi;
Windows.CallNextHookEx(Hook,Int,Wparam,Lparam);
end;procedure SetHook;
begin
SetWindowsHookEx(Wh_GetMessage,@HookProc,Hinstance,0);
end;exports
SetHook;
//这个是我自己写的hookapi代码,我不是很 明白WriteProcessMemory这个函数的使用特别是第3个参数,
这个dll运行后,打开任务管理器,任务管理器出错,内存不能为write什么的,请高手搞定,不要叫我去看什么MSDN,这个我看不明白
否则就不会发什么贴子了
老实说我没有修改过ExitProcess这个函数,不知道这个函数是否可以真的钩住,不是所有的函数都能钩住的,建议你用VirtualProtectEx,VirtualQueryEx检查进程中的内存地址是否可操作。APIHOOK有2种方式,你用的是其中一种,这个方法在2000以上操作系统很容易使用,95/98上就很麻烦(95/98的系统DLL全是系统保护的,除非你自己提升自己的程序进入ring 0模式,这样也可以在95/98系统下使用)。
老实说我没有修改过ExitProcess这个函数,不知道这个函数是否可以真的钩住,不是所有的函数都能钩住的,建议你用VirtualProtectEx,VirtualQueryEx检查进程中的内存地址是否可操作。APIHOOK有2种方式,你用的是其中一种,这个方法在2000以上操作系统很容易使用,95/98上就很麻烦(95/98的系统DLL全是系统保护的,除非你自己提升自己的程序进入ring 0模式,这样也可以在95/98系统下使用)。
好象是这样的吧。我也不是很了解。