big*_*cle 6 hook protection direct3d code-injection dwm
我正在尝试为桌面窗口管理器开发某些扩展.我选择了DLL注入和函数挂钩的方法.它应该在Windows 7和Windows 8中运行.
我成功地将我的DLL注入dwm.exe进程并挂钩了Direct3D设备创建(Win7上的D3D10CreateDevice1和Win8上的D3D11CreateDevice/D3D11Device :: GetImmediateContext).但是,我有挂钩绘图程序(Draw/DrawIndexed/etc.)的问题.
每当我使用指向我的函数的指针替换vtable中的指针时,它们会在一段时间内恢复为原始指针.在DWM/Direct3D中可能有一些挂钩保护??? 我尝试创建后台线程来替换仍然存在的指针.它适用于Win7,但在Win8上很少(似乎指针在那里恢复得更快)
void thread(void* _device)
{
ID3D10Device1* device = (ID3D10Device1*)_device;
while(threadRunning)
{
if(device->lpVtbl->Draw != My_ID3D10Device1_Draw)
{
DX_METHOD_HOOK(device, ID3D10Device1, Draw);
DX_METHOD_HOOK(device, ID3D10Device1, DrawIndexed);
}
}
}
Run Code Online (Sandbox Code Playgroud)
有没有人有挂钩的经验,他可以给我一些帮助吗?非常感谢你!