64 位操作系统的系统范围挂钩
我想在 64 位操作系统上执行系统范围的挂钩(使用 SetWindowHook)。
我知道64位进程(= proc64)只能加载64位dll(= dll64),32位进程(= proc32)只能加载32位dll(= dll32)。
目前我计划调用 SetWindowHook 两次,一次使用 dll32,一次使用 dll64,期望 proc64s 将加载 dll64,proc32s 将加载 dll32(而 proc64s 的 dll32 和 proc32s 的 dll64 将失败)。
这是正确的方法吗,还是有“更正确”的方法?
谢谢! :-)
I want to perform a system-wide hook (using SetWindowHook) on a 64bit operating system.
I know that 64bit processes (= proc64) can load only 64bit dlls (= dll64) and 32bit processes (= proc32) can load only 32bit dlls (= dll32).
Currently I am planning to call SetWindowHook twice, once with dll32 and once with dll64, expecting that proc64s will load dll64 and proc32s will load dll32 (while dll32 for proc64s and dll64 for proc32s will fail).
Is that the correct way to do that, or is there a "more correct" way to do that?
Thanks! :-)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您所描述的方法是正确的并且已记录在案。
来自 http://msdn.microsoft.com/en -us/library/ms644990(v=vs.85).aspx:
请注意最后一句话,32 位和 64 位 DLL 的名称必须不同。
Approach that you've described is correct and documented.
From http://msdn.microsoft.com/en-us/library/ms644990(v=vs.85).aspx:
Note the last statement that names of 32-bit and 64-bit DLLs MUST be different.
您可能需要查看 EasyHook 来避免一大堆麻烦。
You'll probably want to look at EasyHook to save yourself a whole bunch of trouble.
您应该在代码中测试机器,看看字长是 32 位还是 64 位。 64 位机器将通过扩展字长来处理 32 位指令集,但是传递 64 位指令集的 32 位机器......可能会导致非常糟糕的事情。
在 C 标准库 limit.h 标头中,INT_MAX 将为您提供最大大小,对其进行测试以查看
一旦获得标志,您就会知道要包含哪个文件,并且可以使用您的标志来包含它。
You should test the machine in your code to see if the word length is 32 or 64 bit. A 64 bit machine will process 32 bit instruction sets by extending the word lengths, but a 32 bit machine that is passed a 64 bit instruction set... could cause really bad things.
In the C standard library limits.h header—INT_MAX will give you maximum size, test it to see
once you have your flag you will know which file to include, and you can use your flag to include it with.