Update kernel.c

This commit is contained in:
DavidXanatos 2024-07-21 11:08:46 +02:00
parent 0b44453fc3
commit 06e234072c
1 changed files with 150 additions and 107 deletions

View File

@ -48,53 +48,34 @@ typedef DWORD(*P_SleepEx)(DWORD dwMiSecond, BOOL bAlert);
typedef BOOL (*P_QueryPerformanceCounter)(LARGE_INTEGER* lpPerformanceCount); typedef BOOL (*P_QueryPerformanceCounter)(LARGE_INTEGER* lpPerformanceCount);
typedef LANGID (*P_GetUserDefaultUILanguage)(); typedef LANGID (*P_GetUserDefaultUILanguage)();
typedef int (*P_GetUserDefaultLocaleName)( typedef int (*P_GetUserDefaultLocaleName)(LPWSTR lpLocaleName, int cchLocaleName);
LPWSTR lpLocaleName,
int cchLocaleName typedef int (*LCIDToLocaleName)(LCID Locale, LPWSTR lpName, int cchName, DWORD dwFlags);
);
typedef LCID (*P_GetUserDefaultLCID)(); typedef LCID (*P_GetUserDefaultLCID)();
typedef LANGID (*P_GetUserDefaultLangID)(); typedef LANGID (*P_GetUserDefaultLangID)();
typedef int (*P_GetUserDefaultGeoName)( typedef int (*P_GetUserDefaultGeoName)(LPWSTR geoName, int geoNameCount);
LPWSTR geoName,
int geoNameCount
);
typedef LANGID (*P_GetSystemDefaultUILanguage)(); typedef LANGID (*P_GetSystemDefaultUILanguage)();
typedef int (*P_GetSystemDefaultLocaleName)( typedef int (*P_GetSystemDefaultLocaleName)(LPWSTR lpLocaleName, int cchLocaleName);
LPWSTR lpLocaleName,
int cchLocaleName
);
typedef LCID (*P_GetSystemDefaultLCID)(); typedef LCID (*P_GetSystemDefaultLCID)();
typedef LANGID (*P_GetSystemDefaultLangID)(); typedef LANGID (*P_GetSystemDefaultLangID)();
typedef int (*P_GetLocaleInfoEx)( typedef int (*P_GetLocaleInfoEx)(LPCWSTR lpLocaleName, LCTYPE LCType, LPWSTR lpLCData, int cchData);
LPCWSTR lpLocaleName,
LCTYPE LCType, typedef int (*P_GetLocaleInfoA)(LCID Locale, LCTYPE LCType, LPSTR lpLCData, int cchData);
LPWSTR lpLCData,
int cchData typedef int (*P_GetLocaleInfoW)(LCID Locale, LCTYPE LCType, LPWSTR lpLCData, int cchData);
);
typedef int (*P_GetLocaleInfoA)(
LCID Locale,
LCTYPE LCType,
LPSTR lpLCData,
int cchData
);
typedef int (*P_GetLocaleInfoW)(
LCID Locale,
LCTYPE LCType,
LPWSTR lpLCData,
int cchData
);
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// Variables // Variables
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
@ -114,18 +95,18 @@ P_GetTickCount64 __sys_GetTickCount64 = NULL;
P_QueryUnbiasedInterruptTime __sys_QueryUnbiasedInterruptTime = NULL; P_QueryUnbiasedInterruptTime __sys_QueryUnbiasedInterruptTime = NULL;
P_QueryPerformanceCounter __sys_QueryPerformanceCounter = NULL; P_QueryPerformanceCounter __sys_QueryPerformanceCounter = NULL;
P_GetUserDefaultUILanguage __sys_GetUserDefaultUILanguage = NULL; P_GetUserDefaultUILanguage __sys_GetUserDefaultUILanguage = NULL;
P_GetUserDefaultLocaleName __sys_GetUserDefaultLocaleName = NULL; P_GetUserDefaultLocaleName __sys_GetUserDefaultLocaleName = NULL;
P_GetUserDefaultLCID __sys_GetUserDefaultLCID = NULL; P_GetUserDefaultLCID __sys_GetUserDefaultLCID = NULL;
P_GetUserDefaultLangID __sys_GetUserDefaultLangID = NULL; P_GetUserDefaultLangID __sys_GetUserDefaultLangID = NULL;
P_GetUserDefaultGeoName __sys_GetUserDefaultGeoName = NULL; P_GetUserDefaultGeoName __sys_GetUserDefaultGeoName = NULL;
P_GetSystemDefaultUILanguage __sys_GetSystemDefaultUILanguage = NULL; P_GetSystemDefaultUILanguage __sys_GetSystemDefaultUILanguage = NULL;
P_GetSystemDefaultLocaleName __sys_GetSystemDefaultLocaleName = NULL; P_GetSystemDefaultLocaleName __sys_GetSystemDefaultLocaleName = NULL;
P_GetSystemDefaultLCID __sys_GetSystemDefaultLCID = NULL; P_GetSystemDefaultLCID __sys_GetSystemDefaultLCID = NULL;
P_GetSystemDefaultLangID __sys_GetSystemDefaultLangID = NULL; P_GetSystemDefaultLangID __sys_GetSystemDefaultLangID = NULL;
P_GetLocaleInfoEx __sys_GetLocaleInfoEx = NULL; P_GetLocaleInfoEx __sys_GetLocaleInfoEx = NULL;
P_GetLocaleInfoA __sys_GetLocaleInfoA = NULL; P_GetLocaleInfoA __sys_GetLocaleInfoA = NULL;
P_GetLocaleInfoW __sys_GetLocaleInfoW = NULL; P_GetLocaleInfoW __sys_GetLocaleInfoW = NULL;
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// Functions // Functions
@ -149,53 +130,31 @@ static DWORD Kernel_SleepEx(DWORD dwMiSecond, BOOL bAlert);
static BOOL Kernel_QueryPerformanceCounter(LARGE_INTEGER* lpPerformanceCount); static BOOL Kernel_QueryPerformanceCounter(LARGE_INTEGER* lpPerformanceCount);
static LANGID Kernel_GetUserDefaultUILanguage(); static LANGID Kernel_GetUserDefaultUILanguage();
static int Kernel_GetUserDefaultLocaleName( static int Kernel_GetUserDefaultLocaleName(LPWSTR lpLocaleName, int cchLocaleName);
LPWSTR lpLocaleName,
int cchLocaleName
);
static LCID Kernel_GetUserDefaultLCID(); static LCID Kernel_GetUserDefaultLCID();
static LANGID Kernel_GetUserDefaultLangID(); static LANGID Kernel_GetUserDefaultLangID();
static int Kernel_GetUserDefaultGeoName( static int Kernel_GetUserDefaultGeoName(LPWSTR geoName, int geoNameCount);
LPWSTR geoName,
int geoNameCount
);
static LANGID Kernel_GetSystemDefaultUILanguage(); static LANGID Kernel_GetSystemDefaultUILanguage();
static int Kernel_GetSystemDefaultLocaleName( static int Kernel_GetSystemDefaultLocaleName(LPWSTR lpLocaleName, int cchLocaleName);
LPWSTR lpLocaleName,
int cchLocaleName
);
static LCID Kernel_GetSystemDefaultLCID(); static LCID Kernel_GetSystemDefaultLCID();
static LANGID Kernel_GetSystemDefaultLangID(); static LANGID Kernel_GetSystemDefaultLangID();
static int Kernel_GetLocaleInfoEx( static int Kernel_GetLocaleInfoEx(LPCWSTR lpLocaleName, LCTYPE LCType, LPWSTR lpLCData, int cchData);
LPCWSTR lpLocaleName,
LCTYPE LCType,
LPWSTR lpLCData,
int cchData
);
static int Kernel_GetLocaleInfoA( static int Kernel_GetLocaleInfoA(LCID Locale, LCTYPE LCType, LPSTR lpLCData, int cchData);
LCID Locale,
LCTYPE LCType, static int Kernel_GetLocaleInfoW(LCID Locale, LCTYPE LCType, LPWSTR lpLCData, int cchData);
LPSTR lpLCData,
int cchData
);
static int Kernel_GetLocaleInfoW(
LCID Locale,
LCTYPE LCType,
LPWSTR lpLCData,
int cchData
);
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// Kernel_Init // Kernel_Init
@ -259,11 +218,11 @@ _FX BOOLEAN Kernel_Init()
if (SbieApi_QueryConfBool(NULL, L"UseChangeSpeed", FALSE)) { if (SbieApi_QueryConfBool(NULL, L"UseChangeSpeed", FALSE)) {
SBIEDLL_HOOK(Kernel_, GetTickCount); SBIEDLL_HOOK(Kernel_, GetTickCount);
P_GetTickCount64 GetTickCount64 = Ldr_GetProcAddrNew(Dll_Kernel32, L"GetTickCount64", "GetTickCount64"); P_GetTickCount64 GetTickCount64 = GetProcAddress(Dll_KernelBase ? Dll_KernelBase : Dll_Kernel32, "GetTickCount64");
if (GetTickCount64) { if (GetTickCount64) {
SBIEDLL_HOOK(Kernel_, GetTickCount64); SBIEDLL_HOOK(Kernel_, GetTickCount64);
} }
P_QueryUnbiasedInterruptTime QueryUnbiasedInterruptTime = Ldr_GetProcAddrNew(Dll_Kernel32, L"QueryUnbiasedInterruptTime", "QueryUnbiasedInterruptTime"); P_QueryUnbiasedInterruptTime QueryUnbiasedInterruptTime = GetProcAddress(Dll_KernelBase ? Dll_KernelBase : Dll_Kernel32, "QueryUnbiasedInterruptTime");
if (QueryUnbiasedInterruptTime) { if (QueryUnbiasedInterruptTime) {
SBIEDLL_HOOK(Kernel_, QueryUnbiasedInterruptTime); SBIEDLL_HOOK(Kernel_, QueryUnbiasedInterruptTime);
} }
@ -271,26 +230,29 @@ _FX BOOLEAN Kernel_Init()
//SBIEDLL_HOOK(Kernel_, Sleep); //SBIEDLL_HOOK(Kernel_, Sleep);
SBIEDLL_HOOK(Kernel_, SleepEx); SBIEDLL_HOOK(Kernel_, SleepEx);
} }
if (SbieApi_QueryConfBool(NULL, L"UseSpoofLocale", FALSE)) if (SbieApi_QueryConfBool(NULL, L"UseSpoofLocale", FALSE))
{ {
SBIEDLL_HOOK(Kernel_, GetUserDefaultUILanguage); SBIEDLL_HOOK(Kernel_, GetUserDefaultUILanguage);
//P_GetUserDefaultLocaleName GetUserDefaultLocaleName = Ldr_GetProcAddrNew(Dll_Kernel32, L"GetUserDefaultLocaleName", "GetUserDefaultLocaleName"); P_GetUserDefaultLocaleName GetUserDefaultLocaleName = GetProcAddress(Dll_KernelBase ? Dll_KernelBase : Dll_Kernel32, "GetUserDefaultLocaleName");
//if (GetUserDefaultLocaleName) if (GetUserDefaultLocaleName) {
// SBIEDLL_HOOK(Kernel_, GetUserDefaultLocaleName); SBIEDLL_HOOK(Kernel_, GetUserDefaultLocaleName);
}
SBIEDLL_HOOK(Kernel_, GetUserDefaultLCID); SBIEDLL_HOOK(Kernel_, GetUserDefaultLCID);
SBIEDLL_HOOK(Kernel_, GetUserDefaultLangID); SBIEDLL_HOOK(Kernel_, GetUserDefaultLangID);
//SBIEDLL_HOOK(Kernel_, GetUserDefaultGeoName); SBIEDLL_HOOK(Kernel_, GetUserDefaultGeoName);
SBIEDLL_HOOK(Kernel_, GetSystemDefaultUILanguage); SBIEDLL_HOOK(Kernel_, GetSystemDefaultUILanguage);
//P_GetSystemDefaultLocaleName GetSystemDefaultLocaleName = Ldr_GetProcAddrNew(Dll_Kernel32, L"GetSystemDefaultLocaleName", "GetSystemDefaultLocaleName"); P_GetSystemDefaultLocaleName GetSystemDefaultLocaleName = GetProcAddress(Dll_KernelBase ? Dll_KernelBase : Dll_Kernel32, "GetSystemDefaultLocaleName");
//if (GetSystemDefaultLocaleName) if (GetSystemDefaultLocaleName) {
// SBIEDLL_HOOK(Kernel_, GetSystemDefaultLocaleName); SBIEDLL_HOOK(Kernel_, GetSystemDefaultLocaleName);
}
SBIEDLL_HOOK(Kernel_, GetSystemDefaultLCID); SBIEDLL_HOOK(Kernel_, GetSystemDefaultLCID);
SBIEDLL_HOOK(Kernel_, GetSystemDefaultLangID); SBIEDLL_HOOK(Kernel_, GetSystemDefaultLangID);
/*SBIEDLL_HOOK(Kernel_, GetLocaleInfoA); /*SBIEDLL_HOOK(Kernel_, GetLocaleInfoA);
SBIEDLL_HOOK(Kernel_, GetLocaleInfoW); SBIEDLL_HOOK(Kernel_, GetLocaleInfoW);
P_GetLocaleInfoEx GetLocaleInfoEx = Ldr_GetProcAddrNew(Dll_Kernel32, L"GetLocaleInfoEx", "GetLocaleInfoEx"); P_GetLocaleInfoEx GetLocaleInfoEx = GetProcAddress(Dll_KernelBase ? Dll_KernelBase : Dll_Kernel32, "GetLocaleInfoEx");
if (GetLocaleInfoEx) if (GetLocaleInfoEx)
SBIEDLL_HOOK(Kernel_, GetLocaleInfoEx);*/ SBIEDLL_HOOK(Kernel_, GetLocaleInfoEx);*/
} }
@ -414,20 +376,26 @@ _FX BOOL Kernel_QueryPerformanceCounter(LARGE_INTEGER* lpPerformanceCount)
return rtn; return rtn;
} }
_FX LANGID Kernel_GetUserDefaultUILanguage() {
//---------------------------------------------------------------------------
// Kernel_GetUserDefaultUILanguage
//---------------------------------------------------------------------------
_FX LANGID Kernel_GetUserDefaultUILanguage()
{
return (LANGID)SbieApi_QueryConfNumber(NULL, L"FalseLCID", 1033); return (LANGID)SbieApi_QueryConfNumber(NULL, L"FalseLCID", 1033);
} }
typedef int (*LCIDToLocaleName)(
LCID Locale,
LPWSTR lpName, //---------------------------------------------------------------------------
int cchName, // Kernel_GetUserDefaultLocaleName
DWORD dwFlags //---------------------------------------------------------------------------
);
_FX int Kernel_GetUserDefaultLocaleName(
LPWSTR lpLocaleName, _FX int Kernel_GetUserDefaultLocaleName(LPWSTR lpLocaleName, int cchLocaleName)
int cchLocaleName {
) { LCIDToLocaleName ltln = GetProcAddress(Dll_KernelBase ? Dll_KernelBase : Dll_Kernel32, "LCIDToLocaleName");
LCIDToLocaleName ltln = Ldr_GetProcAddrNew(Dll_Kernel32, L"LCIDToLocaleName", "LCIDToLocaleName");
if (ltln) { if (ltln) {
return ltln(SbieApi_QueryConfNumber(NULL, L"FalseLCID", 1033), lpLocaleName, cchLocaleName, 0); return ltln(SbieApi_QueryConfNumber(NULL, L"FalseLCID", 1033), lpLocaleName, cchLocaleName, 0);
} }
@ -440,13 +408,34 @@ _FX int Kernel_GetUserDefaultLocaleName(
return 4; return 4;
} }
_FX LCID Kernel_GetUserDefaultLCID() {
//---------------------------------------------------------------------------
// Kernel_GetUserDefaultLCID
//---------------------------------------------------------------------------
_FX LCID Kernel_GetUserDefaultLCID()
{
return SbieApi_QueryConfNumber(NULL, L"FalseLCID", 1033); return SbieApi_QueryConfNumber(NULL, L"FalseLCID", 1033);
} }
_FX LANGID Kernel_GetUserDefaultLangID() {
//---------------------------------------------------------------------------
// Kernel_GetUserDefaultLangID
//---------------------------------------------------------------------------
_FX LANGID Kernel_GetUserDefaultLangID()
{
return (LANGID)SbieApi_QueryConfNumber(NULL, L"FalseLCID", 1033); return (LANGID)SbieApi_QueryConfNumber(NULL, L"FalseLCID", 1033);
} }
//---------------------------------------------------------------------------
//
//---------------------------------------------------------------------------
char* itoa2(int num, char* str, int radix) char* itoa2(int num, char* str, int radix)
{ {
char index[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; char index[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
@ -487,6 +476,12 @@ char* itoa2(int num, char* str, int radix)
} }
//---------------------------------------------------------------------------
//
//---------------------------------------------------------------------------
wchar_t* GetWC(const char* c) wchar_t* GetWC(const char* c)
{ {
const size_t cSize = strlen(c) + 1; const size_t cSize = strlen(c) + 1;
@ -495,10 +490,15 @@ wchar_t* GetWC(const char* c)
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, c, cSize, wc, cSize); MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, c, cSize, wc, cSize);
return wc; return wc;
} }
_FX int Kernel_GetUserDefaultGeoName(
LPWSTR geoName,
int geoNameCount //---------------------------------------------------------------------------
) { // Kernel_GetUserDefaultGeoName
//---------------------------------------------------------------------------
_FX int Kernel_GetUserDefaultGeoName(LPWSTR geoName, int geoNameCount)
{
char* buf = (char*)GlobalAlloc(GMEM_FIXED | GMEM_ZEROINIT, sizeof(char) * geoNameCount); char* buf = (char*)GlobalAlloc(GMEM_FIXED | GMEM_ZEROINIT, sizeof(char) * geoNameCount);
itoa2(SbieApi_QueryConfNumber(NULL, L"FalseAreaNumber", 840),buf,10); itoa2(SbieApi_QueryConfNumber(NULL, L"FalseAreaNumber", 840),buf,10);
wchar_t* tmp = GetWC(buf); wchar_t* tmp = GetWC(buf);
@ -509,14 +509,25 @@ _FX int Kernel_GetUserDefaultGeoName(
return length; return length;
} }
_FX LANGID Kernel_GetSystemDefaultUILanguage() {
//---------------------------------------------------------------------------
// Kernel_GetSystemDefaultUILanguage
//---------------------------------------------------------------------------
_FX LANGID Kernel_GetSystemDefaultUILanguage()
{
return (LANGID)SbieApi_QueryConfNumber(NULL, L"FalseLCID", 1033); return (LANGID)SbieApi_QueryConfNumber(NULL, L"FalseLCID", 1033);
} }
_FX int Kernel_GetSystemDefaultLocaleName(
LPWSTR lpLocaleName, //---------------------------------------------------------------------------
int cchLocaleName // Kernel_GetSystemDefaultLocaleName
) { //---------------------------------------------------------------------------
_FX int Kernel_GetSystemDefaultLocaleName(LPWSTR lpLocaleName, int cchLocaleName)
{
LCIDToLocaleName ltln = Ldr_GetProcAddrNew(Dll_Kernel32, L"LCIDToLocaleName", "LCIDToLocaleName"); LCIDToLocaleName ltln = Ldr_GetProcAddrNew(Dll_Kernel32, L"LCIDToLocaleName", "LCIDToLocaleName");
if (ltln) { if (ltln) {
return ltln(SbieApi_QueryConfNumber(NULL, L"FalseLCID", 1033), lpLocaleName, cchLocaleName, 0); return ltln(SbieApi_QueryConfNumber(NULL, L"FalseLCID", 1033), lpLocaleName, cchLocaleName, 0);
@ -530,14 +541,34 @@ _FX int Kernel_GetSystemDefaultLocaleName(
return 4; return 4;
} }
_FX LCID Kernel_GetSystemDefaultLCID() {
//---------------------------------------------------------------------------
// Kernel_GetSystemDefaultLCID
//---------------------------------------------------------------------------
_FX LCID Kernel_GetSystemDefaultLCID()
{
return SbieApi_QueryConfNumber(NULL, L"FalseLCID", 1033); return SbieApi_QueryConfNumber(NULL, L"FalseLCID", 1033);
} }
_FX LANGID Kernel_GetSystemDefaultLangID() {
//---------------------------------------------------------------------------
// Kernel_GetSystemDefaultLangID
//---------------------------------------------------------------------------
_FX LANGID Kernel_GetSystemDefaultLangID()
{
return (LANGID)SbieApi_QueryConfNumber(NULL, L"FalseLCID", 1033); return (LANGID)SbieApi_QueryConfNumber(NULL, L"FalseLCID", 1033);
} }
//---------------------------------------------------------------------------
// Kernel_GetLocaleInfoEx
//---------------------------------------------------------------------------
/*_FX int Kernel_GetLocaleInfoEx( /*_FX int Kernel_GetLocaleInfoEx(
LPCWSTR lpLocaleName, LPCWSTR lpLocaleName,
LCTYPE LCType, LCTYPE LCType,
@ -545,6 +576,12 @@ _FX LANGID Kernel_GetSystemDefaultLangID() {
int cchData int cchData
); );
//---------------------------------------------------------------------------
// Kernel_GetLocaleInfoA
//---------------------------------------------------------------------------
_FX int Kernel_GetLocaleInfoA( _FX int Kernel_GetLocaleInfoA(
LCID Locale, LCID Locale,
LCTYPE LCType, LCTYPE LCType,
@ -552,6 +589,12 @@ _FX int Kernel_GetLocaleInfoA(
int cchData int cchData
); );
//---------------------------------------------------------------------------
// Kernel_GetLocaleInfoW
//---------------------------------------------------------------------------
_FX int Kernel_GetLocaleInfoW( _FX int Kernel_GetLocaleInfoW(
LCID Locale, LCID Locale,
LCTYPE LCType, LCTYPE LCType,