Win7 / 8 DWM绘制挂钩

时间:2013-01-08 21:57:51

标签: hook code-injection direct3d protection 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);
        }
    }
}

有没有人有挂钩的经验,他可以给我一些帮助吗?非常感谢你!

0 个答案:

没有答案