Fre*_*abe 10 c++ windows api hook api-hook
我正在使用代理DLL来拦截对CreateWindowExA/的CreateWindowExW调用.除了某些应用程序(最值得注意的是一些Visual Basic 6应用程序)似乎能够创建窗口而不通过这两个函数中的任何一个之外,这样可以很好地退出.像Spy ++这样的工具能够显示Window,但我的钩子函数没有注意到它们.
我的第一个怀疑是这些(旧的)应用程序可能使用CreateWindowA/CreateWindowW创建窗口,但至少对于我的编译器(MSVC6到MSVC10),CreateWindow它只是一个#define; 文件的备注部分证实了这一点.
我的第二个想法是,我可以一个也许安装CBT hook使用SetWindowsHookEx检测窗口的创作.但是,结果是一样的:这个钩子注意到与我的钩子API函数相同的窗口,但它没有注意到Spy ++中可见的所有窗口.
所以我的问题是:是否有时间CreateWindowA/CreateWindowW不是#define,而是真正的功能?此功能是否仍然可以导出user32.dll,可能是出于兼容性原因?如何处理此函数以挂钩它?
或者是否可能有一些其他的,可能没有文档的函数可用于创建函数,就像NtCreateProcess可以用来代替CreateProcess?
三个简单的猜测:
1)VB应用程序是否真的可以在引擎盖下调用"DialogBox"API(例如DialogBoxParam,CreateDialogIndirect等等)?
2)您正在运行64位操作系统并挂起64位user32.dll.因此,32位应用程序不会被吸引.在c:\ windows\syswow64中有一个32位的user32.dll副本
3)您没有挂钩应用程序正在使用的user32.dll.许多较旧的应用程序可能正在获得一些DLL重定向.在命令提示符下,从c:\ windows\winsxs目录中执行"dir/s user32.dll".您将在此处看到至少另一个user32.dll副本.忘记发生这种情况,但你可以Bing为"winsxs"并得到一些页面讨论并排目录如何解决更新的Windows操作系统版本上的compat问题.
我怀疑#3是你问题的原因.
| 归档时间: |
|
| 查看次数: |
1716 次 |
| 最近记录: |