Advertisement

Direct draw create hook

Started by December 01, 2018 09:10 AM
0 comments, last by kurlyak 6 years, 2 months ago

Hello folks! I created my own ddraw.dll and FakeDirectDrawCreate() func. When I tried to get IID_IDirectDrawSurface3 pointer my app don't work. What is the problem? Thanks in advance.


__declspec(dllexport) HRESULT WINAPI  FakeDirectDrawCreate(GUID FAR *lpGUID, LPVOID *lplpDD, IUnknown FAR *pUnkOuter )
{ 
	DirectDrawCreate_Type OldFn = (DirectDrawCreate_Type)ddraw.DirectDrawCreate;
	HRESULT hr = OldFn( lpGUID, lplpDD, pUnkOuter );
	*lplpDD =(LPDIRECTDRAW) new MyDirectDraw((LPDIRECTDRAW)*lplpDD);

	return hr;
}


//MyDirectDraw class
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObj)
{
	m_device->QueryInterface(riid, ppvObj);

	if (riid==IID_IDirectDraw2)
	{
		*ppvObj =(LPDIRECTDRAW2) new MyDirectDraw2((LPDIRECTDRAW2)*ppvObj);
	}
	
	return S_OK;
}

//MyDirectDraw class
HRESULT STDMETHODCALLTYPE CreateSurface(LPDDSURFACEDESC lpDDSurfaceDesc2,
 	LPDIRECTDRAWSURFACE FAR *lplpDDSurface,
	IUnknown FAR *pUnkOuter)
{

	m_device2->CreateSurface(lpDDSurfaceDesc2, lplpDDSurface,  pUnkOuter   ); 
	*lplpDDSurface =(LPDIRECTDRAWSURFACE) new MyDirectDrawSurface((LPDIRECTDRAW2)m_device2, *lplpDDSurface);

}

//MyDirectDrawSurface class
HRESULT STDMETHODCALLTYPE QueryInterface ( REFIID riid, void** ppvObj)
{

	else if(riid==IID_IDirectDrawSurface3)
	{
		*ppvObj =(LPDIRECTDRAWSURFACE3) new MyDirectDrawSurface3((LPDIRECTDRAW2)m_device, (LPDIRECTDRAWSURFACE3)*ppvObj);
	}
}

class MyDirectDraw :  public IDirectDraw
class MyDirectDraw2 :  public IDirectDraw2
class MyDirectDrawSurface : public IDirectDrawSurface
class MyDirectDrawSurface3 : public IDirectDrawSurface3

 

Windows programming is like going to the dentist: You know it’s good for you, but no one likes doing it.- Andre LaMothe.

This topic is closed to new replies.

Advertisement