Fully migrate to wrapper DLLs

This commit is contained in:
Bommels05 committed 2026-03-22 17:39:08 +01:00
1 parent a190787f3b
commit 4bfb5b958e
8 files changed
+854 -69

No files matched your search

+86
View File
@@ -0,0 +1,86 @@
#include "common.h"
#include "kernel32.h"
typedef LPWCH (__cdecl *wcscpyPtr)(LPWCH dest, LPWCH source);
typedef size_t (__cdecl *wcstombsPtr)(LPSTR dest, LPWCH source, size_t maxCount);
typedef LONG (WINAPI *RegOpenKeyExWPtr)(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult);
typedef LONG (WINAPI *RegQueryValueExWPtr)(HKEY hKey, LPCWSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData);
typedef LONG (WINAPI *RegCloseKeyPtr)(HKEY hKey);
DLL_EXPORT WINAPI BOOL GetVersionExW(LPOSVERSIONINFOW version) {
if (version->dwOSVersionInfoSize == sizeof(OSVERSIONINFOW)) {
version->dwMajorVersion = 4;
version->dwMinorVersion = 0;
version->dwBuildNumber = 1381;
version->dwPlatformId = VER_PLATFORM_WIN32_NT;
version->szCSDVersion[0] = L'\0';
//wcscpyPtr wcscpy = (wcscpyPtr) getFunction("msvcrt.dll", "wcscpy");
//wcscpy(version->szCSDVersion, L"Befator Inc gruesst Sie!");
RegOpenKeyExWPtr regOpenKeyExW = (RegOpenKeyExWPtr) getFunction("advapi32.dll", "RegOpenKeyExW");
RegQueryValueExWPtr regQueryValueExW = (RegQueryValueExWPtr) getFunction("advapi32.dll", "RegQueryValueExW");
RegCloseKeyPtr regCloseKey = (RegCloseKeyPtr) getFunction("advapi32.dll", "RegCloseKey");
HKEY key;
if (regOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\BCompat", 0, KEY_READ, &key) == ERROR_SUCCESS) {
DWORD size;
DWORD major = 0;
if (regQueryValueExW(key, L"ReportedMajor", NULL, NULL, (LPBYTE) &major, &size) == ERROR_SUCCESS) {
version->dwMajorVersion = major;
}
DWORD minor = 0;
if (regQueryValueExW(key, L"ReportedMinor", NULL, NULL, (LPBYTE) &minor, &size) == ERROR_SUCCESS) {
version->dwMinorVersion = minor;
}
DWORD build = 0;
if (regQueryValueExW(key, L"ReportedBuild", NULL, NULL, (LPBYTE) &build, &size) == ERROR_SUCCESS) {
version->dwBuildNumber = build;
}
DWORD platform = 0;
if (regQueryValueExW(key, L"ReportedPlatform", NULL, NULL, (LPBYTE) &platform, &size) == ERROR_SUCCESS) {
version->dwPlatformId = platform;
}
size = sizeof(version->szCSDVersion);
if (regQueryValueExW(key, L"ReportedServicePack", NULL, NULL, (LPBYTE) &version->szCSDVersion, &size) == ERROR_SUCCESS) {
version->szCSDVersion[127] = L'\0';
}
regCloseKey(key);
}
return TRUE;
} else {
SetLastError(ERROR_INSUFFICIENT_BUFFER);
return FALSE;
}
}
DLL_EXPORT WINAPI BOOL GetVersionExA(LPOSVERSIONINFOA version) {
if (version->dwOSVersionInfoSize == sizeof(OSVERSIONINFOA)) {
OSVERSIONINFOW versionW;
versionW.dwOSVersionInfoSize = sizeof(OSVERSIONINFOW);
if (GetVersionExW(&versionW)) {
version->dwMajorVersion = versionW.dwMajorVersion;
version->dwMinorVersion = versionW.dwMinorVersion;
version->dwBuildNumber = versionW.dwBuildNumber;
version->dwPlatformId = versionW.dwPlatformId;
version->szCSDVersion[0] = '\0';
wcstombsPtr wcstombs = (wcstombsPtr) getFunction("msvcrt.dll", "wcstombs");
wcstombs(version->szCSDVersion, versionW.szCSDVersion, ARRAYSIZE(version->szCSDVersion));
return TRUE;
}
return FALSE;
} else {
SetLastError(ERROR_INSUFFICIENT_BUFFER);
return FALSE;
}
}
DLL_EXPORT WINAPI DWORD GetVersion() {
OSVERSIONINFOW versionW;
if (GetVersionExW(&versionW)) {
return (versionW.dwPlatformId ^ 2) << 30 |
versionW.dwBuildNumber << 16 |
versionW.dwMinorVersion << 8 |
versionW.dwMajorVersion;
} else {
return -1;
}
}