实现内核级 HOOK 对于拦截、分析、跟踪系统内核起着致关重要的作用。实现的方法不同意味着应用侧重点的不同。如想要拦截 NATIVE API 那么可能常用的就是 HOOK SERVICE TABLE 的方法。HOOK SERVICE TABLE 方法:
   这种方法对于拦截 NATIVE API 来说用的比较多。原理就是通过替换系统导
出的一个 SERVICE TABLE 中相应的 NATIVE API 的地址来达到拦截的目的。
因为此方法较为简单,网上也有不少资料来介绍。所以这里就不给出实例程序了。SERVICE TABLE 的结构如下:typedef struct ServiceDescriptorEntry {
    unsigned int *ServiceTableBase;
    unsigned int *ServiceCounterTableBase; 
    unsigned int NumberOfServices;
    unsigned char *ParamTableBase;
} ServiceDescriptorTableEntry_t, *PServiceDescriptorTableEntry_t;
以上内容是在一网站中看到,但无具体源码,请问delphi中任何实现????????
例如:我想拦截user32.dll中的ExitWindowsEx 这个API,使任何程序都无法关闭计算机,该怎样写代码???

解决方案 »

  1.   

    其实有一个简单的方法,不需要拦截ExitWindowsEx,只需要处理WM_QUERYENDSESSION消息,返回0就行了
      

  2.   

    处理这个消息 WM_QUERYENDSESSION,关机的时候系统会触发这个消息的,当你拦截到这个消息后通过返回值就可以做你的事情了
      

  3.   

    万一关机用exitwindowsex(EWX_FORCE,0)就根本不发送WM_QUERYENDSESSION消息!!
    "Forces processes to terminate. When this flag is set, Windows does not send the messages WM_QUERYENDSESSION and WM_ENDSESSION to the applications currently running in the system. "
    -----------delphi win32 sdk
    我想做到万无一失,请个位帮帮忙!!!! 不知我想的对不对???
      

  4.   

    真要这样么.要用陷井技术,先取得系统0环特权,再找到这个API的入口地址,再把这个API的第一行代码改为jmp 你的函数的地址,这样当调用这个API时,就跳到你的函数上来了.