诚心请教:COM HOOK问题
我在做一个硬件加速截屏项目,在网上找到很多DirectX截图黑屏的解决方案,最后得出的解决方案是:
“通过Hook DDraw的DirectDrawCreate(RealOne用)同DirectDrawCreateEx(WMP用)
获得IDirectDraw(7)
再COM Hook CreateSurface,注意RealOne使用的是通过QueryInterface获得IDirectDraw2
WMP则是IDirectDraw7
Hook了CreateSurface后,就能获得OverlaySurface”
我在下面链接的开源代码的基础上修改,可以Hook到自己写的demo的DirectDrawCreateEx
http://www.codeguru.com/cpp/w-p/dll/hooking/article.php/c127/APIHijack--A-Library-for-Easy-DLL-Function-Hooking.htm
下面链接demo却hook不到,用ida查看了Mosquito.exe的导出接口,确认其调用了DirectDrawCreateEx
http://files.cnblogs.com/graphics/Mosquito.zip
[解决办法]
hr = lpDD7->SetCooperativeLevel(NULL, DDSCL_NORMAL);//这里就挂掉了
你的问题,我粗略看了下,lpDD7这个指针你传给exe有啥用呢。你注入程序.exe的指针能访问注入目标的内存地址么?当然要报错。正确的作法是那一堆截屏之类的操作在dll里做,因为dll已经注入,和目标在同一进程内,能访问目标的内存地址。然后你的dll和主程序通过socket,namedpipe之类的通讯。