[win] online-installer: refactoring

This commit is contained in:
SimplestStudio
2024-01-31 15:13:40 +02:00
parent faffbef1e3
commit 0b9eac75e7
2 changed files with 23 additions and 35 deletions

View File

@ -40,7 +40,8 @@ int WINAPI _tWinMain(_In_ HINSTANCE hInst, _In_opt_ HINSTANCE hPrevInstance, _In
{
UNREFERENCED_PARAMETER(hPrevInstance);
std::locale::global(std::locale(""));
Translator lang(GetUserDefaultUILanguage(), IDT_TRANSLATIONS);
LCID lcid = MAKELCID(GetUserDefaultUILanguage(), SORT_DEFAULT);
Translator lang(lcid, IDT_TRANSLATIONS);
HANDLE hMutex = CreateMutex(NULL, FALSE, _T(VER_PRODUCTNAME_STR));
if (GetLastError() == ERROR_ALREADY_EXISTS) {
NS_Utils::ShowMessage(_TR(MESSAGE_TEXT_ERR2));

View File

@ -158,41 +158,28 @@ namespace NS_File
WinVer getWinVersion()
{
NTSTATUS(WINAPI *RtlGetVersion)(LPOSVERSIONINFOEXW);
*(FARPROC*)&RtlGetVersion = GetProcAddress(GetModuleHandleA("ntdll"), "RtlGetVersion");
if (RtlGetVersion != NULL) {
OSVERSIONINFOEXW osInfo;
osInfo.dwOSVersionInfoSize = sizeof(osInfo);
RtlGetVersion(&osInfo);
if (osInfo.dwMajorVersion == 5L && (osInfo.dwMinorVersion == 1L || osInfo.dwMinorVersion == 2L))
return WinVer::WinXP;
else
if (osInfo.dwMajorVersion == 6L && osInfo.dwMinorVersion == 0L)
return WinVer::WinVista;
else
if (osInfo.dwMajorVersion == 6L && osInfo.dwMinorVersion == 1L)
return WinVer::Win7;
else
if (osInfo.dwMajorVersion == 6L && osInfo.dwMinorVersion == 2L)
return WinVer::Win8;
else
if (osInfo.dwMajorVersion == 6L && osInfo.dwMinorVersion == 3L)
return WinVer::Win8_1;
else
if (osInfo.dwMajorVersion == 10L) {
if (osInfo.dwMinorVersion == 0L) {
if (osInfo.dwBuildNumber < 22000)
return WinVer::Win10;
else
return WinVer::Win11;
} else
return WinVer::Win11;
} else
if (osInfo.dwMajorVersion > 10L)
return WinVer::Win11;
static WinVer winVer = WinVer::Undef;
if (winVer == WinVer::Undef) {
if (HMODULE module = GetModuleHandleA("ntdll")) {
NTSTATUS(WINAPI *RtlGetVersion)(LPOSVERSIONINFOEXW);
*(FARPROC*)&RtlGetVersion = GetProcAddress(module, "RtlGetVersion");
if (RtlGetVersion) {
OSVERSIONINFOEXW os = {0};
os.dwOSVersionInfoSize = sizeof(os);
RtlGetVersion(&os);
winVer = os.dwMajorVersion == 5L && (os.dwMinorVersion == 1L || os.dwMinorVersion == 2L) ? WinVer::WinXP :
os.dwMajorVersion == 6L && os.dwMinorVersion == 0L ? WinVer::WinVista :
os.dwMajorVersion == 6L && os.dwMinorVersion == 1L ? WinVer::Win7 :
os.dwMajorVersion == 6L && os.dwMinorVersion == 2L ? WinVer::Win8 :
os.dwMajorVersion == 6L && os.dwMinorVersion == 3L ? WinVer::Win8_1 :
os.dwMajorVersion == 10L && os.dwMinorVersion == 0L && os.dwBuildNumber < 22000 ? WinVer::Win10 :
os.dwMajorVersion == 10L && os.dwMinorVersion == 0L && os.dwBuildNumber >= 22000 ? WinVer::Win11 :
os.dwMajorVersion == 10L && os.dwMinorVersion > 0L ? WinVer::Win11 :
os.dwMajorVersion > 10L ? WinVer::Win11 : WinVer::Undef;
}
}
}
return WinVer::Undef;
return winVer;
}
// bool verifyEmbeddedSignature(const wstring &fileName)