mirror of
https://github.com/FunkyFr3sh/cnc-ddraw.git
synced 2025-03-25 01:57:47 +01:00
use different function to enumarte modules for mingw build
This commit is contained in:
parent
0f08cbcc65
commit
bae707f865
@ -5,6 +5,7 @@
|
|||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
|
|
||||||
|
HMODULE WINAPI util_enumerate_modules(_In_opt_ HMODULE hModuleLast);
|
||||||
BOOL util_is_bad_read_ptr(void* p);
|
BOOL util_is_bad_read_ptr(void* p);
|
||||||
BOOL util_is_minimized(HWND hwnd);
|
BOOL util_is_minimized(HWND hwnd);
|
||||||
BOOL util_is_avx_supported();
|
BOOL util_is_avx_supported();
|
||||||
|
28
src/hook.c
28
src/hook.c
@ -474,17 +474,8 @@ void hook_create(HOOKLIST* hooks, BOOL initial_hook)
|
|||||||
char mod_dir[MAX_PATH] = { 0 };
|
char mod_dir[MAX_PATH] = { 0 };
|
||||||
char mod_filename[MAX_PATH] = { 0 };
|
char mod_filename[MAX_PATH] = { 0 };
|
||||||
HMODULE hmod = NULL;
|
HMODULE hmod = NULL;
|
||||||
HANDLE process = NULL;
|
|
||||||
|
|
||||||
#ifndef _MSC_VER
|
while ((hmod = util_enumerate_modules(hmod)))
|
||||||
HMODULE mods[512];
|
|
||||||
memset(mods, 0, sizeof(mods));
|
|
||||||
process = GetCurrentProcess();
|
|
||||||
EnumProcessModules(process, mods, sizeof(mods) - sizeof(mods[0]), NULL);
|
|
||||||
for (int i = 0; i < sizeof(mods) / sizeof(mods[0]) && (hmod = mods[i]); i++)
|
|
||||||
#else
|
|
||||||
while (hmod = DetourEnumerateModules(hmod))
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
if (hmod == g_ddraw_module)
|
if (hmod == g_ddraw_module)
|
||||||
continue;
|
continue;
|
||||||
@ -515,9 +506,6 @@ void hook_create(HOOKLIST* hooks, BOOL initial_hook)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (process)
|
|
||||||
CloseHandle(process);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -561,17 +549,8 @@ void hook_revert(HOOKLIST* hooks)
|
|||||||
char mod_dir[MAX_PATH] = { 0 };
|
char mod_dir[MAX_PATH] = { 0 };
|
||||||
char mod_filename[MAX_PATH] = { 0 };
|
char mod_filename[MAX_PATH] = { 0 };
|
||||||
HMODULE hmod = NULL;
|
HMODULE hmod = NULL;
|
||||||
HANDLE process = NULL;
|
|
||||||
|
|
||||||
#ifndef _MSC_VER
|
while ((hmod = util_enumerate_modules(hmod)))
|
||||||
HMODULE mods[512];
|
|
||||||
memset(mods, 0, sizeof(mods));
|
|
||||||
process = GetCurrentProcess();
|
|
||||||
EnumProcessModules(process, mods, sizeof(mods) - sizeof(mods[0]), NULL);
|
|
||||||
for (int i = 0; i < sizeof(mods) / sizeof(mods[0]) && (hmod = mods[i]); i++)
|
|
||||||
#else
|
|
||||||
while (hmod = DetourEnumerateModules(hmod))
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
if (hmod == g_ddraw_module)
|
if (hmod == g_ddraw_module)
|
||||||
continue;
|
continue;
|
||||||
@ -591,9 +570,6 @@ void hook_revert(HOOKLIST* hooks)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (process)
|
|
||||||
CloseHandle(process);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
57
src/utils.c
57
src/utils.c
@ -11,6 +11,63 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
The following code is licensed under the MIT license:
|
||||||
|
DetourEnumerateModules
|
||||||
|
Copyright (c) Microsoft Corporation
|
||||||
|
https://github.com/microsoft/Detours
|
||||||
|
*/
|
||||||
|
#define MM_ALLOCATION_GRANULARITY 0x10000
|
||||||
|
|
||||||
|
HMODULE WINAPI util_enumerate_modules(_In_opt_ HMODULE hModuleLast)
|
||||||
|
{
|
||||||
|
PBYTE pbLast = (PBYTE)hModuleLast + MM_ALLOCATION_GRANULARITY;
|
||||||
|
|
||||||
|
MEMORY_BASIC_INFORMATION mbi;
|
||||||
|
ZeroMemory(&mbi, sizeof(mbi));
|
||||||
|
|
||||||
|
// Find the next memory region that contains a mapped PE image.
|
||||||
|
//
|
||||||
|
for (;; pbLast = (PBYTE)mbi.BaseAddress + mbi.RegionSize) {
|
||||||
|
if (VirtualQuery(pbLast, &mbi, sizeof(mbi)) <= 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Skip uncommitted regions and guard pages.
|
||||||
|
//
|
||||||
|
if ((mbi.State != MEM_COMMIT) ||
|
||||||
|
((mbi.Protect & 0xff) == PAGE_NOACCESS) ||
|
||||||
|
(mbi.Protect & PAGE_GUARD)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
__try {
|
||||||
|
PIMAGE_DOS_HEADER pDosHeader = (PIMAGE_DOS_HEADER)pbLast;
|
||||||
|
if (pDosHeader->e_magic != IMAGE_DOS_SIGNATURE ||
|
||||||
|
(DWORD)pDosHeader->e_lfanew > mbi.RegionSize ||
|
||||||
|
(DWORD)pDosHeader->e_lfanew < sizeof(*pDosHeader)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
PIMAGE_NT_HEADERS pNtHeader = (PIMAGE_NT_HEADERS)((PBYTE)pDosHeader +
|
||||||
|
pDosHeader->e_lfanew);
|
||||||
|
if (pNtHeader->Signature != IMAGE_NT_SIGNATURE) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (HMODULE)pDosHeader;
|
||||||
|
}
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
#pragma prefast(suppress:28940, "A bad pointer means this probably isn't a PE header.")
|
||||||
|
#endif
|
||||||
|
__except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
|
||||||
|
EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
BOOL util_is_bad_read_ptr(void* p)
|
BOOL util_is_bad_read_ptr(void* p)
|
||||||
{
|
{
|
||||||
MEMORY_BASIC_INFORMATION mbi = { 0 };
|
MEMORY_BASIC_INFORMATION mbi = { 0 };
|
||||||
|
Loading…
x
Reference in New Issue
Block a user