如何拦截user32.dll中的ExitWindowsEx这个API

ghost2003 2003-08-20 09:14:44
实现内核级 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,使任何程序都无法关闭计算机,该怎样写代码???
...全文
273 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ghost2003 2003-08-22
  • 打赏
  • 举报
回复
晕!!!!!!!!!!难到没人会???????
pankun 2003-08-22
  • 打赏
  • 举报
回复
真要这样么.要用陷井技术,先取得系统0环特权,再找到这个API的入口地址,再把这个API的第一行代码改为jmp 你的函数的地址,这样当调用这个API时,就跳到你的函数上来了.
baguli 2003-08-21
  • 打赏
  • 举报
回复
其实有一个简单的方法,不需要拦截ExitWindowsEx,只需要处理WM_QUERYENDSESSION消息,返回0就行了
lxpbuaa 2003-08-21
  • 打赏
  • 举报
回复
可能需要500分——至少……

—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————
ghost2003 2003-08-21
  • 打赏
  • 举报
回复
万一关机用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
我想做到万无一失,请个位帮帮忙!!!! 不知我想的对不对???
overtime 2003-08-21
  • 打赏
  • 举报
回复
处理这个消息 WM_QUERYENDSESSION,关机的时候系统会触发这个消息的,当你拦截到这个消息后通过返回值就可以做你的事情了

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