2016-04-03 12:42:48 -04:00
|
|
|
#define _CRT_SECURE_NO_WARNINGS
|
|
|
|
|
|
|
|
#include "dxwnd.h"
|
|
|
|
#include "dxwcore.hpp"
|
|
|
|
#include "syslibs.h"
|
|
|
|
#include "hddraw.h"
|
|
|
|
#include "dxhook.h"
|
|
|
|
#include "dxhelper.h"
|
|
|
|
#include "shareddc.hpp"
|
|
|
|
|
|
|
|
#include "stdio.h"
|
|
|
|
|
|
|
|
static BOOL bGDIRecursionFlag = FALSE;
|
|
|
|
|
|
|
|
#define _Warn(s) MessageBox(0, s, "to do", MB_ICONEXCLAMATION)
|
|
|
|
|
|
|
|
typedef BOOL (WINAPI *AlphaBlend_Type)(HDC hdcDest, int xoriginDest, int yoriginDest, int wDest, int hDest, HDC hdcSrc, int xoriginSrc, int yoriginSrc, int wSrc, int hSrc, BLENDFUNCTION ftn);
|
|
|
|
AlphaBlend_Type pAlphaBlend = NULL;
|
|
|
|
BOOL WINAPI extAlphaBlend(HDC hdcDest, int xoriginDest, int yoriginDest, int wDest, int hDest, HDC hdcSrc, int xoriginSrc, int yoriginSrc, int wSrc, int hSrc, BLENDFUNCTION ftn);
|
|
|
|
|
|
|
|
typedef BOOL (WINAPI *GradientFill_Type)(HDC, PTRIVERTEX, ULONG, PVOID, ULONG, ULONG);
|
|
|
|
GradientFill_Type pGradientFill = NULL;
|
|
|
|
BOOL WINAPI extGradientFill(HDC, PTRIVERTEX, ULONG, PVOID, ULONG, ULONG);
|
|
|
|
|
|
|
|
typedef BOOL (WINAPI *TransparentBlt_Type)(HDC, int, int, int, int, HDC, int, int, int, int, UINT);
|
|
|
|
TransparentBlt_Type pTransparentBlt = NULL;
|
|
|
|
BOOL WINAPI extTransparentBlt(HDC, int, int, int, int, HDC, int, int, int, int, UINT);
|
|
|
|
|
2016-12-03 11:45:15 -05:00
|
|
|
static HookEntryEx_Type Hooks[]={
|
2016-04-03 12:42:48 -04:00
|
|
|
|
2016-12-03 11:45:15 -05:00
|
|
|
{HOOK_IAT_CANDIDATE, 0, "AlphaBlend", (FARPROC)NULL, (FARPROC *)&pAlphaBlend, (FARPROC)extAlphaBlend},
|
|
|
|
{HOOK_IAT_CANDIDATE, 0, "GradientFill", (FARPROC)NULL, (FARPROC *)&pGradientFill, (FARPROC)extGradientFill},
|
|
|
|
{HOOK_IAT_CANDIDATE, 0, "TransparentBlt", (FARPROC)NULL, (FARPROC *)&pTransparentBlt, (FARPROC)extTransparentBlt},
|
|
|
|
{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator
|
2016-04-03 12:42:48 -04:00
|
|
|
};
|
|
|
|
|
|
|
|
static char *libname = "msimg32.dll";
|
|
|
|
|
|
|
|
void HookMSIMG32Init()
|
|
|
|
{
|
2016-12-03 11:45:15 -05:00
|
|
|
HookLibInitEx(Hooks);
|
2016-04-03 12:42:48 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
void HookMSIMG32(HMODULE module)
|
|
|
|
{
|
2016-12-03 11:45:15 -05:00
|
|
|
HookLibraryEx(module, Hooks, libname);
|
2016-04-03 12:42:48 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
FARPROC Remap_MSIMG32_ProcAddress(LPCSTR proc, HMODULE hModule)
|
|
|
|
{
|
|
|
|
FARPROC addr;
|
|
|
|
|
2016-12-03 11:45:15 -05:00
|
|
|
if(addr=RemapLibraryEx(proc, hModule, Hooks)) return addr;
|
2016-04-03 12:42:48 -04:00
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
BOOL WINAPI extAlphaBlend(HDC hdcDest, int xoriginDest, int yoriginDest, int wDest, int hDest, HDC hdcSrc, int xoriginSrc, int yoriginSrc, int wSrc, int hSrc, BLENDFUNCTION ftn)
|
|
|
|
{
|
|
|
|
_Warn("AlphaBlend");
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
BOOL WINAPI extGradientFill(HDC hdc, PTRIVERTEX pVertex, ULONG nVertex, PVOID pMesh, ULONG nMesh, ULONG ulMode)
|
|
|
|
{
|
|
|
|
_Warn("GradientFill");
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
BOOL WINAPI extTransparentBlt(HDC hdcDest, int xoriginDest, int yoriginDest, int wDest, int hDest,
|
|
|
|
HDC hdcSrc, int xoriginSrc, int yoriginSrc, int wSrc, int hSrc, UINT crTransparent)
|
|
|
|
{
|
|
|
|
_Warn("TransparentBlt");
|
|
|
|
return TRUE;
|
|
|
|
}
|