HOOK进程失败,大家帮看看是何原因?
var
Form1: TForm1;
hhk: HHOOK;
function GetMsgProc(nCode:integer;wParam:WPARAM;lParam:LPARAM):LRESULT;stdcall;
implementation
{$R *.dfm}
function GetMsgProc(nCode:integer;wParam:WPARAM;lParam:LPARAM):LRESULT;stdcall;
begin
result := 1;
if nCode<>HC_ACTION then exit;
MessageBox(0,'ok','ok',MB_OK);
result := CallNextHookEx(hhk,nCode,wParam,lParam);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
hwnd,pid:dword;
begin
try
hwnd := FindWindow('Notepad',nil);
if hwnd=0 then exit;
GetWindowThreadProcessId(hwnd,pid);
if pid=0 then exit;
hhk := SetWindowsHookEx(13,@GetMsgProc,HINSTANCE,pid);
//这里pid改为0就没问题,可以成功HOOK,如果设置为找到的pid,就HOOK失败,这个pid和任务管理器的pid是一致的。
//请问为什么HOOK失败呢?
if hhk=0 then exit;
Caption := 'hook on';
except
Caption := '出错';
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if (hhk<>0) and UnHookWindowsHookEx(hhk) then Caption := 'unhook';
end;
...全文
相关推荐
API HOOK 全局钩子, 防止进程被杀
在防止进程被杀的场景中,Hook OpenProcess可能是为了在尝试结束进程时进行检测或阻止。例如,如果Hook函数检测到有进程试图关闭被保护的进程,它可以返回错误代码,导致关闭操作失败。
进程隐藏之API HOOK
// 在Windows中,用户进程的所有操作都是基于WIN32 API来实现的,例如使用任务管理器来查看进程等操作。 // API HOOK技术是一种改变API执行结果的技术。 // PS:ZwQuerySystemInformation函数: // 功能:获取指定的系统信息。 // 原型:NTSTASTUS WINAPI ZwQuerySystemInformation ( // _In_ SYSTEM_INFORMATION_CLASS SystemInformationClass,
ring3下实现HOOK API续之进程防杀
**权限提升**:尝试获取更高的权限(如 Ring0),这样即使在Ring3的进程试图终止它也会失败,但这种方法通常涉及更复杂的安全风险。4.
VB使用HOOK.dll禁止程序创建进程
错误处理:为了提高程序的健壮性,需要添加适当的错误处理代码,如捕获API调用失败的情况,或者处理在解除HOOK时遇到的问题。
全局Hook失败.......
全局Hook是一种在Windows操作系统中广泛使用的编程技术,用于拦截和处理系统级的消息或者特定进程的事件。


Windows SDK/API
