C# 在Direct X 11游戏中勾选Direct X Endscene

C# 在Direct X 11游戏中勾选Direct X Endscene,c#,assemblies,code-injection,C#,Assemblies,Code Injection,我必须在游戏中做一些记忆阅读和一些注射。然而,为了避免竞争条件,我需要将我的ASM代码注入到终端场景中 以前我使用过以下代码: uint D3D9_Device; D3D9_Device = Memory.Read<uint>(Memory.BaseAddress + Direct3D9__Device); D3D9_Device = Memory.Read<uint>(D3D9_Device + Direct3D9__Device__OffsetA); D3D9_Dev

我必须在游戏中做一些记忆阅读和一些注射。然而,为了避免竞争条件,我需要将我的ASM代码注入到终端场景中

以前我使用过以下代码:

uint D3D9_Device;
D3D9_Device = Memory.Read<uint>(Memory.BaseAddress + Direct3D9__Device);
D3D9_Device = Memory.Read<uint>(D3D9_Device + Direct3D9__Device__OffsetA);
D3D9_Device = Memory.Read<uint>(D3D9_Device);
D3D9_Device = Memory.Read<uint>(D3D9_Device + Direct3D9__Device__OffsetB);
uint D3D9_装置;
D3D9_设备=Memory.Read(Memory.BaseAddress+Direct3D9_设备);
D3D9_设备=内存.Read(D3D9_设备+Direct3D9_设备uu OffsetA);
D3D9_设备=内存。读取(D3D9_设备);
D3D9_设备=内存.Read(D3D9_设备+Direct3D9_设备偏移量B);
访问Dx9设备,并使用反向偏移查找结束场景

但是,在windows 7中,directx 11是强制的,这意味着此读取失败并提供空对象


你知道当使用DirectX 11时,我如何在游戏的最后场景中执行钩子吗?

你应该是IAT钩住
GetProcAddress
并调用D3DCreate,捕获设备指针并从那里钩住VFTable。不知道如何“反转”COM vftable偏移量(这些偏移量是由COM DLL的构建方式预定义的,您只需计算DX SDK头中定义的虚拟方法,从0开始,然后乘以
sizeof(INT_PTR)
以获得偏移量),但读取它们的方式看起来也是错误的(您有一个太多的间接)


试着看看类似的东西,它有一个COM对象挂钩的例子。您也可以进行通读

您应该是IAT钩住
GetProcAddress
并调用D3DCreate,捕获设备指针并从那里钩住VFTable。不知道如何“反转”COM vftable偏移量(这些偏移量是由COM DLL的构建方式预定义的,您只需计算DX SDK头中定义的虚拟方法,从0开始,然后乘以
sizeof(INT_PTR)
以获得偏移量),但读取它们的方式看起来也是错误的(您有一个太多的间接)

试着看看类似的东西,它有一个COM对象挂钩的例子。你也可以通读一下