Direct3D9->CreateDevice hooken

Da ich ja im anderen Thread das Problem mit viel Hilfe lösen konnte, habe ich jetzt ein neues. :(
Und zwar geht es um die Direkt3D9-Funktion CreateDevice.
Ich hab's jetzt geschafft, meine eigene DLL und damit auch meine eigene Direct3DCreate9-Funktion zu injecten und auch mein eigenes Objekt. Nun möchte ich als nächstes von diesem Objekt die CreateDevice-Funktion hooken.
Das mache ich in etwa so:

Code:
class Direct3D9Wrapper : public IDirect3D9
{
public:

	Direct3D9Wrapper(LPDIRECT3D9 pDirect3D );
	virtual ~Direct3D9Wrapper();

[...]

    STDMETHOD(CreateDevice)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,HWND hFocusWindow,DWORD BehaviorFlags,D3DPRESENT_PARAMETERS* pPresentationParameters,IDirect3DDevice9** ppReturnedDeviceInterface);
	IDirect3D9* Direct3D9;
};
Code:
HRESULT Direct3D9Wrapper::CreateDevice(UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS *pPresentationParameters, IDirect3DDevice9 **ppReturnedDeviceInterface)
{
	IDirect3DDevice9* pDirect3DDevice9;
	HRESULT hRes = Direct3D9->CreateDevice(Adapter, DeviceType, hFocusWindow, BehaviorFlags, pPresentationParameters, &pDirect3DDevice9);
	*ppReturnedDeviceInterface = new Direct3DDevice9Wrapper(pDirect3DDevice9, Direct3D9, pPresentationParameters);
	return hRes;
}

Code:
class Direct3DDevice9Wrapper : public IDirect3DDevice9
{
public:
	Direct3DDevice9Wrapper(IDirect3DDevice9* pDirect3DDevice9, IDirect3D9* pDirect3D9,
		D3DPRESENT_PARAMETERS *pPresentationParameters);
	virtual ~Direct3DDevice9Wrapper();

[...]

	IDirect3DDevice9* Direct3DDevice9;
	IDirect3D9* Direct3D9;
};
Code:
Direct3DDevice9Wrapper::Direct3DDevice9Wrapper(IDirect3DDevice9 *pDirect3DDevice9, IDirect3D9 *pDirect3D9, D3DPRESENT_PARAMETERS *pPresentationParameters)
{
	Direct3DDevice9 = pDirect3DDevice9;
	Direct3D9 = pDirect3D9;
}

Das injekten der Direct3DCreate-Funktion gibt keine Probleme, die Ausgabe einer Messagebox zeigt das richtige Ergebnis.
Allerdings bekomme ich, sobald ich die CreateDevice-Funktion mithooke nur noch ein weißes Fenster, anstelle meines eigentlichen Programmes, die Funktionen wie Clear oder EndScene werden jedoch ausgeführt, d.h. von meinen Funktionen übernommen, allerdings bleibt das Bild weiß. Außerdem wird das Programm sehr viel langsamer und reagiert träger.

Woran liegt das?
 
Zurück
Oben