#179 hook GetDiskFreeSpaceA
This commit is contained in:
parent
c648d46f4c
commit
1170d0dd12
5 changed files with 58 additions and 0 deletions
|
@ -35,16 +35,20 @@ typedef BOOL(WINAPI* DESTROYWINDOWPROC)(HWND);
|
|||
typedef int (WINAPI* MAPWINDOWPOINTSPROC)(HWND, HWND, LPPOINT, UINT);
|
||||
typedef BOOL (WINAPI* SHOWWINDOWPROC)(HWND, int);
|
||||
typedef BOOL(WINAPI* STRETCHBLTPROC)(HDC, int, int, int, int, HDC, int, int, int, int, DWORD);
|
||||
|
||||
typedef int (WINAPI* SETDIBITSTODEVICEPROC)(
|
||||
HDC, int, int, DWORD, DWORD, int, int, UINT, UINT, const VOID*, const BITMAPINFO*, UINT);
|
||||
|
||||
typedef int (WINAPI* STRETCHDIBITSPROC)(
|
||||
HDC, int, int, int, int, int, int, int, int, const VOID*, const BITMAPINFO*, UINT, DWORD);
|
||||
|
||||
typedef HHOOK(WINAPI* SETWINDOWSHOOKEXAPROC)(int, HOOKPROC, HINSTANCE, DWORD);
|
||||
typedef int (WINAPI* GETDEVICECAPSPROC)(HDC, int);
|
||||
typedef HMODULE(WINAPI* LOADLIBRARYAPROC)(LPCSTR);
|
||||
typedef HMODULE(WINAPI* LOADLIBRARYWPROC)(LPCWSTR);
|
||||
typedef HMODULE(WINAPI* LOADLIBRARYEXAPROC)(LPCSTR, HANDLE, DWORD);
|
||||
typedef HMODULE(WINAPI* LOADLIBRARYEXWPROC)(LPCWSTR, HANDLE, DWORD);
|
||||
typedef BOOL(WINAPI* GETDISKFREESPACEAPROC)(LPCSTR, LPDWORD, LPDWORD, LPDWORD, LPDWORD);
|
||||
typedef HRESULT(WINAPI* COCREATEINSTANCEPROC)(REFCLSID, LPUNKNOWN, DWORD, REFIID, LPVOID*);
|
||||
|
||||
extern GETCURSORPOSPROC real_GetCursorPos;
|
||||
|
@ -79,6 +83,7 @@ extern LOADLIBRARYAPROC real_LoadLibraryA;
|
|||
extern LOADLIBRARYWPROC real_LoadLibraryW;
|
||||
extern LOADLIBRARYEXAPROC real_LoadLibraryExA;
|
||||
extern LOADLIBRARYEXWPROC real_LoadLibraryExW;
|
||||
extern GETDISKFREESPACEAPROC real_GetDiskFreeSpaceA;
|
||||
extern COCREATEINSTANCEPROC real_CoCreateInstance;
|
||||
|
||||
extern int g_hook_method;
|
||||
|
|
|
@ -29,19 +29,32 @@ int WINAPI fake_MapWindowPoints(HWND hWndFrom, HWND hWndTo, LPPOINT lpPoints, UI
|
|||
BOOL WINAPI fake_ShowWindow(HWND hWnd, int nCmdShow);
|
||||
HHOOK WINAPI fake_SetWindowsHookExA(int idHook, HOOKPROC lpfn, HINSTANCE hmod, DWORD dwThreadId);
|
||||
int WINAPI fake_GetDeviceCaps(HDC hdc, int index);
|
||||
|
||||
BOOL WINAPI fake_StretchBlt(
|
||||
HDC hdcDest, int xDest, int yDest, int wDest, int hDest, HDC hdcSrc, int xSrc, int ySrc, int wSrc, int hSrc, DWORD rop);
|
||||
|
||||
int WINAPI fake_SetDIBitsToDevice(
|
||||
HDC, int, int, DWORD, DWORD, int, int, UINT, UINT, const VOID*, const BITMAPINFO*, UINT);
|
||||
|
||||
int WINAPI fake_StretchDIBits(
|
||||
HDC, int, int, int, int, int, int, int, int, const VOID*, const BITMAPINFO*, UINT, DWORD);
|
||||
|
||||
HMODULE WINAPI fake_LoadLibraryA(LPCSTR lpLibFileName);
|
||||
HMODULE WINAPI fake_LoadLibraryW(LPCWSTR lpLibFileName);
|
||||
HMODULE WINAPI fake_LoadLibraryExA(LPCSTR lpLibFileName, HANDLE hFile, DWORD dwFlags);
|
||||
HMODULE WINAPI fake_LoadLibraryExW(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags);
|
||||
|
||||
BOOL WINAPI fake_GetDiskFreeSpaceA(
|
||||
LPCSTR lpRootPathName,
|
||||
LPDWORD lpSectorsPerCluster,
|
||||
LPDWORD lpBytesPerSector,
|
||||
LPDWORD lpNumberOfFreeClusters,
|
||||
LPDWORD lpTotalNumberOfClusters);
|
||||
|
||||
HWND WINAPI fake_CreateWindowExA(
|
||||
DWORD dwExStyle, LPCSTR lpClassName, LPCSTR lpWindowName, DWORD dwStyle, int X, int Y,
|
||||
int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam);
|
||||
|
||||
HRESULT WINAPI fake_CoCreateInstance(
|
||||
REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID riid, LPVOID* ppv);
|
||||
|
||||
|
|
|
@ -372,6 +372,8 @@ static void cfg_create_ini()
|
|||
"allow_wmactivate=false\n"
|
||||
"dinputhook=false\n"
|
||||
"flipclear=false\n"
|
||||
"limit_disk_space=false\n"
|
||||
"fixmousehook=false\n"
|
||||
"bpp=0\n"
|
||||
"\n"
|
||||
"\n"
|
||||
|
@ -733,10 +735,12 @@ static void cfg_create_ini()
|
|||
"; Fallout\n"
|
||||
"[falloutw]\n"
|
||||
"dinputhook=true\n"
|
||||
"limit_disk_space=true\n"
|
||||
"\n"
|
||||
"; Fallout 2\n"
|
||||
"[FALLOUT2]\n"
|
||||
"dinputhook=true\n"
|
||||
"limit_disk_space=true\n"
|
||||
"\n"
|
||||
"; Fairy Tale About Father Frost, Ivan and Nastya\n"
|
||||
"[mrazik]\n"
|
||||
|
|
|
@ -49,6 +49,7 @@ LOADLIBRARYAPROC real_LoadLibraryA = LoadLibraryA;
|
|||
LOADLIBRARYWPROC real_LoadLibraryW = LoadLibraryW;
|
||||
LOADLIBRARYEXAPROC real_LoadLibraryExA = LoadLibraryExA;
|
||||
LOADLIBRARYEXWPROC real_LoadLibraryExW = LoadLibraryExW;
|
||||
GETDISKFREESPACEAPROC real_GetDiskFreeSpaceA = GetDiskFreeSpaceA;
|
||||
COCREATEINSTANCEPROC real_CoCreateInstance = CoCreateInstance;
|
||||
|
||||
static HOOKLIST g_hooks[] =
|
||||
|
@ -576,6 +577,7 @@ void hook_early_init()
|
|||
hook_patch_iat(GetModuleHandle(NULL), FALSE, "user32.dll", "ClipCursor", (PROC)fake_ClipCursor); //NexusTK
|
||||
hook_patch_iat(GetModuleHandle("AcGenral"), FALSE, "user32.dll", "SetWindowsHookExA", (PROC)fake_SetWindowsHookExA);
|
||||
hook_patch_iat(GetModuleHandle(NULL), FALSE, "user32.dll", "SetWindowsHookExA", (PROC)fake_SetWindowsHookExA);
|
||||
hook_patch_iat(GetModuleHandle(NULL), FALSE, "kernel32.dll", "GetDiskFreeSpaceA", (PROC)fake_GetDiskFreeSpaceA);
|
||||
}
|
||||
|
||||
void hook_exit()
|
||||
|
@ -633,4 +635,5 @@ void hook_exit()
|
|||
hook_patch_iat(GetModuleHandle(NULL), TRUE, "user32.dll", "ClipCursor", (PROC)fake_ClipCursor); //NexusTK
|
||||
hook_patch_iat(GetModuleHandle("AcGenral"), TRUE, "user32.dll", "SetWindowsHookExA", (PROC)fake_SetWindowsHookExA);
|
||||
hook_patch_iat(GetModuleHandle(NULL), TRUE, "user32.dll", "SetWindowsHookExA", (PROC)fake_SetWindowsHookExA);
|
||||
hook_patch_iat(GetModuleHandle(NULL), TRUE, "kernel32.dll", "GetDiskFreeSpaceA", (PROC)fake_GetDiskFreeSpaceA);
|
||||
}
|
||||
|
|
|
@ -776,6 +776,39 @@ HMODULE WINAPI fake_LoadLibraryExW(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dw
|
|||
return hmod;
|
||||
}
|
||||
|
||||
BOOL WINAPI fake_GetDiskFreeSpaceA(
|
||||
LPCSTR lpRootPathName,
|
||||
LPDWORD lpSectorsPerCluster,
|
||||
LPDWORD lpBytesPerSector,
|
||||
LPDWORD lpNumberOfFreeClusters,
|
||||
LPDWORD lpTotalNumberOfClusters)
|
||||
{
|
||||
BOOL result =
|
||||
real_GetDiskFreeSpaceA(
|
||||
lpRootPathName,
|
||||
lpSectorsPerCluster,
|
||||
lpBytesPerSector,
|
||||
lpNumberOfFreeClusters,
|
||||
lpTotalNumberOfClusters);
|
||||
|
||||
if (cfg_get_bool("limit_disk_space", FALSE))
|
||||
{
|
||||
if (lpSectorsPerCluster)
|
||||
*lpSectorsPerCluster = 0x00000040;
|
||||
|
||||
if (lpBytesPerSector)
|
||||
*lpBytesPerSector = 0x00000200;
|
||||
|
||||
if (lpNumberOfFreeClusters)
|
||||
*lpNumberOfFreeClusters = 0x0000FFF6;
|
||||
|
||||
if (lpTotalNumberOfClusters)
|
||||
*lpTotalNumberOfClusters = 0x0000FFF6;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
BOOL WINAPI fake_DestroyWindow(HWND hWnd)
|
||||
{
|
||||
BOOL result = real_DestroyWindow(hWnd);
|
||||
|
|
Loading…
Reference in a new issue