1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-14 22:03:27 +01:00

add delay_ prefix for delayed imports

This commit is contained in:
FunkyFr3sh 2024-12-31 05:30:03 +01:00
parent 354b688a2c
commit 47a5f89327
5 changed files with 32 additions and 31 deletions

View File

@ -12,14 +12,14 @@ typedef NTSTATUS(WINAPI* NTQUERYINFORMATIONTHREADPROC)(HANDLE, LONG, PVOID, ULON
typedef ULONGLONG(WINAPI* VERSETCONDITIONMASKPROC)(ULONGLONG, DWORD, BYTE);
typedef BOOL(WINAPI* GETMODULEHANDLEEXAPROC)(DWORD, LPCSTR, HMODULE*);
extern NTQUERYINFORMATIONTHREADPROC NtQueryInformationThread;
extern RTLVERIFYVERSIONINFOPROC RtlVerifyVersionInfo;
extern WINE_GET_VERSIONPROC wine_get_version;
extern WINE_GET_HOST_VERSIONPROC wine_get_host_version;
extern NTQUERYINFORMATIONTHREADPROC delay_NtQueryInformationThread;
extern RTLVERIFYVERSIONINFOPROC delay_RtlVerifyVersionInfo;
extern WINE_GET_VERSIONPROC delay_wine_get_version;
extern WINE_GET_HOST_VERSIONPROC delay_wine_get_host_version;
extern VERSETCONDITIONMASKPROC VerSetConditionMaskProc;
extern GETMODULEHANDLEEXAPROC GetModuleHandleExAProc;
extern VERSETCONDITIONMASKPROC delay_VerSetConditionMask;
extern GETMODULEHANDLEEXAPROC delay_GetModuleHandleExA;
void imports_init();
void delay_imports_init();
#endif

View File

@ -2,29 +2,29 @@
#include "versionhelpers.h"
#include "delay_imports.h"
NTQUERYINFORMATIONTHREADPROC NtQueryInformationThread;
RTLVERIFYVERSIONINFOPROC RtlVerifyVersionInfo;
WINE_GET_VERSIONPROC wine_get_version;
WINE_GET_HOST_VERSIONPROC wine_get_host_version;
NTQUERYINFORMATIONTHREADPROC delay_NtQueryInformationThread;
RTLVERIFYVERSIONINFOPROC delay_RtlVerifyVersionInfo;
WINE_GET_VERSIONPROC delay_wine_get_version;
WINE_GET_HOST_VERSIONPROC delay_wine_get_host_version;
VERSETCONDITIONMASKPROC VerSetConditionMaskProc;
GETMODULEHANDLEEXAPROC GetModuleHandleExAProc;
VERSETCONDITIONMASKPROC delay_VerSetConditionMask;
GETMODULEHANDLEEXAPROC delay_GetModuleHandleExA;
void imports_init()
void delay_imports_init()
{
HMODULE mod = GetModuleHandleA("ntdll.dll");
if (mod)
{
NtQueryInformationThread = (NTQUERYINFORMATIONTHREADPROC)GetProcAddress(mod, "NtQueryInformationThread");
RtlVerifyVersionInfo = (RTLVERIFYVERSIONINFOPROC)GetProcAddress(mod, "RtlVerifyVersionInfo");
wine_get_version = (WINE_GET_VERSIONPROC)GetProcAddress(mod, "wine_get_version");
wine_get_host_version = (WINE_GET_HOST_VERSIONPROC)GetProcAddress(mod, "wine_get_host_version");
delay_NtQueryInformationThread = (NTQUERYINFORMATIONTHREADPROC)GetProcAddress(mod, "NtQueryInformationThread");
delay_RtlVerifyVersionInfo = (RTLVERIFYVERSIONINFOPROC)GetProcAddress(mod, "RtlVerifyVersionInfo");
delay_wine_get_version = (WINE_GET_VERSIONPROC)GetProcAddress(mod, "wine_get_version");
delay_wine_get_host_version = (WINE_GET_HOST_VERSIONPROC)GetProcAddress(mod, "wine_get_host_version");
}
mod = GetModuleHandleA("Kernel32.dll");
if (mod)
{
VerSetConditionMaskProc = (VERSETCONDITIONMASKPROC)GetProcAddress(mod, "VerSetConditionMask");
GetModuleHandleExAProc = (GETMODULEHANDLEEXAPROC)GetProcAddress(mod, "GetModuleHandleExA");
delay_VerSetConditionMask = (VERSETCONDITIONMASKPROC)GetProcAddress(mod, "VerSetConditionMask");
delay_GetModuleHandleExA = (GETMODULEHANDLEEXAPROC)GetProcAddress(mod, "GetModuleHandleExA");
}
}

View File

@ -34,7 +34,7 @@ BOOL WINAPI DllMain(HANDLE hDll, DWORD dwReason, LPVOID lpReserved)
{
g_ddraw_module = hDll;
imports_init();
delay_imports_init();
if (GetEnvironmentVariable("cnc_ddraw_config_init", NULL, 0))
{

View File

@ -107,12 +107,13 @@ void util_set_thread_affinity(DWORD tid)
void* start = NULL;
NTSTATUS status = STATUS_PENDING;
if (NtQueryInformationThread)
if (delay_NtQueryInformationThread)
{
status = NtQueryInformationThread(thread, ThreadQuerySetWin32StartAddress, &start, sizeof(start), NULL);
status =
delay_NtQueryInformationThread(thread, ThreadQuerySetWin32StartAddress, &start, sizeof(start), NULL);
}
if (status == STATUS_SUCCESS && start && GetModuleHandleExAProc)
if (status == STATUS_SUCCESS && start && delay_GetModuleHandleExA)
{
char game_exe_path[MAX_PATH] = { 0 };
char game_dir[MAX_PATH] = { 0 };
@ -126,7 +127,7 @@ void util_set_thread_affinity(DWORD tid)
char mod_filename[MAX_PATH] = { 0 };
HMODULE mod = NULL;
if (GetModuleHandleExAProc(
if (delay_GetModuleHandleExA(
GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, start, &mod))
{
if (GetModuleFileNameA(mod, mod_path, sizeof(mod_path)))

View File

@ -5,26 +5,26 @@
BOOL verhelp_verify_version(PRTL_OSVERSIONINFOEXW versionInfo, ULONG typeMask, ULONGLONG conditionMask)
{
return RtlVerifyVersionInfo ?
RtlVerifyVersionInfo(versionInfo, typeMask, conditionMask) == 0 :
return delay_RtlVerifyVersionInfo ?
delay_RtlVerifyVersionInfo(versionInfo, typeMask, conditionMask) == 0 :
VerifyVersionInfoW(versionInfo, typeMask, conditionMask);
}
ULONGLONG verhelp_set_mask(ULONGLONG ConditionMask, DWORD TypeMask, BYTE Condition)
{
return VerSetConditionMaskProc ? VerSetConditionMaskProc(ConditionMask, TypeMask, Condition) : 0;
return delay_VerSetConditionMask ? delay_VerSetConditionMask(ConditionMask, TypeMask, Condition) : 0;
}
const char* verhelp_wine_get_version()
{
return wine_get_version ? wine_get_version() : NULL;
return delay_wine_get_version ? delay_wine_get_version() : NULL;
}
void verhelp_wine_get_host_version(const char** sysname, const char** release)
{
if (wine_get_host_version)
if (delay_wine_get_host_version)
{
wine_get_host_version(sysname, release);
delay_wine_get_host_version(sysname, release);
return;
}