2010-09-19 56 views
1

我需要在全局钩子链功能列表中的Windows,并得到其相应的应用程序,如果有可能通过全局钩子链。但我不知道如何从全局钩链中检索信息。检索窗口

据我所知,没有Windows API这样做,所以我认为我必须通过解析钩链链接列表找到它们。问题是我不知道这个链接列表的数据结构,它的开始地址。

有谁知道Windows如何管理其全局钩子链?我见过

+0

据我所知,没有真正_global_钩链。此外,即使桌面上的钩链也不与应用程序关联。他们在注入的DLL中调用DLL函数。 – MSalters 2010-09-20 07:38:49

+0

看看汉斯的链接。似乎在Windows中存在一个真正的全局钩子链。 – Roozbeh 2010-09-21 18:22:55

+2

没有记录的方式来做到这一点。如果您开始挖掘无证材料,那么您可能会停止在未来版本的Windows中工作。 (你也会给Windows兼容团队做恶梦。)为什么你需要知道这个呢? – 2011-09-05 15:16:34

回答

3

一种方法是显示在此blog post。它被this code引用(注意慢速服务器)。当然,疯狂的东西,不知道这将不同的Windows版本之间移植。

+0

感谢您的帮助。我已经看过博客,它给了我一个概述,但我认为代码可能更有用。现在我正尝试读取汇编代码并在win7下构建它。 – Roozbeh 2010-09-21 18:07:34

0

,而不是试图走内部的Windows结构,你知道,所有窗口挂钩必须有一个与之相关的加载模块已被注入到目标进程;如果您试图确保您的应用程序未被挂钩,请枚举已加载的模块列表并查找不应存在的模块。

+0

这将如何帮助你,你应该如何确定'假设'在那里?如果我正确地解释了他的问题,他想要的函数指针本身 – 2011-09-05 16:06:29

+0

运行的应用程序,让你的机器上的模块列表,那么这些都是应该在那里的人。 – 2011-09-05 18:06:53

+0

有没有办法知道'假设'在那里。有很多应用程序在全局注入不执行窗口挂钩的DLL。 – 2011-09-05 22:27:19