首页
社区
课程
招聘
[求助] HOOK DX11 Present 之后调用 ResizeBuffers 报错0x887A0001
发表于: 2025-9-5 16:25 561

[求助] HOOK DX11 Present 之后调用 ResizeBuffers 报错0x887A0001

2025-9-5 16:25
561

c⌒っ゚Д゚)っ  我注入的是IMGUI的官方demo程序  “example_win32_directx11.exe”  当中,代码也是按照官方demo的更改尺寸写的,但是ResizeBuffers就是不成功





static void CleanupRenderTarget() {


client.render.pD3dDeviceContext->ClearState();

client.render.pD3dDeviceContext->Flush();

if (client.render.pRenderTargetView)

{

client.render.pRenderTargetView->Release();

client.render.pRenderTargetView = nullptr;

}

::Sleep(100);

}


static void CreateRenderTarget() {

ID3D11Texture2D* pBackBuffer = nullptr;

HRESULT hr = client.render.pSwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID*)&pBackBuffer);

if (SUCCEEDED(hr))

{

client.render.pD3dDevice->CreateRenderTargetView(

pBackBuffer,

0,

&client.render.pRenderTargetView);


pBackBuffer->Release();

}

}


//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

/*

* @brief Present钩子函数

*/

static HRESULT __stdcall mPresent(IDXGISwapChain* pSwapChain, UINT SyncInterval, UINT Flags) {

// 第一次调用时初始化ImGui

if (!client.render.bInitialized)

{

client.render.pSwapChain = pSwapChain;

Init();

}

// 不在WM_SIZE消息中处理窗口大小改变,而是在这里处理

if (client.render.ResizeWidth != 0 && client.render.ResizeHeight != 0)

{

CleanupRenderTarget();

HRESULT hr = pSwapChain->ResizeBuffers(

0,

0,

0,

DXGI_FORMAT_UNKNOWN,

0

);

if (!SUCCEEDED(hr))

{

method::PrintToConsole(L"ResizeBuffers失败 hr=0x%08X [%08X] [%08X]", hr, pSwapChain, client.render.pSwapChain);

}

client.render.ResizeWidth = client.render.ResizeHeight = 0;

CreateRenderTarget();

}

// 返回原始的Present函数 

return((Present)client.render.oPresent)(pSwapChain, SyncInterval, Flags);

}



[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回