diff --git a/CHANGELOG.md b/CHANGELOG.md index c7140b1a..a0a3d44c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,12 +14,14 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Added - added hwid display -- added Language Spoof "UseSpoofLocale=y" and "FalseLCID=1033" [#4024](https://github.com/sandboxie-plus/Sandboxie/pull/4024) (thanks Yeyixiao) +- added Language Spoof "CustomLCID=1033" [#4024](https://github.com/sandboxie-plus/Sandboxie/pull/4024) (thanks Yeyixiao) ### Fixed - fixed Getting two advanced supporter certificate popups everytime I open Sandbox Settings on any sandbox [#4074](https://github.com/sandboxie-plus/Sandboxie/issues/4074) - fixed issue with HwID bound serial keys failing when no HwID could be obtained - fixed issue with "UseChangeSpeed=y" +- fixed with option "HideFirmwareInfo=y" + - changed reg path to key "HKCU\\System\\SbieCustom", value: "SMBiosTable" ### Changed - the certificate format can now take an explicit validity days specification, needed for gapless certificat renewal. diff --git a/Sandboxie/core/dll/sysinfo.c b/Sandboxie/core/dll/sysinfo.c index 0a67f83a..dfd13db8 100644 --- a/Sandboxie/core/dll/sysinfo.c +++ b/Sandboxie/core/dll/sysinfo.c @@ -187,6 +187,22 @@ _FX BOOLEAN SysInfo_Init(void) // SysInfo_NtQuerySystemInformation //--------------------------------------------------------------------------- +typedef struct _SYSTEM_FIRMWARE_TABLE_INFORMATION { + ULONG ProviderSignature; + ULONG Action; + ULONG TableID; + ULONG TableBufferLength; + UCHAR TableBuffer[ANYSIZE_ARRAY]; +} SYSTEM_FIRMWARE_TABLE_INFORMATION, *PSYSTEM_FIRMWARE_TABLE_INFORMATION; + +#define FIRMWARE_TABLE_PROVIDER_ACPI 'ACPI' +#define FIRMWARE_TABLE_PROVIDER_SMBIOS 'RSMB' +#define FIRMWARE_TABLE_PROVIDER_FIRM 'FIRM' + +typedef enum _SYSTEM_FIRMWARE_TABLE_ACTION { + SystemFirmwareTable_Enumerate, + SystemFirmwareTable_Get +} SYSTEM_FIRMWARE_TABLE_ACTION; _FX NTSTATUS SysInfo_NtQuerySystemInformation( SYSTEM_INFORMATION_CLASS SystemInformationClass, @@ -196,6 +212,41 @@ _FX NTSTATUS SysInfo_NtQuerySystemInformation( { NTSTATUS status; + if ((SystemInformationClass == SystemFirmwareTableInformation) && SbieApi_QueryConfBool(NULL, L"HideFirmwareInfo", FALSE)) { + + PSYSTEM_FIRMWARE_TABLE_INFORMATION firmwareTableInfo = (PSYSTEM_FIRMWARE_TABLE_INFORMATION)Buffer; + + if (firmwareTableInfo->ProviderSignature == FIRMWARE_TABLE_PROVIDER_SMBIOS && firmwareTableInfo->Action == SystemFirmwareTable_Get) + { + typedef LSTATUS(*ROK)(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult); + typedef LSTATUS(*RQVEW)(HKEY hKey, LPCWSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData); + typedef LSTATUS(*RCK)(HKEY hKey); + ROK RegOpenKeyExW = (ROK)GetProcAddress(GetModuleHandle(DllName_advapi32), "RegOpenKeyExW"); + RQVEW RegQueryValueExW = (RQVEW)GetProcAddress(GetModuleHandle(DllName_advapi32), "RegQueryValueExW"); + RCK RegCloseKey = (RCK)GetProcAddress(GetModuleHandle(DllName_advapi32), "RegCloseKey"); + + HKEY hKey = NULL; + PVOID lpData = NULL; + DWORD dwLen = 0; + DWORD type; + + // if not set we return no information, 0 length + if (RegOpenKeyExW && RegOpenKeyExW(HKEY_CURRENT_USER, L"System\\SbieCustom\\", 0, KEY_READ, &hKey)) { + RegQueryValueExW(hKey, L"SMBiosTable", 0, &type, lpData, &dwLen); + RegCloseKey(hKey); + } + + *ReturnLength = dwLen; + if (dwLen > 0) { + if (dwLen > BufferLength) + return STATUS_BUFFER_TOO_SMALL; + memcpy(Buffer, lpData, dwLen); + } + + return STATUS_SUCCESS; + } + } + status = __sys_NtQuerySystemInformation( SystemInformationClass, Buffer, BufferLength, ReturnLength); @@ -207,40 +258,6 @@ _FX NTSTATUS SysInfo_NtQuerySystemInformation( SysInfo_DiscardProcesses(Buffer); } - - if (NT_SUCCESS(status) && (SystemInformationClass == SystemFirmwareTableInformation) && SbieApi_QueryConfBool(NULL, L"HideFirmwareInfo", FALSE)) { - - HKEY hKey=NULL; - PVOID lpData=NULL; - DWORD dwLen = 0; - typedef LSTATUS - (*ROK)( - _In_ HKEY hKey, - _In_opt_ LPCWSTR lpSubKey, - _In_opt_ DWORD ulOptions, - _In_ REGSAM samDesired, - _Out_ PHKEY phkResult - ); - typedef LSTATUS - (*RQVEW)( - HKEY hKey, - LPCWSTR lpValueName, - LPDWORD lpReserved, - LPDWORD lpType, - LPBYTE lpData, - LPDWORD lpcbData - ); - ROK RegOpenKeyExW=Ldr_GetProcAddrOld(L"Advapi32.dll",L"RegOpenKeyExW"); - RQVEW RegQueryValueExW = Ldr_GetProcAddrOld(L"Advapi32.dll", L"RegQueryValueExW"); - DWORD type; - if (RegOpenKeyExW(HKEY_CURRENT_USER, L"SOFTWARE\\SandboxieHide\\", 0, KEY_READ, &hKey)) - RegQueryValueExW(hKey, L"FalseFirmwareValue", 0, &type, lpData, &dwLen); - if (dwLen != 0) { - Buffer = lpData; - *ReturnLength = dwLen; - } - } - return status; } diff --git a/SandboxiePlus/SandMan/Forms/OptionsWindow.ui b/SandboxiePlus/SandMan/Forms/OptionsWindow.ui index 4b99832a..2660a9a9 100644 --- a/SandboxiePlus/SandMan/Forms/OptionsWindow.ui +++ b/SandboxiePlus/SandMan/Forms/OptionsWindow.ui @@ -45,7 +45,7 @@ QTabWidget::North - 9 + 1 @@ -1732,14 +1732,45 @@ - - + + + + + 75 + true + true + + + + Protect the sandbox integrity itself + - Drop critical privileges from processes running with a SYSTEM token + Sandboxie token - + + + + + 75 + true + true + + + + (Security Critical) + + + + + + + Start the sandboxed RpcSs as a SYSTEM process (not recommended) + + + + Qt::Horizontal @@ -1752,13 +1783,6 @@ - - - - Allow only privileged processes to access the Service Control Manager - - - @@ -1769,15 +1793,35 @@ - - - - Create a new sandboxed token instead of setting down default token - - - - - + + + + Do not start sandboxed services using a system token (recommended) + + + + + + + Use a Sandboxie login instead of an anonymous token + + + + + + + Qt::Vertical + + + + 20 + 5 + + + + + + 75 @@ -1790,6 +1834,20 @@ + + + + Allow only privileged processes to access the Service Control Manager + + + + + + + Drop critical privileges from processes running with a SYSTEM token + + + @@ -1807,40 +1865,6 @@ - - - - Do not start sandboxed services using a system token (recommended) - - - - - - - Use a Sandboxie login instead of an anonymous token - - - - - - - Qt::Vertical - - - - 20 - 5 - - - - - - - - Start the sandboxed RpcSs as a SYSTEM process (not recommended) - - - @@ -1848,34 +1872,10 @@ - - - - - 75 - true - true - - + + - (Security Critical) - - - - - - - - 75 - true - true - - - - Protect the sandbox integrity itself - - - Sandboxie token + Create a new sandboxed token instead of stripping down the original token @@ -4096,13 +4096,13 @@ The process match level has a higher priority than the specificity and describes - - - - Restart force process before they begin to execute - - - + + + + Restart force process before they begin to execute + + + @@ -4679,23 +4679,132 @@ This is done to prevent rogue processes inside the sandbox from creating a renam - 50 false true - Hide Processes + Privacy - + + + + Show Templates - + + + + + + + Hide Firmware Informations + + + + + + + Add Process + + + + + + + + true + true + + + + Process Hiding + + + + + + + Use a custom Locale/LangID + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Don't allow sandboxed processes to see processes running outside any boxes + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Remove + + + + + + + Hide host processes from processes running in the sandbox. + + + true + + + + + + + Don't allow sandboxed processes to see processes running in other boxes + + + + + + + + true + true + + + + Data Protection + + + + true @@ -4712,71 +4821,13 @@ This is done to prevent rogue processes inside the sandbox from creating a renam - - - - Hide host processes from processes running in the sandbox. - - - true - - - - - - - Don't allow sandboxed processes to see processes running outside any boxes - - - - + + + Some programs read system deatils through WMI(A Windows built-in database) instead of normal ways. For example,"tasklist.exe" could get full processes list even if "HideOtherBoxes" is opened through accessing WMI. Enable this option to stop these heavior. + - Prevent sandboxed processes from accessing system details through WMI - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - Remove - - - - - - - Add Process - - - - - - - Don't allow sandboxed processes to see processes running in other boxes - - - - - - - Some programs retrieve system details via WMI (Windows Management Instrumentation), a built-in Windows database, rather than using conventional methods. For instance, 'tasklist.exe' can access a complete list of processes even if 'HideOtherBoxes' is enabled. Enable this option to prevent such behavior. - - - true + Prevent sandboxed processes from accessing system deatils through WMI (see tooltip for more Info) diff --git a/SandboxiePlus/SandMan/Windows/OptionsAdvanced.cpp b/SandboxiePlus/SandMan/Windows/OptionsAdvanced.cpp index 3811b5d9..639e0975 100644 --- a/SandboxiePlus/SandMan/Windows/OptionsAdvanced.cpp +++ b/SandboxiePlus/SandMan/Windows/OptionsAdvanced.cpp @@ -53,7 +53,7 @@ void COptionsWindow::CreateAdvanced() m_AdvOptions.insert("UseSbieDeskHack", SAdvOption{eOnlySpec, QStringList() << "n" << "y", tr("")}); m_AdvOptions.insert("UseSbieWndStation", SAdvOption{eOnlySpec, QStringList() << "n" << "y", tr("")}); m_AdvOptions.insert("FakeAdminRights", SAdvOption{eOnlySpec, QStringList() << "y" << "n", tr("Make specified processes think they have admin permissions.")}); - m_AdvOptions.insert("WaitForDebugger", SAdvOption{eOnlySpec, QStringList() << "y" << "n", tr("Force specified processes to wait for a debugger to attach.")}); + m_AdvOptions.insert("WaitForDebugger", SAdvOption{eList, QStringList(), tr("Force specified processes to wait for a debugger to attach.")}); m_AdvOptions.insert("BoxNameTitle", SAdvOption{eOnlySpec, QStringList() << "y" << "n" << "-", tr("")}); m_AdvOptions.insert("FileRootPath", SAdvOption{eNoSpec, QStringList(), tr("Sandbox file system root")}); m_AdvOptions.insert("KeyRootPath", SAdvOption{eNoSpec, QStringList(), tr("Sandbox registry root")}); @@ -96,6 +96,11 @@ void COptionsWindow::CreateAdvanced() connect(ui.btnDelAuto, SIGNAL(clicked(bool)), this, SLOT(OnDelAuto())); connect(ui.chkShowTriggersTmpl, SIGNAL(clicked(bool)), this, SLOT(OnShowTriggersTmpl())); + InitLangID(); + + connect(ui.chkHideFirmware, SIGNAL(clicked(bool)), this, SLOT(OnAdvancedChanged())); + connect(ui.cmbLangID, SIGNAL(currentIndexChanged(int)), this, SLOT(OnAdvancedChanged())); + connect(ui.chkHideOtherBoxes, SIGNAL(clicked(bool)), this, SLOT(OnAdvancedChanged())); connect(ui.chkHideNonSystemProcesses, SIGNAL(clicked(bool)), this, SLOT(OnAdvancedChanged())); connect(ui.btnAddProcess, SIGNAL(clicked(bool)), this, SLOT(OnAddProcess())); @@ -261,6 +266,10 @@ void COptionsWindow::LoadAdvanced() ShowTriggersTmpl(); // + ui.chkHideFirmware->setChecked(m_pBox->GetBool("HideFirmwareInfo", true)); + + ui.cmbLangID->setCurrentIndex(ui.cmbLangID->findData(m_pBox->GetNum("CustomLCID", 0))); + ui.chkHideOtherBoxes->setChecked(m_pBox->GetBool("HideOtherBoxes", true)); ui.chkHideNonSystemProcesses->setChecked(m_pBox->GetBool("HideNonSystemProcesses", false)); @@ -510,6 +519,11 @@ void COptionsWindow::SaveAdvanced() WriteTextList("OnBoxTerminateDisabled", TerminateCommandDisabled); // + WriteAdvancedCheck(ui.chkHideOtherBoxes, "HideFirmwareInfo", "y", ""); + + int CustomLCID = ui.cmbLangID->currentData().toInt(); + if (CustomLCID) m_pBox->SetNum("CustomLCID", CustomLCID); + else m_pBox->DelValue("CustomLCID"); WriteAdvancedCheck(ui.chkHideOtherBoxes, "HideOtherBoxes", "", "n"); WriteAdvancedCheck(ui.chkHideNonSystemProcesses, "HideNonSystemProcesses", "y", ""); @@ -614,6 +628,9 @@ void COptionsWindow::UpdateBoxIsolation() else { ReadGlobalCheck(ui.chkSbieLogon, "SandboxieLogon", false); ReadGlobalCheck(ui.chkCreateToken, "UseCreateToken", false); + bool bGlobalSandboxGroup = m_pBox->GetAPI()->GetGlobalSettings()->GetBool("SandboxieAllGroup", false); + if (bGlobalSandboxGroup) + ui.chkCreateToken->setEnabled(false); } } @@ -1323,3 +1340,203 @@ void COptionsWindow::SaveDebug() DbgOption.Changed = false; } } + +void COptionsWindow::InitLangID() +{ + // Note: list by ChatGPT + ui.cmbLangID->addItem("Use System Default", 0); + ui.cmbLangID->addItem("Afrikaans (af-ZA)", 1078); + ui.cmbLangID->addItem("Albanian (sq-AL)", 1052); + ui.cmbLangID->addItem("Amharic (am-ET)", 1118); + ui.cmbLangID->addItem("Arabic (Algeria) (ar-DZ)", 5121); + ui.cmbLangID->addItem("Arabic (Bahrain) (ar-BH)", 15361); + ui.cmbLangID->addItem("Arabic (Egypt) (ar-EG)", 3073); + ui.cmbLangID->addItem("Arabic (Iraq) (ar-IQ)", 2049); + ui.cmbLangID->addItem("Arabic (Jordan) (ar-JO)", 11265); + ui.cmbLangID->addItem("Arabic (Kuwait) (ar-KW)", 13313); + ui.cmbLangID->addItem("Arabic (Lebanon) (ar-LB)", 12289); + ui.cmbLangID->addItem("Arabic (Libya) (ar-LY)", 4097); + ui.cmbLangID->addItem("Arabic (Morocco) (ar-MA)", 6145); + ui.cmbLangID->addItem("Arabic (Oman) (ar-OM)", 8193); + ui.cmbLangID->addItem("Arabic (Qatar) (ar-QA)", 16385); + ui.cmbLangID->addItem("Arabic (Saudi Arabia) (ar-SA)", 1025); + ui.cmbLangID->addItem("Arabic (Syria) (ar-SY)", 10241); + ui.cmbLangID->addItem("Arabic (Tunisia) (ar-TN)", 7169); + ui.cmbLangID->addItem("Arabic (U.A.E.) (ar-AE)", 14337); + ui.cmbLangID->addItem("Arabic (Yemen) (ar-YE)", 9217); + ui.cmbLangID->addItem("Armenian (hy-AM)", 1067); + ui.cmbLangID->addItem("Assamese (as-IN)", 1101); + ui.cmbLangID->addItem("Azerbaijani (Cyrillic) (az-Cyrl-AZ)", 2092); + ui.cmbLangID->addItem("Azerbaijani (Latin) (az-Latn-AZ)", 1068); + ui.cmbLangID->addItem("Basque (eu-ES)", 1069); + ui.cmbLangID->addItem("Belarusian (be-BY)", 1059); + ui.cmbLangID->addItem("Bengali (Bangladesh) (bn-BD)", 2117); + ui.cmbLangID->addItem("Bengali (India) (bn-IN)", 1093); + ui.cmbLangID->addItem("Bosnian (Cyrillic, Bosnia and Herzegovina) (bs-Cyrl-BA)", 8218); + ui.cmbLangID->addItem("Bosnian (Latin, Bosnia and Herzegovina) (bs-Latn-BA)", 5146); + ui.cmbLangID->addItem("Bulgarian (bg-BG)", 1026); + ui.cmbLangID->addItem("Catalan (ca-ES)", 1027); + ui.cmbLangID->addItem("Chinese (Simplified) (zh-CN)", 2052); + ui.cmbLangID->addItem("Chinese (Traditional) (zh-TW)", 1028); + ui.cmbLangID->addItem("Chinese (Hong Kong SAR) (zh-HK)", 3076); + ui.cmbLangID->addItem("Chinese (Macau SAR) (zh-MO)", 5124); + ui.cmbLangID->addItem("Chinese (Singapore) (zh-SG)", 4100); + ui.cmbLangID->addItem("Croatian (hr-HR)", 1050); + ui.cmbLangID->addItem("Croatian (Latin, Bosnia and Herzegovina) (hr-BA)", 4122); + ui.cmbLangID->addItem("Czech (cs-CZ)", 1029); + ui.cmbLangID->addItem("Danish (da-DK)", 1030); + ui.cmbLangID->addItem("Dari (prs-AF)", 1164); + ui.cmbLangID->addItem("Dutch (Belgium) (nl-BE)", 2067); + ui.cmbLangID->addItem("Dutch (Netherlands) (nl-NL)", 1043); + ui.cmbLangID->addItem("English (Australia) (en-AU)", 3081); + ui.cmbLangID->addItem("English (Belize) (en-BZ)", 10249); + ui.cmbLangID->addItem("English (Canada) (en-CA)", 4105); + ui.cmbLangID->addItem("English (Caribbean) (en-029)", 9225); + ui.cmbLangID->addItem("English (Hong Kong SAR) (en-HK)", 15369); + ui.cmbLangID->addItem("English (India) (en-IN)", 16393); + ui.cmbLangID->addItem("English (Indonesia) (en-ID)", 14345); + ui.cmbLangID->addItem("English (Ireland) (en-IE)", 6153); + ui.cmbLangID->addItem("English (Jamaica) (en-JM)", 8201); + ui.cmbLangID->addItem("English (Malaysia) (en-MY)", 17417); + ui.cmbLangID->addItem("English (New Zealand) (en-NZ)", 5129); + ui.cmbLangID->addItem("English (Philippines) (en-PH)", 13321); + ui.cmbLangID->addItem("English (Singapore) (en-SG)", 18441); + ui.cmbLangID->addItem("English (South Africa) (en-ZA)", 7177); + ui.cmbLangID->addItem("English (Trinidad and Tobago) (en-TT)", 11273); + ui.cmbLangID->addItem("English (United Kingdom) (en-GB)", 2057); + ui.cmbLangID->addItem("English (United States) (en-US)", 1033); + ui.cmbLangID->addItem("English (Zimbabwe) (en-ZW)", 12297); + ui.cmbLangID->addItem("Estonian (et-EE)", 1061); + ui.cmbLangID->addItem("Faroese (fo-FO)", 1080); + ui.cmbLangID->addItem("Filipino (fil-PH)", 1124); + ui.cmbLangID->addItem("Finnish (fi-FI)", 1035); + ui.cmbLangID->addItem("French (Belgium) (fr-BE)", 2060); + ui.cmbLangID->addItem("French (Canada) (fr-CA)", 3084); + ui.cmbLangID->addItem("French (France) (fr-FR)", 1036); + ui.cmbLangID->addItem("French (Luxembourg) (fr-LU)", 5132); + ui.cmbLangID->addItem("French (Monaco) (fr-MC)", 6156); + ui.cmbLangID->addItem("French (Switzerland) (fr-CH)", 4108); + ui.cmbLangID->addItem("Galician (gl-ES)", 1110); + ui.cmbLangID->addItem("Georgian (ka-GE)", 1079); + ui.cmbLangID->addItem("German (Austria) (de-AT)", 3079); + ui.cmbLangID->addItem("German (Germany) (de-DE)", 1031); + ui.cmbLangID->addItem("German (Liechtenstein) (de-LI)", 5127); + ui.cmbLangID->addItem("German (Luxembourg) (de-LU)", 4103); + ui.cmbLangID->addItem("German (Switzerland) (de-CH)", 2055); + ui.cmbLangID->addItem("Greek (el-GR)", 1032); + ui.cmbLangID->addItem("Gujarati (gu-IN)", 1095); + ui.cmbLangID->addItem("Hebrew (he-IL)", 1037); + ui.cmbLangID->addItem("Hindi (hi-IN)", 1081); + ui.cmbLangID->addItem("Hungarian (hu-HU)", 1038); + ui.cmbLangID->addItem("Icelandic (is-IS)", 1039); + ui.cmbLangID->addItem("Igbo (ig-NG)", 1136); + ui.cmbLangID->addItem("Indonesian (id-ID)", 1057); + ui.cmbLangID->addItem("Irish (ga-IE)", 2108); + ui.cmbLangID->addItem("Italian (Italy) (it-IT)", 1040); + ui.cmbLangID->addItem("Italian (Switzerland) (it-CH)", 2064); + ui.cmbLangID->addItem("Japanese (ja-JP)", 1041); + ui.cmbLangID->addItem("Kannada (kn-IN)", 1099); + ui.cmbLangID->addItem("Kazakh (kk-KZ)", 1087); + ui.cmbLangID->addItem("Khmer (km-KH)", 1107); + ui.cmbLangID->addItem("K'iche' (quc-Latn-GT)", 1152); + ui.cmbLangID->addItem("Kinyarwanda (rw-RW)", 1159); + ui.cmbLangID->addItem("Konkani (kok-IN)", 1111); + ui.cmbLangID->addItem("Korean (ko-KR)", 1042); + ui.cmbLangID->addItem("Kyrgyz (ky-KG)", 1088); + ui.cmbLangID->addItem("Lao (lo-LA)", 1108); + ui.cmbLangID->addItem("Latvian (lv-LV)", 1062); + ui.cmbLangID->addItem("Lithuanian (lt-LT)", 1063); + ui.cmbLangID->addItem("Luxembourgish (lb-LU)", 1134); + ui.cmbLangID->addItem("Macedonian (mk-MK)", 1071); + ui.cmbLangID->addItem("Malay (Brunei Darussalam) (ms-BN)", 2110); + ui.cmbLangID->addItem("Malay (Malaysia) (ms-MY)", 1086); + ui.cmbLangID->addItem("Malayalam (ml-IN)", 1100); + ui.cmbLangID->addItem("Maltese (mt-MT)", 1082); + ui.cmbLangID->addItem("Maori (mi-NZ)", 1153); + ui.cmbLangID->addItem("Mapudungun (arn-CL)", 1146); + ui.cmbLangID->addItem("Marathi (mr-IN)", 1102); + ui.cmbLangID->addItem("Mongolian (Cyrillic) (mn-MN)", 1104); + ui.cmbLangID->addItem("Mongolian (Traditional Mongolian) (mn-Mong-CN)", 2128); + ui.cmbLangID->addItem("Nepali (ne-NP)", 1121); + ui.cmbLangID->addItem("Norwegian (Bokmal) (nb-NO)", 1044); + ui.cmbLangID->addItem("Norwegian (Nynorsk) (nn-NO)", 2068); + ui.cmbLangID->addItem("Occitan (oc-FR)", 1154); + ui.cmbLangID->addItem("Odia (or-IN)", 1096); + ui.cmbLangID->addItem("Pashto (ps-AF)", 1123); + ui.cmbLangID->addItem("Persian (fa-IR)", 1065); + ui.cmbLangID->addItem("Polish (pl-PL)", 1045); + ui.cmbLangID->addItem("Portuguese (Brazil) (pt-BR)", 1046); + ui.cmbLangID->addItem("Portuguese (Portugal) (pt-PT)", 2070); + ui.cmbLangID->addItem("Punjabi (Gurmukhi) (pa-IN)", 1094); + ui.cmbLangID->addItem("Quechua (Bolivia) (quz-BO)", 1131); + ui.cmbLangID->addItem("Quechua (Ecuador) (quz-EC)", 2155); + ui.cmbLangID->addItem("Quechua (Peru) (quz-PE)", 3179); + ui.cmbLangID->addItem("Romanian (ro-RO)", 1048); + ui.cmbLangID->addItem("Romansh (rm-CH)", 1047); + ui.cmbLangID->addItem("Russian (ru-RU)", 1049); + ui.cmbLangID->addItem("Sami (Inari) (smn-FI)", 9275); + ui.cmbLangID->addItem("Sami (Lule, Norway) (smj-NO)", 4155); + ui.cmbLangID->addItem("Sami (Lule, Sweden) (smj-SE)", 5179); + ui.cmbLangID->addItem("Sami (Northern, Finland) (se-FI)", 3131); + ui.cmbLangID->addItem("Sami (Northern, Norway) (se-NO)", 1083); + ui.cmbLangID->addItem("Sami (Northern, Sweden) (se-SE)", 2107); + ui.cmbLangID->addItem("Sami (Skolt) (sms-FI)", 8251); + ui.cmbLangID->addItem("Sami (Southern, Norway) (sma-NO)", 6203); + ui.cmbLangID->addItem("Sami (Southern, Sweden) (sma-SE)", 7227); + ui.cmbLangID->addItem("Sanskrit (sa-IN)", 1103); + ui.cmbLangID->addItem("Serbian (Cyrillic, Bosnia and Herzegovina) (sr-Cyrl-BA)", 1026); + ui.cmbLangID->addItem("Serbian (Cyrillic, Montenegro) (sr-Cyrl-ME)", 12314); + ui.cmbLangID->addItem("Serbian (Cyrillic, Serbia) (sr-Cyrl-RS)", 3098); + ui.cmbLangID->addItem("Serbian (Latin, Bosnia and Herzegovina) (sr-Latn-BA)", 2074); + ui.cmbLangID->addItem("Serbian (Latin, Montenegro) (sr-Latn-ME)", 13317); + ui.cmbLangID->addItem("Serbian (Latin, Serbia) (sr-Latn-RS)", 9242); + ui.cmbLangID->addItem("Sesotho sa Leboa (nso-ZA)", 1132); + ui.cmbLangID->addItem("Sinhala (si-LK)", 1115); + ui.cmbLangID->addItem("Slovak (sk-SK)", 1051); + ui.cmbLangID->addItem("Slovenian (sl-SI)", 1060); + ui.cmbLangID->addItem("Spanish (Argentina) (es-AR)", 11274); + ui.cmbLangID->addItem("Spanish (Bolivia) (es-BO)", 16394); + ui.cmbLangID->addItem("Spanish (Chile) (es-CL)", 13322); + ui.cmbLangID->addItem("Spanish (Colombia) (es-CO)", 9226); + ui.cmbLangID->addItem("Spanish (Costa Rica) (es-CR)", 5130); + ui.cmbLangID->addItem("Spanish (Dominican Republic) (es-DO)", 7178); + ui.cmbLangID->addItem("Spanish (Ecuador) (es-EC)", 12298); + ui.cmbLangID->addItem("Spanish (El Salvador) (es-SV)", 17418); + ui.cmbLangID->addItem("Spanish (Guatemala) (es-GT)", 4106); + ui.cmbLangID->addItem("Spanish (Honduras) (es-HN)", 18442); + ui.cmbLangID->addItem("Spanish (Mexico) (es-MX)", 2058); + ui.cmbLangID->addItem("Spanish (Nicaragua) (es-NI)", 19466); + ui.cmbLangID->addItem("Spanish (Panama) (es-PA)", 6154); + ui.cmbLangID->addItem("Spanish (Paraguay) (es-PY)", 15370); + ui.cmbLangID->addItem("Spanish (Peru) (es-PE)", 10250); + ui.cmbLangID->addItem("Spanish (Puerto Rico) (es-PR)", 20490); + ui.cmbLangID->addItem("Spanish (Spain) (es-ES)", 1034); + ui.cmbLangID->addItem("Spanish (United States) (es-US)", 21514); + ui.cmbLangID->addItem("Spanish (Uruguay) (es-UY)", 14346); + ui.cmbLangID->addItem("Spanish (Venezuela) (es-VE)", 8202); + ui.cmbLangID->addItem("Swahili (sw-KE)", 1089); + ui.cmbLangID->addItem("Swedish (Finland) (sv-FI)", 2077); + ui.cmbLangID->addItem("Swedish (Sweden) (sv-SE)", 1053); + ui.cmbLangID->addItem("Syriac (syr-SY)", 1114); + ui.cmbLangID->addItem("Tajik (Cyrillic) (tg-Cyrl-TJ)", 1064); + ui.cmbLangID->addItem("Tamil (ta-IN)", 1097); + ui.cmbLangID->addItem("Tatar (tt-RU)", 1092); + ui.cmbLangID->addItem("Telugu (te-IN)", 1098); + ui.cmbLangID->addItem("Thai (th-TH)", 1054); + ui.cmbLangID->addItem("Tibetan (bo-CN)", 1105); + ui.cmbLangID->addItem("Turkish (tr-TR)", 1055); + ui.cmbLangID->addItem("Turkmen (tk-TM)", 1090); + ui.cmbLangID->addItem("Ukrainian (uk-UA)", 1058); + ui.cmbLangID->addItem("Upper Sorbian (hsb-DE)", 1070); + ui.cmbLangID->addItem("Urdu (India) (ur-IN)", 2080); + ui.cmbLangID->addItem("Urdu (Pakistan) (ur-PK)", 1056); + ui.cmbLangID->addItem("Uzbek (Cyrillic) (uz-Cyrl-UZ)", 2115); + ui.cmbLangID->addItem("Uzbek (Latin) (uz-Latn-UZ)", 1091); + ui.cmbLangID->addItem("Vietnamese (vi-VN)", 1066); + ui.cmbLangID->addItem("Welsh (cy-GB)", 1106); + ui.cmbLangID->addItem("Wolof (wo-SN)", 1160); + ui.cmbLangID->addItem("Xhosa (xh-ZA)", 1076); + ui.cmbLangID->addItem("Yi (ii-CN)", 1144); + ui.cmbLangID->addItem("Yoruba (yo-NG)", 1130); + ui.cmbLangID->addItem("Zulu (zu-ZA)", 1077); +} \ No newline at end of file diff --git a/SandboxiePlus/SandMan/Windows/OptionsWindow.h b/SandboxiePlus/SandMan/Windows/OptionsWindow.h index 2b4c9d50..153b09cc 100644 --- a/SandboxiePlus/SandMan/Windows/OptionsWindow.h +++ b/SandboxiePlus/SandMan/Windows/OptionsWindow.h @@ -631,5 +631,7 @@ private: bool Changed; }; QMap m_DebugOptions; + + void InitLangID(); };