D3D Hook Frage (Endscene)

10/17/2010 10:33 Elektrochemie#1
Hallo,
Hab mir mal ein Tutorial zu dem Thema angeschaut. Scheint alles relativ einfach zu sein.
Allerdings finde ich in meiner D3D9.dll kein Endscene usw.
Ich bin scheinbar nicht der einzige mit dem Problem? :confused: Zumindest wenn ich mir das Forum anschau woher das Tutorial kommt. Aber dort kennt scheinbar auch niemand eine Lösung.

Woran liegt das?
Oder hat mir jemand ein paar neuere Tutorials zu dem Thema? (Gerne auch englisch).

Grüße.

Win 7 64 Bit.
10/17/2010 13:03 Medix#2
Und woran erkennst du ,dass du keine Endscene hast?
Hättest du keine Endscene funktion in deiner d3d9 würde ich gern mal sehen wie du directx9 anwendungen benützt.
Du hast wohl einfach falsch gesucht :)
10/17/2010 13:10 Elektrochemie#3
Ich hab nicht behauptet dass ich keine hab. Nur dass mit meiner Suchweise nicht draufkomm :P
Dass ich falsch gesucht hab weiss ich, wollte ja wissen wie ich richtig dazu komm.
10/17/2010 13:32 Medix#4
Google mal das diamond tutorial zum endscene hook da stehts.

Jedoch würd ich dir raten das ganze über vtables zu machen da es einfacher & dynamischer ist und bei allen d3d9 versionen funktioniert ohne die adresse zu ändern.


