type { 要HOOK的API函数定义 } TMyOpenProcess = function (dwDesiredAccess: DWORD; bInheritHandle: BOOL; dwProcessId: DWORD): THandle; stdcall;
procedure HookAPI; procedure UnHookAPI;
var ProcessHandle: HWND; BaseAddress: Pointer; MainHooK: Cardinal; OldProc: array [0..7] of Byte; NewPorc: array [0..7] of Byte;
implementation
function GetFileName(dwProcessID: Cardinal): string; var me: MODULEENTRY32; hm: Thandle; begin hm := CreateToolHelp32SnapShot(TH32CS_SNAPmodule, dwProcessID); me.dwSize := sizeof(ModuleEntry32); Module32First(hm, me); Result := StrPas(@me.szExePath); end;
function MyOpenProcess(dwDesiredAccess: DWORD; bInheritHandle: BOOL; dwProcessId: DWORD): THandle; stdcall; const INPMCLASS = 'TButForm1'; var nSize :Cardinal; Hwnds: HWND; AppProID: DWORD; begin if dwDesiredAccess = PROCESS_TERMINATE then begin Hwnds := FindWindow(INPMCLASS, nil); if Hwnds <> 0 then begin GetWindowThreadProcessId(Hwnds, @AppProID); if dwProcessId = AppProID then begin Result := 0; Exit; end; end; end; WriteProcessMemory(ProcessHandle, BaseAddress, @OldProc, 8, nSize); Result := OpenProcess(dwDesiredAccess, bInheritHandle, dwProcessId); WriteProcessMemory(ProcessHandle, BaseAddress, @NewPorc, 8, nSize); end;