This commit is contained in:
DavidXanatos 2024-07-21 13:51:35 +02:00
parent b7ea1a430f
commit 9f8966b666
5 changed files with 481 additions and 192 deletions

View File

@ -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.

View File

@ -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;
}

View File

@ -45,7 +45,7 @@
<enum>QTabWidget::North</enum>
</property>
<property name="currentIndex">
<number>9</number>
<number>1</number>
</property>
<widget class="QWidget" name="tabGeneral">
<attribute name="title">
@ -1732,47 +1732,20 @@
<layout class="QGridLayout" name="gridLayout_26">
<item row="0" column="1">
<layout class="QGridLayout" name="gridLayout_2">
<item row="5" column="1" colspan="3">
<widget class="QCheckBox" name="chkDropPrivileges">
<item row="6" column="0" colspan="2">
<widget class="QLabel" name="lblToken">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
<kerning>true</kerning>
</font>
</property>
<property name="toolTip">
<string>Protect the sandbox integrity itself</string>
</property>
<property name="text">
<string>Drop critical privileges from processes running with a SYSTEM token</string>
</property>
</widget>
</item>
<item row="10" column="2">
<spacer name="horizontalSpacer_13">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="1" colspan="3">
<widget class="QCheckBox" name="chkProtectSCM">
<property name="text">
<string>Allow only privileged processes to access the Service Control Manager</string>
</property>
</widget>
</item>
<item row="8" column="2" colspan="2">
<widget class="QLabel" name="label_74">
<property name="text">
<string>Using a custom Sandboxie Token allows to isolate individual sandboxes from each other better, and it shows in the user column of task managers the name of the box a process belongs to. Some 3rd party security solutions may however have problems with custom tokens.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="9" column="1" colspan="2">
<widget class="QCheckBox" name="chkCreateToken">
<property name="text">
<string>Create a new sandboxed token instead of setting down default token</string>
<string>Sandboxie token</string>
</property>
</widget>
</item>
@ -1790,6 +1763,91 @@
</property>
</widget>
</item>
<item row="3" column="1" colspan="3">
<widget class="QCheckBox" name="chkElevateRpcss">
<property name="text">
<string>Start the sandboxed RpcSs as a SYSTEM process (not recommended)</string>
</property>
</widget>
</item>
<item row="11" column="2">
<spacer name="horizontalSpacer_13">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="8" column="2" colspan="2">
<widget class="QLabel" name="label_74">
<property name="text">
<string>Using a custom Sandboxie Token allows to isolate individual sandboxes from each other better, and it shows in the user column of task managers the name of the box a process belongs to. Some 3rd party security solutions may however have problems with custom tokens.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="2" column="1" colspan="3">
<widget class="QCheckBox" name="chkRestrictServices">
<property name="text">
<string>Do not start sandboxed services using a system token (recommended)</string>
</property>
</widget>
</item>
<item row="7" column="1" colspan="4">
<widget class="QCheckBox" name="chkSbieLogon">
<property name="text">
<string>Use a Sandboxie login instead of an anonymous token</string>
</property>
</widget>
</item>
<item row="10" column="1">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>5</height>
</size>
</property>
</spacer>
</item>
<item row="5" column="4">
<widget class="QLabel" name="label_64">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
<kerning>true</kerning>
</font>
</property>
<property name="text">
<string>(Security Critical)</string>
</property>
</widget>
</item>
<item row="1" column="1" colspan="3">
<widget class="QCheckBox" name="chkProtectSCM">
<property name="text">
<string>Allow only privileged processes to access the Service Control Manager</string>
</property>
</widget>
</item>
<item row="5" column="1" colspan="3">
<widget class="QCheckBox" name="chkDropPrivileges">
<property name="text">
<string>Drop critical privileges from processes running with a SYSTEM token</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="lblPrivilege">
<property name="font">
@ -1807,40 +1865,6 @@
</property>
</widget>
</item>
<item row="2" column="1" colspan="3">
<widget class="QCheckBox" name="chkRestrictServices">
<property name="text">
<string>Do not start sandboxed services using a system token (recommended)</string>
</property>
</widget>
</item>
<item row="7" column="1" colspan="4">
<widget class="QCheckBox" name="chkSbieLogon">
<property name="text">
<string>Use a Sandboxie login instead of an anonymous token</string>
</property>
</widget>
</item>
<item row="9" column="1">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>5</height>
</size>
</property>
</spacer>
</item>
<item row="3" column="1" colspan="3">
<widget class="QCheckBox" name="chkElevateRpcss">
<property name="text">
<string>Start the sandboxed RpcSs as a SYSTEM process (not recommended)</string>
</property>
</widget>
</item>
<item row="4" column="1" colspan="3">
<widget class="QCheckBox" name="chkProtectSystem">
<property name="text">
@ -1848,34 +1872,10 @@
</property>
</widget>
</item>
<item row="5" column="4">
<widget class="QLabel" name="label_64">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
<kerning>true</kerning>
</font>
</property>
<item row="9" column="1" colspan="4">
<widget class="QCheckBox" name="chkCreateToken">
<property name="text">
<string>(Security Critical)</string>
</property>
</widget>
</item>
<item row="6" column="0" colspan="2">
<widget class="QLabel" name="lblToken">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
<kerning>true</kerning>
</font>
</property>
<property name="toolTip">
<string>Protect the sandbox integrity itself</string>
</property>
<property name="text">
<string>Sandboxie token</string>
<string>Create a new sandboxed token instead of stripping down the original token</string>
</property>
</widget>
</item>
@ -4679,23 +4679,132 @@ This is done to prevent rogue processes inside the sandbox from creating a renam
<widget class="QWidget" name="tabHideProc">
<property name="font">
<font>
<weight>50</weight>
<bold>false</bold>
<kerning>true</kerning>
</font>
</property>
<attribute name="title">
<string>Hide Processes</string>
<string>Privacy</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_29">
<item row="6" column="1">
<item row="2" column="2">
<widget class="QComboBox" name="cmbLangID"/>
</item>
<item row="10" column="4">
<widget class="QCheckBox" name="chkShowHiddenProcTmpl">
<property name="text">
<string>Show Templates</string>
</property>
</widget>
</item>
<item row="4" column="0" rowspan="4">
<item row="1" column="1" colspan="3">
<widget class="QCheckBox" name="chkHideFirmware">
<property name="toolTip">
<string/>
</property>
<property name="text">
<string>Hide Firmware Informations</string>
</property>
</widget>
</item>
<item row="8" column="4">
<widget class="QPushButton" name="btnAddProcess">
<property name="text">
<string>Add Process</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="lblProcessHiding">
<property name="font">
<font>
<bold>true</bold>
<kerning>true</kerning>
</font>
</property>
<property name="text">
<string>Process Hiding</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLabel" name="label_72">
<property name="text">
<string>Use a custom Locale/LangID</string>
</property>
</widget>
</item>
<item row="9" column="4">
<spacer name="verticalSpacer_16">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="5" column="1" colspan="3">
<widget class="QCheckBox" name="chkHideHostProcesses">
<property name="text">
<string>Don't allow sandboxed processes to see processes running outside any boxes</string>
</property>
</widget>
</item>
<item row="2" column="3">
<spacer name="horizontalSpacer_24">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="11" column="4">
<widget class="QPushButton" name="btnDelProcess">
<property name="text">
<string>Remove</string>
</property>
</widget>
</item>
<item row="7" column="0" colspan="4">
<widget class="QLabel" name="label_24">
<property name="text">
<string>Hide host processes from processes running in the sandbox.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="4" column="1" colspan="3">
<widget class="QCheckBox" name="chkHideOtherBoxes">
<property name="text">
<string>Don't allow sandboxed processes to see processes running in other boxes</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="lblPrivacyProtection">
<property name="font">
<font>
<bold>true</bold>
<kerning>true</kerning>
</font>
</property>
<property name="text">
<string>Data Protection</string>
</property>
</widget>
</item>
<item row="8" column="0" rowspan="4" colspan="4">
<widget class="QTreeWidget" name="treeHideProc">
<property name="sortingEnabled">
<bool>true</bool>
@ -4712,71 +4821,13 @@ This is done to prevent rogue processes inside the sandbox from creating a renam
</column>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_24">
<property name="text">
<string>Hide host processes from processes running in the sandbox.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="chkHideNonSystemProcesses">
<property name="text">
<string>Don't allow sandboxed processes to see processes running outside any boxes</string>
</property>
</widget>
</item>
<item row="8" column="0">
<item row="12" column="0" colspan="5">
<widget class="QCheckBox" name="chkBlockWMI">
<property name="toolTip">
<string>Some programs read system deatils through WMI(A Windows built-in database) instead of normal ways. For example,&quot;tasklist.exe&quot; could get full processes list even if &quot;HideOtherBoxes&quot; is opened through accessing WMI. Enable this option to stop these heavior.</string>
</property>
<property name="text">
<string>Prevent sandboxed processes from accessing system details through WMI</string>
</property>
</widget>
</item>
<item row="5" column="1">
<spacer name="verticalSpacer_16">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="7" column="1">
<widget class="QPushButton" name="btnDelProcess">
<property name="text">
<string>Remove</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QPushButton" name="btnAddProcess">
<property name="text">
<string>Add Process</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QCheckBox" name="chkHideOtherBoxes">
<property name="text">
<string>Don't allow sandboxed processes to see processes running in other boxes</string>
</property>
</widget>
</item>
<item row="9" column="0">
<widget class="QLabel" name="label_59">
<property name="text">
<string>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.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
<string>Prevent sandboxed processes from accessing system deatils through WMI (see tooltip for more Info)</string>
</property>
</widget>
</item>

View File

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

View File

@ -631,5 +631,7 @@ private:
bool Changed;
};
QMap<QCheckBox*, SDbgOpt> m_DebugOptions;
void InitLangID();
};