mirror of
https://github.com/FunkyFr3sh/cnc-ddraw.git
synced 2025-03-25 01:57:47 +01:00
hook AVIStreamGetFrameOpen
This commit is contained in:
parent
7025517c2f
commit
d83e9e4401
2
Makefile
2
Makefile
@ -4,7 +4,7 @@ TARGET ?= ddraw.dll
|
|||||||
|
|
||||||
LDFLAGS ?= -Wl,--enable-stdcall-fixup -s -static -shared
|
LDFLAGS ?= -Wl,--enable-stdcall-fixup -s -static -shared
|
||||||
CFLAGS ?= -Iinc -O2 -Wall -std=c99
|
CFLAGS ?= -Iinc -O2 -Wall -std=c99
|
||||||
LIBS = -lgdi32 -lwinmm -lole32 -lmsimg32
|
LIBS = -lgdi32 -lwinmm -lole32 -lmsimg32 -lavifil32
|
||||||
|
|
||||||
COMMIT := $(shell git describe --match=NeVeRmAtCh --always --dirty || echo UNKNOWN)
|
COMMIT := $(shell git describe --match=NeVeRmAtCh --always --dirty || echo UNKNOWN)
|
||||||
BRANCH := $(shell git rev-parse --abbrev-ref HEAD || echo UNKNOWN)
|
BRANCH := $(shell git rev-parse --abbrev-ref HEAD || echo UNKNOWN)
|
||||||
|
@ -223,7 +223,7 @@
|
|||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
<AdditionalDependencies>winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>avifil32.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
|
<ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
|
||||||
</Link>
|
</Link>
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
@ -265,7 +265,7 @@ echo #define GIT_BRANCH "%GIT_BRANCH%" >> %DST_FILE%
|
|||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<AdditionalDependencies>winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>avifil32.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
|
<ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
|
||||||
</Link>
|
</Link>
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
@ -307,7 +307,7 @@ echo #define GIT_BRANCH "%GIT_BRANCH%" >> %DST_FILE%
|
|||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<AdditionalDependencies>winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>avifil32.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
|
<ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
|
||||||
</Link>
|
</Link>
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
@ -349,7 +349,7 @@ echo #define GIT_BRANCH "%GIT_BRANCH%" >> %DST_FILE%
|
|||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<AdditionalDependencies>winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>avifil32.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
|
<ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
|
||||||
</Link>
|
</Link>
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
@ -391,7 +391,7 @@ echo #define GIT_BRANCH "%GIT_BRANCH%" >> %DST_FILE%
|
|||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<AdditionalDependencies>winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>avifil32.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
|
<ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
|
||||||
</Link>
|
</Link>
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
|
@ -9,6 +9,11 @@
|
|||||||
#include "IDirectDraw.h"
|
#include "IDirectDraw.h"
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct DDBITMAPINFO{
|
||||||
|
BITMAPINFOHEADER bmiHeader;
|
||||||
|
RGBQUAD bmiColors[256];
|
||||||
|
} DDBITMAPINFO;
|
||||||
|
|
||||||
struct IDirectDrawSurfaceImpl;
|
struct IDirectDrawSurfaceImpl;
|
||||||
struct IDirectDrawSurfaceImplVtbl;
|
struct IDirectDrawSurfaceImplVtbl;
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
#define HOOK_H
|
#define HOOK_H
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
#include <vfw.h>
|
||||||
|
|
||||||
|
|
||||||
#define HOOK_SKIP_2 0x00000001l
|
#define HOOK_SKIP_2 0x00000001l
|
||||||
@ -83,6 +84,8 @@ typedef HRESULT(WINAPI* COCREATEINSTANCEPROC)(REFCLSID, LPUNKNOWN, DWORD, REFIID
|
|||||||
typedef MCIERROR(WINAPI* MCISENDCOMMANDAPROC)(MCIDEVICEID, UINT, DWORD_PTR, DWORD_PTR);
|
typedef MCIERROR(WINAPI* MCISENDCOMMANDAPROC)(MCIDEVICEID, UINT, DWORD_PTR, DWORD_PTR);
|
||||||
typedef LPTOP_LEVEL_EXCEPTION_FILTER(WINAPI* SETUNHANDLEDEXCEPTIONFILTERPROC)(LPTOP_LEVEL_EXCEPTION_FILTER);
|
typedef LPTOP_LEVEL_EXCEPTION_FILTER(WINAPI* SETUNHANDLEDEXCEPTIONFILTERPROC)(LPTOP_LEVEL_EXCEPTION_FILTER);
|
||||||
|
|
||||||
|
typedef PGETFRAME (WINAPI* AVISTREAMGETFRAMEOPENPROC)(PAVISTREAM, LPBITMAPINFOHEADER);
|
||||||
|
|
||||||
extern GETCURSORPOSPROC real_GetCursorPos;
|
extern GETCURSORPOSPROC real_GetCursorPos;
|
||||||
extern CLIPCURSORPROC real_ClipCursor;
|
extern CLIPCURSORPROC real_ClipCursor;
|
||||||
extern SHOWCURSORPROC real_ShowCursor;
|
extern SHOWCURSORPROC real_ShowCursor;
|
||||||
@ -140,6 +143,7 @@ extern GETVERSIONEXAPROC real_GetVersionExA;
|
|||||||
extern COCREATEINSTANCEPROC real_CoCreateInstance;
|
extern COCREATEINSTANCEPROC real_CoCreateInstance;
|
||||||
extern MCISENDCOMMANDAPROC real_mciSendCommandA;
|
extern MCISENDCOMMANDAPROC real_mciSendCommandA;
|
||||||
extern SETUNHANDLEDEXCEPTIONFILTERPROC real_SetUnhandledExceptionFilter;
|
extern SETUNHANDLEDEXCEPTIONFILTERPROC real_SetUnhandledExceptionFilter;
|
||||||
|
extern AVISTREAMGETFRAMEOPENPROC real_AVIStreamGetFrameOpen;
|
||||||
|
|
||||||
extern BOOL g_hook_active;
|
extern BOOL g_hook_active;
|
||||||
extern HOOKLIST g_hook_hooklist[];
|
extern HOOKLIST g_hook_hooklist[];
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
#define WINAPI_HOOKS_H
|
#define WINAPI_HOOKS_H
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
#include <vfw.h>
|
||||||
|
|
||||||
|
|
||||||
BOOL WINAPI fake_GetCursorPos(LPPOINT lpPoint);
|
BOOL WINAPI fake_GetCursorPos(LPPOINT lpPoint);
|
||||||
@ -93,4 +94,6 @@ MCIERROR WINAPI fake_mciSendCommandA(MCIDEVICEID IDDevice, UINT uMsg, DWORD_PTR
|
|||||||
LPTOP_LEVEL_EXCEPTION_FILTER WINAPI fake_SetUnhandledExceptionFilter(
|
LPTOP_LEVEL_EXCEPTION_FILTER WINAPI fake_SetUnhandledExceptionFilter(
|
||||||
LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter);
|
LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter);
|
||||||
|
|
||||||
|
PGETFRAME WINAPI fake_AVIStreamGetFrameOpen(PAVISTREAM pavi, LPBITMAPINFOHEADER lpbiWanted);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1467,10 +1467,9 @@ HRESULT dd_CreateSurface(
|
|||||||
|
|
||||||
DWORD aligned_width = dst_surface->pitch / dst_surface->bytes_pp;
|
DWORD aligned_width = dst_surface->pitch / dst_surface->bytes_pp;
|
||||||
|
|
||||||
DWORD bmi_size = sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * 256;
|
|
||||||
DWORD bmp_size = dst_surface->pitch * (dst_surface->height + g_config.guard_lines);
|
DWORD bmp_size = dst_surface->pitch * (dst_surface->height + g_config.guard_lines);
|
||||||
|
|
||||||
dst_surface->bmi = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, bmi_size);
|
dst_surface->bmi = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DDBITMAPINFO));
|
||||||
dst_surface->bmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
|
dst_surface->bmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
|
||||||
dst_surface->bmi->bmiHeader.biWidth = aligned_width;
|
dst_surface->bmi->bmiHeader.biWidth = aligned_width;
|
||||||
dst_surface->bmi->bmiHeader.biHeight = -((int)dst_surface->height + g_config.guard_lines);
|
dst_surface->bmi->bmiHeader.biHeight = -((int)dst_surface->height + g_config.guard_lines);
|
||||||
|
@ -73,6 +73,7 @@ GETVERSIONEXAPROC real_GetVersionExA = GetVersionExA;
|
|||||||
COCREATEINSTANCEPROC real_CoCreateInstance = CoCreateInstance;
|
COCREATEINSTANCEPROC real_CoCreateInstance = CoCreateInstance;
|
||||||
MCISENDCOMMANDAPROC real_mciSendCommandA = mciSendCommandA;
|
MCISENDCOMMANDAPROC real_mciSendCommandA = mciSendCommandA;
|
||||||
SETUNHANDLEDEXCEPTIONFILTERPROC real_SetUnhandledExceptionFilter = SetUnhandledExceptionFilter;
|
SETUNHANDLEDEXCEPTIONFILTERPROC real_SetUnhandledExceptionFilter = SetUnhandledExceptionFilter;
|
||||||
|
AVISTREAMGETFRAMEOPENPROC real_AVIStreamGetFrameOpen = AVIStreamGetFrameOpen;
|
||||||
|
|
||||||
#if (_WIN32_WINNT >= _WIN32_WINNT_WIN2K)
|
#if (_WIN32_WINNT >= _WIN32_WINNT_WIN2K)
|
||||||
SETWINDOWLONGWPROC real_SetWindowLongW = SetWindowLongW;
|
SETWINDOWLONGWPROC real_SetWindowLongW = SetWindowLongW;
|
||||||
@ -142,6 +143,13 @@ HOOKLIST g_hook_hooklist[] =
|
|||||||
{ "", NULL, NULL, 0 }
|
{ "", NULL, NULL, 0 }
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"Avifil32.dll",
|
||||||
|
{
|
||||||
|
{ "AVIStreamGetFrameOpen", (PROC)fake_AVIStreamGetFrameOpen, (PROC*)&real_AVIStreamGetFrameOpen, 0 },
|
||||||
|
{ "", NULL, NULL, 0 }
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"dinput.dll",
|
"dinput.dll",
|
||||||
{
|
{
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <windowsx.h>
|
#include <windowsx.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
#include <vfw.h>
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "dd.h"
|
#include "dd.h"
|
||||||
@ -2174,3 +2175,27 @@ LPTOP_LEVEL_EXCEPTION_FILTER WINAPI fake_SetUnhandledExceptionFilter(
|
|||||||
return old;
|
return old;
|
||||||
//return real_SetUnhandledExceptionFilter(lpTopLevelExceptionFilter);
|
//return real_SetUnhandledExceptionFilter(lpTopLevelExceptionFilter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PGETFRAME WINAPI fake_AVIStreamGetFrameOpen(PAVISTREAM pavi, LPBITMAPINFOHEADER lpbiWanted)
|
||||||
|
{
|
||||||
|
if (g_ddraw.ref && g_ddraw.primary && (!lpbiWanted || (DWORD)lpbiWanted == 1))
|
||||||
|
{
|
||||||
|
DDBITMAPINFO bmi;
|
||||||
|
memcpy(&bmi, g_ddraw.primary->bmi, sizeof(DDBITMAPINFO));
|
||||||
|
|
||||||
|
bmi.bmiHeader.biHeight = 0;
|
||||||
|
bmi.bmiHeader.biWidth = 0;
|
||||||
|
|
||||||
|
if (g_ddraw.bpp == 8 && g_ddraw.primary->palette)
|
||||||
|
{
|
||||||
|
memcpy(&bmi.bmiColors[0], g_ddraw.primary->palette->data_rgb, sizeof(bmi.bmiColors));
|
||||||
|
}
|
||||||
|
|
||||||
|
PGETFRAME result = real_AVIStreamGetFrameOpen(pavi, (LPBITMAPINFOHEADER)&bmi);
|
||||||
|
|
||||||
|
if (result)
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
return real_AVIStreamGetFrameOpen(pavi, lpbiWanted);
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user