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();
};