RegisterShellHookWindow使用

2010年03月10日 星期三 20:12

   今晚因为某种用途用到RegisterShellHookWindow ,使用还是比较简单的,功能也不错,详细看下MSDN。把代码贴出来
HWND Hwnd = GetSafeHwnd();

msgShellHook = RegisterWindowMessage("SHELLHOOK");
   
RegisterShellHookWindow( Hwnd );
   
lpPrevWndProc = SetWindowLong( Hwnd , GWL_WNDPROC, (LONG)WindowProcxx );


/
LRESULT CALLBACK WindowProcxx(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{

CHAR szProcessPath[_MAX_PATH] = { 0 };
DWORD dwPid = 0;
#define HSHELL_APPCOMMAND 12

if( uMsg == msgShellHook)
{
   switch( wParam )
   {
   case HSHELL_WINDOWCREATED:
    {
    
     GetWindowThreadProcessId( (HWND)lParam ,&dwPid);
     if( dwPid != GetCurrentProcessId())
     {
      GetProcessName( dwPid , szProcessPath, _MAX_PATH );
      MessageBoxA(NULL,"窗口创建", szProcessPath, MB_OK);

     }
    }
    break;
   case HSHELL_APPCOMMAND:
    {
     MessageBoxA(NULL,"xx窗口创建", szProcessPath, MB_OK);
    }
   case HSHELL_REDRAW: //比如TAB也却换
    {
     MessageBoxA(NULL,"窗口HSHELL_REDRAW", szProcessPath, MB_OK);
    }
    break;
   default:
    break;
   }
}

return CallWindowProc((WNDPROC)lpPrevWndProc, hwnd, uMsg, wParam, lParam);

}

后注:
RegisterShellHookWindow
就是 NtUserCallHwnd 传入 72号。 这个数其实是个索引。用于索引_apfnSimpleCall
而 _apfnSimpleCall 是一个保存着许多函数指针的一个数据结构。我们可以通过下列的函数来调用_apfnSimpleCall里面的函数。因为这些函数的参数比较少,没有参数,一个参数或者俩个参数,所以下面的函数名号理解。
NtUserCallHwndParam NtUserCallNoParam NtUserCallOneParam NtUserCallTwoParam等
每个接受的INDEX是有限制的。
一些安全软件可能会HOOK NtUserCallOneParam NtUserCallTwoParam之类的。具体看 _apfnSimpleCall里面的指针,看你对哪个感兴趣就HOOK哪个。
或者直接修改 _apfnSimpleCall 里面的指针来达到目的也可以。这样比较隐蔽。
嗯,就看这些,有时间再看下,复习去。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值