【发布时间】:2022-01-10 00:09:48
【问题描述】:
您好,我正在开发一款名为 Rising Kingdoms 的旧游戏的模组,它可以让我调整大小,提高游戏的分辨率。
问题是 fnResize 函数在“某些”新设备 (W11 W10 20xx) 上不起作用
它总是无缘无故地返回 0。
主要功能:
HMODULE dxgi = GetModuleHandleA("dxgi.dll");
static BYTE ResizeSig[] = { 0x48, 0x81, 0xec, 0xc0, 0x00, 0x00, 0x00, 0x48, 0xc7, 0x45, 0x1f };
sizeof(ResizeHead));
fnResize = reinterpret_cast<decltype(fnResize)>(Tools::FindFn(dxgi, ResizeSig, sizeof(ResizeSig)));
Logger::Log("IDXGISwapChain::ResizeBuffers: %p\n", fnResize);
if (!fnResize)
{
Logger::Log("Resize Broke\n");
return false;
};
inline BYTE* Mod::Tools::FindFn(HMODULE mod, BYTE* sig, SIZE_T sigSize)
{
if (!mod || !sig || !sigSize) return 0;
MODULEINFO modInfo;
if (!K32GetModuleInformation(GetCurrentProcess(), mod, &modInfo, sizeof(MODULEINFO))) return 0;
auto base = static_cast<BYTE*>(modInfo.lpBaseOfDll);
auto fn = Tools::FindSignature(base, base + modInfo.SizeOfImage - 1, sig, sigSize);
if (!fn) return 0;
for (; *fn != 0xCC && *fn != 0xC3; fn--);
fn++;
return fn;
}
inline BYTE* Mod::Tools::FindSignature(BYTE* start, BYTE* end, BYTE* sig, SIZE_T size)
{
for (BYTE* it = start; it < end - size; it++) {
if (CompareByteArray(it, sig, size)) {
return it;
};
}
return 0;
}
【问题讨论】:
-
这里只是路过评论,但不是S_OK == 0,这意味着它在Win11上成功,在Win10上失败?
-
你已经问过这个问题并在没有回答 cmets 的情况下将其删除:stackoverflow.com/questions/70613818/…
标签: c++ directx directx-11 dxgi