1.14.5
This commit is contained in:
parent
b7ea1a430f
commit
9f8966b666
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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,14 +1732,45 @@
|
|||
<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>
|
||||
<string>Sandboxie token</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="10" column="2">
|
||||
<item row="4" column="4">
|
||||
<widget class="QLabel" name="label_65">
|
||||
<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="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>
|
||||
|
@ -1752,13 +1783,6 @@
|
|||
</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">
|
||||
|
@ -1769,15 +1793,35 @@
|
|||
</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>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="4">
|
||||
<widget class="QLabel" name="label_65">
|
||||
<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>
|
||||
|
@ -1790,6 +1834,20 @@
|
|||
</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>
|
||||
|
@ -4096,13 +4096,13 @@ The process match level has a higher priority than the specificity and describes
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="1">
|
||||
<widget class="QCheckBox" name="chkForceRestart">
|
||||
<property name="text">
|
||||
<string>Restart force process before they begin to execute</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="1">
|
||||
<widget class="QCheckBox" name="chkForceRestart">
|
||||
<property name="text">
|
||||
<string>Restart force process before they begin to execute</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="0">
|
||||
<spacer name="verticalSpacer_28">
|
||||
<property name="orientation">
|
||||
|
@ -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,"tasklist.exe" could get full processes list even if "HideOtherBoxes" 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>
|
||||
|
|
|
@ -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);
|
||||
}
|
|
@ -631,5 +631,7 @@ private:
|
|||
bool Changed;
|
||||
};
|
||||
QMap<QCheckBox*, SDbgOpt> m_DebugOptions;
|
||||
|
||||
void InitLangID();
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue