mirror of
https://github.com/FunkyFr3sh/cnc-ddraw.git
synced 2025-03-24 17:49:52 +01:00
Fix an issue with cncnet launcher, incorrectly called CloseHandle on loaded module handle
This commit is contained in:
parent
f59421bbe8
commit
2d5403338e
26
main.c
26
main.c
@ -422,6 +422,11 @@ ULONG __stdcall ddraw_Release(IDirectDrawImpl *This)
|
|||||||
ddraw->render.ev = NULL;
|
ddraw->render.ev = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(This->real_dll)
|
||||||
|
{
|
||||||
|
FreeLibrary(This->real_dll);
|
||||||
|
}
|
||||||
|
|
||||||
DeleteCriticalSection(&This->cs);
|
DeleteCriticalSection(&This->cs);
|
||||||
|
|
||||||
/* restore old wndproc, subsequent ddraw creation will otherwise fail */
|
/* restore old wndproc, subsequent ddraw creation will otherwise fail */
|
||||||
@ -488,21 +493,23 @@ HRESULT WINAPI DirectDrawCreate(GUID FAR* lpGUID, LPDIRECTDRAW FAR* lplpDD, IUnk
|
|||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
HMODULE real_dll = LoadLibrary("system32\\ddraw.dll");
|
|
||||||
if(!real_dll)
|
|
||||||
{
|
|
||||||
return DDERR_GENERIC;
|
|
||||||
}
|
|
||||||
|
|
||||||
IDirectDrawImpl *This = (IDirectDrawImpl *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectDrawImpl));
|
IDirectDrawImpl *This = (IDirectDrawImpl *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectDrawImpl));
|
||||||
This->lpVtbl = &iface;
|
This->lpVtbl = &iface;
|
||||||
printf(" This = %p\n", This);
|
printf(" This = %p\n", This);
|
||||||
*lplpDD = (LPDIRECTDRAW)This;
|
*lplpDD = (LPDIRECTDRAW)This;
|
||||||
|
This->Ref = 0;
|
||||||
|
ddraw_AddRef(This);
|
||||||
|
|
||||||
ddraw = This;
|
ddraw = This;
|
||||||
|
|
||||||
This->DirectDrawCreate = (HRESULT WINAPI (*)(GUID FAR*, LPDIRECTDRAW FAR*, IUnknown FAR*))GetProcAddress(real_dll, "DirectDrawCreate");
|
This->real_dll = LoadLibrary("system32\\ddraw.dll");
|
||||||
|
if(!This->real_dll)
|
||||||
|
{
|
||||||
|
ddraw_Release(This);
|
||||||
|
return DDERR_GENERIC;
|
||||||
|
}
|
||||||
|
|
||||||
CloseHandle(real_dll);
|
This->DirectDrawCreate = (HRESULT WINAPI (*)(GUID FAR*, LPDIRECTDRAW FAR*, IUnknown FAR*))GetProcAddress(This->real_dll, "DirectDrawCreate");
|
||||||
|
|
||||||
if(!This->DirectDrawCreate)
|
if(!This->DirectDrawCreate)
|
||||||
{
|
{
|
||||||
@ -628,8 +635,5 @@ HRESULT WINAPI DirectDrawCreate(GUID FAR* lpGUID, LPDIRECTDRAW FAR* lplpDD, IUnk
|
|||||||
GetPrivateProfileStringA("ddraw", "sensitivity", "0", tmp, sizeof(tmp), ini_path);
|
GetPrivateProfileStringA("ddraw", "sensitivity", "0", tmp, sizeof(tmp), ini_path);
|
||||||
This->sensitivity = strtof(tmp, NULL);
|
This->sensitivity = strtof(tmp, NULL);
|
||||||
|
|
||||||
This->Ref = 0;
|
|
||||||
ddraw_AddRef(This);
|
|
||||||
|
|
||||||
return DD_OK;
|
return DD_OK;
|
||||||
}
|
}
|
||||||
|
1
main.h
1
main.h
@ -42,6 +42,7 @@ typedef struct IDirectDrawImpl
|
|||||||
DEVMODE mode;
|
DEVMODE mode;
|
||||||
struct IDirectDrawSurfaceImpl *primary;
|
struct IDirectDrawSurfaceImpl *primary;
|
||||||
char title[128];
|
char title[128];
|
||||||
|
HMODULE real_dll;
|
||||||
|
|
||||||
/* real export from system32\ddraw.dll */
|
/* real export from system32\ddraw.dll */
|
||||||
HRESULT WINAPI (*DirectDrawCreate)(GUID FAR*, LPDIRECTDRAW FAR*, IUnknown FAR*);
|
HRESULT WINAPI (*DirectDrawCreate)(GUID FAR*, LPDIRECTDRAW FAR*, IUnknown FAR*);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user