mirror of
https://github.com/FunkyFr3sh/cnc-ddraw.git
synced 2025-03-15 06:04:49 +01:00
add delay_ prefix for delayed imports
This commit is contained in:
parent
354b688a2c
commit
47a5f89327
@ -12,14 +12,14 @@ typedef NTSTATUS(WINAPI* NTQUERYINFORMATIONTHREADPROC)(HANDLE, LONG, PVOID, ULON
|
|||||||
typedef ULONGLONG(WINAPI* VERSETCONDITIONMASKPROC)(ULONGLONG, DWORD, BYTE);
|
typedef ULONGLONG(WINAPI* VERSETCONDITIONMASKPROC)(ULONGLONG, DWORD, BYTE);
|
||||||
typedef BOOL(WINAPI* GETMODULEHANDLEEXAPROC)(DWORD, LPCSTR, HMODULE*);
|
typedef BOOL(WINAPI* GETMODULEHANDLEEXAPROC)(DWORD, LPCSTR, HMODULE*);
|
||||||
|
|
||||||
extern NTQUERYINFORMATIONTHREADPROC NtQueryInformationThread;
|
extern NTQUERYINFORMATIONTHREADPROC delay_NtQueryInformationThread;
|
||||||
extern RTLVERIFYVERSIONINFOPROC RtlVerifyVersionInfo;
|
extern RTLVERIFYVERSIONINFOPROC delay_RtlVerifyVersionInfo;
|
||||||
extern WINE_GET_VERSIONPROC wine_get_version;
|
extern WINE_GET_VERSIONPROC delay_wine_get_version;
|
||||||
extern WINE_GET_HOST_VERSIONPROC wine_get_host_version;
|
extern WINE_GET_HOST_VERSIONPROC delay_wine_get_host_version;
|
||||||
|
|
||||||
extern VERSETCONDITIONMASKPROC VerSetConditionMaskProc;
|
extern VERSETCONDITIONMASKPROC delay_VerSetConditionMask;
|
||||||
extern GETMODULEHANDLEEXAPROC GetModuleHandleExAProc;
|
extern GETMODULEHANDLEEXAPROC delay_GetModuleHandleExA;
|
||||||
|
|
||||||
void imports_init();
|
void delay_imports_init();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -2,29 +2,29 @@
|
|||||||
#include "versionhelpers.h"
|
#include "versionhelpers.h"
|
||||||
#include "delay_imports.h"
|
#include "delay_imports.h"
|
||||||
|
|
||||||
NTQUERYINFORMATIONTHREADPROC NtQueryInformationThread;
|
NTQUERYINFORMATIONTHREADPROC delay_NtQueryInformationThread;
|
||||||
RTLVERIFYVERSIONINFOPROC RtlVerifyVersionInfo;
|
RTLVERIFYVERSIONINFOPROC delay_RtlVerifyVersionInfo;
|
||||||
WINE_GET_VERSIONPROC wine_get_version;
|
WINE_GET_VERSIONPROC delay_wine_get_version;
|
||||||
WINE_GET_HOST_VERSIONPROC wine_get_host_version;
|
WINE_GET_HOST_VERSIONPROC delay_wine_get_host_version;
|
||||||
|
|
||||||
VERSETCONDITIONMASKPROC VerSetConditionMaskProc;
|
VERSETCONDITIONMASKPROC delay_VerSetConditionMask;
|
||||||
GETMODULEHANDLEEXAPROC GetModuleHandleExAProc;
|
GETMODULEHANDLEEXAPROC delay_GetModuleHandleExA;
|
||||||
|
|
||||||
void imports_init()
|
void delay_imports_init()
|
||||||
{
|
{
|
||||||
HMODULE mod = GetModuleHandleA("ntdll.dll");
|
HMODULE mod = GetModuleHandleA("ntdll.dll");
|
||||||
if (mod)
|
if (mod)
|
||||||
{
|
{
|
||||||
NtQueryInformationThread = (NTQUERYINFORMATIONTHREADPROC)GetProcAddress(mod, "NtQueryInformationThread");
|
delay_NtQueryInformationThread = (NTQUERYINFORMATIONTHREADPROC)GetProcAddress(mod, "NtQueryInformationThread");
|
||||||
RtlVerifyVersionInfo = (RTLVERIFYVERSIONINFOPROC)GetProcAddress(mod, "RtlVerifyVersionInfo");
|
delay_RtlVerifyVersionInfo = (RTLVERIFYVERSIONINFOPROC)GetProcAddress(mod, "RtlVerifyVersionInfo");
|
||||||
wine_get_version = (WINE_GET_VERSIONPROC)GetProcAddress(mod, "wine_get_version");
|
delay_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_wine_get_host_version = (WINE_GET_HOST_VERSIONPROC)GetProcAddress(mod, "wine_get_host_version");
|
||||||
}
|
}
|
||||||
|
|
||||||
mod = GetModuleHandleA("Kernel32.dll");
|
mod = GetModuleHandleA("Kernel32.dll");
|
||||||
if (mod)
|
if (mod)
|
||||||
{
|
{
|
||||||
VerSetConditionMaskProc = (VERSETCONDITIONMASKPROC)GetProcAddress(mod, "VerSetConditionMask");
|
delay_VerSetConditionMask = (VERSETCONDITIONMASKPROC)GetProcAddress(mod, "VerSetConditionMask");
|
||||||
GetModuleHandleExAProc = (GETMODULEHANDLEEXAPROC)GetProcAddress(mod, "GetModuleHandleExA");
|
delay_GetModuleHandleExA = (GETMODULEHANDLEEXAPROC)GetProcAddress(mod, "GetModuleHandleExA");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,7 @@ BOOL WINAPI DllMain(HANDLE hDll, DWORD dwReason, LPVOID lpReserved)
|
|||||||
{
|
{
|
||||||
g_ddraw_module = hDll;
|
g_ddraw_module = hDll;
|
||||||
|
|
||||||
imports_init();
|
delay_imports_init();
|
||||||
|
|
||||||
if (GetEnvironmentVariable("cnc_ddraw_config_init", NULL, 0))
|
if (GetEnvironmentVariable("cnc_ddraw_config_init", NULL, 0))
|
||||||
{
|
{
|
||||||
|
@ -107,12 +107,13 @@ void util_set_thread_affinity(DWORD tid)
|
|||||||
void* start = NULL;
|
void* start = NULL;
|
||||||
NTSTATUS status = STATUS_PENDING;
|
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_exe_path[MAX_PATH] = { 0 };
|
||||||
char game_dir[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 };
|
char mod_filename[MAX_PATH] = { 0 };
|
||||||
HMODULE mod = NULL;
|
HMODULE mod = NULL;
|
||||||
|
|
||||||
if (GetModuleHandleExAProc(
|
if (delay_GetModuleHandleExA(
|
||||||
GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, start, &mod))
|
GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, start, &mod))
|
||||||
{
|
{
|
||||||
if (GetModuleFileNameA(mod, mod_path, sizeof(mod_path)))
|
if (GetModuleFileNameA(mod, mod_path, sizeof(mod_path)))
|
||||||
|
@ -5,26 +5,26 @@
|
|||||||
|
|
||||||
BOOL verhelp_verify_version(PRTL_OSVERSIONINFOEXW versionInfo, ULONG typeMask, ULONGLONG conditionMask)
|
BOOL verhelp_verify_version(PRTL_OSVERSIONINFOEXW versionInfo, ULONG typeMask, ULONGLONG conditionMask)
|
||||||
{
|
{
|
||||||
return RtlVerifyVersionInfo ?
|
return delay_RtlVerifyVersionInfo ?
|
||||||
RtlVerifyVersionInfo(versionInfo, typeMask, conditionMask) == 0 :
|
delay_RtlVerifyVersionInfo(versionInfo, typeMask, conditionMask) == 0 :
|
||||||
VerifyVersionInfoW(versionInfo, typeMask, conditionMask);
|
VerifyVersionInfoW(versionInfo, typeMask, conditionMask);
|
||||||
}
|
}
|
||||||
|
|
||||||
ULONGLONG verhelp_set_mask(ULONGLONG ConditionMask, DWORD TypeMask, BYTE Condition)
|
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()
|
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)
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user