[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
10/17/2010 13:33 ms​#5
Die Funktion EndScene wird auch nicht exportiert.
Du musst zuerst [Only registered and activated users can see links. Click Here To Register...] callen. Bei dem returnten IDirect3D9 Objekt callst du dann [Only registered and activated users can see links. Click Here To Register...]. Der 6. Parameter ist ein Zeiger, der zu einem [Only registered and activated users can see links. Click Here To Register...] Objekt zeigt. Dieses Objekt hat die Funktion EndScene als Member-Methode.
10/17/2010 13:33 Elektrochemie#6
Das Tutorial von diamond hatte ich ja probiert. Auf dem Weg komm ich nich drauf.
Okay, das probier ich mal. Danke.

Disconnect, alles klar, danke.
10/17/2010 13:37 ms​#7
Quote:
Originally Posted by Medix View Post
Google mal das diamond tutorial zum endscene hook da stehts.

Jedoch würd ich dir raten das ganze über vtables zu machen da es einfacher & dynamischer ist und bei allen d3d9 versionen funktioniert ohne die adresse zu ändern.


[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
Quote:
Code:
    HMODULE hRenderer = GetModuleHandle("d3d9.dll");

    dwFuncBases[RST] = (DWORD)hRenderer + 0x636B0;
    dwFuncBases[BS]  = (DWORD)hRenderer + 0x87010;
    dwFuncBases[ES]  = (DWORD)hRenderer + 0x871A0;
    dwFuncBases[DIP] = (DWORD)hRenderer + 0x88830;
    dwFuncBases[SV]  = (DWORD)hRenderer + 0x82F70;
Das scheint mir aber nicht sehr dynamisch zu sein. :o
10/17/2010 14:13 Medix#8
Quote:
Originally Posted by Disconnect View Post
Das scheint mir aber nicht sehr dynamisch zu sein. :o
jup ;D

gibt aber noch mehr code in dem post.


Code:
void D3DHook::Init(BOOL bEnable)
{
	bHooked		= FALSE;
	// Handle (Base) von Renddx9 ermitteln
	HMODULE hRenderer = GetModuleHandle("d3d9.dll");
	
	DWORD* VTableStart = 0;   
	DWORD lala = dwFindPattern((DWORD)hRenderer, 0x128000, (PBYTE)"\xC7\x06\x00\x00\x00\x00\x89\x86\x00\x00\x00\x00\x89\x86", "xx????xx????xx");
	memcpy(&VTableStart, (void*)(lala+2), 4);

	dwFuncBases[RST] = VTableStart[16];
	dwFuncBases[BS]  = VTableStart[41];
	dwFuncBases[ES]	= VTableStart[42];
	dwFuncBases[SV]  = VTableStart[47];
	dwFuncBases[DIP] = VTableStart[82];

	// Hook ein/ausschalten
	this->SetState(bEnable);
}
10/18/2010 12:49 mydoom#9
Gibts eigentlich irgendwo eine Liste aller Offsets aus der Virtual Method Table der d3d9.dll? Oder muss ich mir die irgendwie manuell herausziehen? ;D
10/18/2010 13:16 Medix#10
here we go
:

Code:
QueryInterface // 0
AddRef // 1
Release // 2
TestCooperativeLevel // 3
GetAvailableTextureMem // 4
EvictManagedResources // 5
GetDirect3D // 6
GetDeviceCaps // 7
GetDisplayMode // 8
GetCreationParameters // 9
SetCursorProperties // 10
SetCursorPosition // 11
ShowCursor // 12
CreateAdditionalSwapChain // 13
GetSwapChain // 14
GetNumberOfSwapChains // 15
Reset // 16
Present // 17
GetBackBuffer // 18
GetRasterStatus // 19
SetDialogBoxMode // 20
SetGammaRamp // 21
GetGammaRamp // 22
CreateTexture // 23
CreateVolumeTexture // 24
CreateCubeTexture // 25
CreateVertexBuffer // 26
CreateIndexBuffer // 27
CreateRenderTarget // 28
CreateDepthStencilSurface // 29
UpdateSurface // 30
UpdateTexture // 31
GetRenderTargetData // 32
GetFrontBufferData // 33
StretchRect // 34
ColorFill // 35
CreateOffscreenPlainSurface // 36
SetRenderTarget // 37
GetRenderTarget // 38
SetDepthStencilSurface // 39
GetDepthStencilSurface // 40
BeginScene // 41
EndScene // 42
Clear // 43
SetTransform // 44
GetTransform // 45
MultiplyTransform // 46
SetViewport // 47
GetViewport // 48
SetMaterial // 49
GetMaterial // 50
SetLight // 51
GetLight // 52
LightEnable // 53
GetLightEnable // 54
SetClipPlane // 55
GetClipPlane // 56
SetRenderState // 57
GetRenderState // 58
CreateStateBlock // 59
BeginStateBlock // 60
EndStateBlock // 61
SetClipStatus // 62
GetClipStatus // 63
GetTexture // 64
SetTexture // 65
GetTextureStageState // 66
SetTextureStageState // 67
GetSamplerState // 68
SetSamplerState // 69
ValidateDevice // 70
SetPaletteEntries // 71
GetPaletteEntries // 72
SetCurrentTexturePalette // 73
GetCurrentTexturePalette // 74
SetScissorRect // 75
GetScissorRect // 76
SetSoftwareVertexProcessing // 77
GetSoftwareVertexProcessing // 78
SetNPatchMode // 79
GetNPatchMode // 80
DrawPrimitive // 81
DrawIndexedPrimitive // 82
DrawPrimitiveUP // 83
DrawIndexedPrimitiveUP // 84
ProcessVertices // 85
CreateVertexDeclaration // 86
SetVertexDeclaration // 87
GetVertexDeclaration // 88
SetFVF // 89
GetFVF // 90
CreateVertexShader // 91
SetVertexShader // 92
GetVertexShader // 93
SetVertexShaderConstantF // 94
GetVertexShaderConstantF // 95
SetVertexShaderConstantI // 96
GetVertexShaderConstantI // 97
SetVertexShaderConstantB // 98
GetVertexShaderConstantB // 99
SetStreamSource // 100
GetStreamSource // 101
SetStreamSourceFreq // 102
GetStreamSourceFreq // 103
SetIndices // 104
GetIndices // 105
CreatePixelShader // 106
SetPixelShader // 107
GetPixelShader // 108
SetPixelShaderConstantF // 109
GetPixelShaderConstantF // 110
SetPixelShaderConstantI // 111
GetPixelShaderConstantI // 112
SetPixelShaderConstantB // 113
GetPixelShaderConstantB // 114
DrawRectPatch // 115
DrawTriPatch // 116
DeletePatch // 117
CreateQuery // 118
ist cp aus nem anderen forum. Link wird hier leider zensiert :p