Merge branch 'sandboxie-plus:master' into AutoTerminateWhenExit

This commit is contained in:
爱编程的叶一笑 2024-08-26 19:49:35 +08:00 committed by GitHub
commit 300a6be555
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
43 changed files with 8962 additions and 6445 deletions

View File

@ -164,7 +164,7 @@ jobs:
- name: Upload installer assets
#if: github.ref == 'refs/heads/master' && github.event_name != 'pull_request'
uses: actions/upload-artifact@v4.3.4
uses: actions/upload-artifact@v4.3.6
with:
name: Assets
path: |
@ -173,7 +173,7 @@ jobs:
- name: Upload Sandboxie x64
#if: github.ref == 'refs/heads/master' && github.event_name != 'pull_request'
uses: actions/upload-artifact@v4.3.4
uses: actions/upload-artifact@v4.3.6
with:
name: Sandboxie_x64
path: |
@ -267,7 +267,7 @@ jobs:
- name: Upload Sandboxie ARM64
#if: github.ref == 'refs/heads/master' && github.event_name != 'pull_request'
uses: actions/upload-artifact@v4.3.4
uses: actions/upload-artifact@v4.3.6
with:
name: Sandboxie_ARM64
path: |
@ -336,7 +336,7 @@ jobs:
- name: Upload Sandboxie x86
#if: github.ref == 'refs/heads/master' && github.event_name != 'pull_request'
uses: actions/upload-artifact@v4.3.4
uses: actions/upload-artifact@v4.3.6
with:
name: Sandboxie_x86
path: |

View File

@ -2,15 +2,25 @@
All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](http://semver.org/).
## [1.14.7 / 5.69.7] - 2024-0x-xx
## [1.14.6 / 5.69.6] - 2024-07-??
### Added
- added "RandomRegUID"(bool) which could modify Windows Product Id in the registry to a rand value
- added "HideDiskSerialNumber"(bool) return random value when applications tries to get disk serial number
- added option to get free 10 days evaluation certificates from the support settings page.
- The evaluation certificates are node lcoked to the HwID and for each HwID up to 3 certs can be requested.
### Fixed
- fixed issue with Windows 7 caused by the new CustomLCID option [#4117](https://github.com/sandboxie-plus/Sandboxie/issues/4117)
## [1.14.6 / 5.69.6] - 2024-07-30
### Added
- added alias for a sandbox [#4112](https://github.com/sandboxie-plus/Sandboxie/issues/4112)
### Fixed
- fixed issue with Windows 7 caused by the new CustomLCID option [#4117](https://github.com/sandboxie-plus/Sandboxie/issues/4117)
- fixed Settings Window issue with non-advanced certificates introduced in 1.14.0
- fixed issue with API_PROCESS_EXEMPTION_CONTROL
@ -19,12 +29,12 @@ This project adheres to [Semantic Versioning](http://semver.org/).
### Added
- added HwID display
- added Language Spoof "CustomLCID=1033" [#4024](https://github.com/sandboxie-plus/Sandboxie/pull/4024) (thanks Yeyixiao)
- added option to always run the sandman UI as admin [#4090](https://github.com/sandboxie-plus/Sandboxie/issues/4090)
- added option to always run the SandMan UI as admin [#4090](https://github.com/sandboxie-plus/Sandboxie/issues/4090)
- added Proxy exclusion [#4036](https://github.com/sandboxie-plus/Sandboxie/issues/4036)
- added "ForceChildren=Program.exe" [#4070](https://github.com/sandboxie-plus/Sandboxie/issues/4070)
- added UI options for "ForceRestartAll" and "UseCreateToken" in OptionWindow
- added an optional context menu option to make folder/file forced quickly
- Note: you can also use "Sandman.exe /add_force program_path" to do it
- Note: you can also use "SandMan.exe /add_force program_path" to do it
### Changed
- the certificate format can now take an explicit validity days specification, needed for gapless certificate renewal

View File

@ -81,10 +81,10 @@ Sandboxie's functionality can be enhanced with specialized tools like the follow
| 2004 - 2013 | Ronen Tzur |
| 2013 - 2017 | Invincea Inc. |
| 2017 - 2020 | Sophos Group plc |
| [Open-source code](https://github.com/sandboxie/sandboxie) | Tom Brown |
| --- | --- |
| 2020 onwards | David Xanatos ([Roadmap](https://www.wilderssecurity.com/threads/sandboxie-roadmap.445545/page-8#post-3187633)) |
| 8 April 2020 - [open-source code](https://community.sophos.com/sandboxie/f/forum/119641/important-sandboxie-open-source-code-is-available-for-download) | Sophos Ltd. |
| 9 April 2020 onwards - project fork | David Xanatos |
See the current [roadmap](https://www.wilderssecurity.com/threads/sandboxie-roadmap.445545/page-8#post-3187633).
## 📌 Project support / sponsorship
@ -113,7 +113,9 @@ If you find Sandboxie useful, then feel free to contribute through our [Contribu
- hg421 - Security analysis & PoCs / Code reviews
- hx1997 - Security analysis & PoC
- mpheath - Author of Plus installer / Code fixes / Collaborator
- offhub - Documentation additions / Code fixes / Collaborator
- offhub - Documentation additions / Code fixes / Qt5 patch and build script / Collaborator
- LumitoLuma - Qt5 patch and build script
- QZLin - Author of [sandboxie-docs](https://sandboxie-plus.github.io/sandboxie-docs/) theme
- isaak654 - Templates / Documentation / Code fixes / Collaborator
- typpos - UI additions / Documentation / Code fixes
- Yeyixiao - Feature additions
@ -130,6 +132,7 @@ If you find Sandboxie useful, then feel free to contribute through our [Contribu
- cricri-pingouin - UI fixes
- Valinwolf - UI / Icons
- daveout - UI / Icons
- kokofixcomputers - Support member of the [Discord](https://discord.gg/S4tFu6Enne) channel
- NewKidOnTheBlock - Changelog fixes
- Naeemh1 - Documentation additions
- APMichael - Templates additions
@ -137,7 +140,8 @@ If you find Sandboxie useful, then feel free to contribute through our [Contribu
- Luro223 - Documentation additions
- lwcorp - Documentation additions
- wilders-soccerfan - Documentation additions
- LumitoLuma - Qt5 patch and build script
- LepordCat - Documentation additions
- stdedos - Documentation additions
## 🌏 Translators
@ -152,7 +156,7 @@ If you find Sandboxie useful, then feel free to contribute through our [Contribu
- VenusGirl - Korean
- 7zip - Polish ([provided separately](https://forum.xanasoft.com/viewtopic.php?f=12&t=4&start=30))
- JNylson - Portuguese and Brazilian Portuguese
- lufog - Russian
- lufog, marat2509 - Russian
- LumitoLuma, sebadamus - Spanish
- 1FF, Thatagata - Swedish (provided by email or pull request)
- xorcan, fmbxnary, offhub - Turkish

View File

@ -26,7 +26,7 @@
#define VERSION_MJR 5
#define VERSION_MIN 69
#define VERSION_REV 6
#define VERSION_REV 7
#define VERSION_UPD 0
#if VERSION_UPD > 0

View File

@ -315,7 +315,7 @@ void NetFw_AddRule(LIST* list, NETFW_RULE* new_rule)
//
// it seems we might be able to merge these rules
// now we check the convoluted case when rules havs ip's and port's set
// now we check the convoluted case when rules have IPs and ports set.
//
if ((rule->port_map.count != 0) && (rule->ip_map.count != 0)){

View File

@ -24,7 +24,7 @@
#include "dll.h"
#include "common/my_version.h"
#include <stdio.h>
#include <objbase.h>
//---------------------------------------------------------------------------
// Functions
@ -49,6 +49,7 @@ static HANDLE OpenExplorerKey(
HANDLE ParentKey, const WCHAR *SubkeyName, ULONG *error);
static void DeleteShellAssocKeys(ULONG Wow64);
static void AutoExec(void);
static BOOLEAN Custom_ProductID(void);
//---------------------------------------------------------------------------
@ -91,6 +92,7 @@ _FX BOOLEAN CustomizeSandbox(void)
DisableEdgeBoost();
Custom_EnableBrowseNewProcess();
DeleteShellAssocKeys(0);
Custom_ProductID();
Custom_DisableBHOs();
if (Dll_OsBuild >= 8400) // only on win 8 and later
Custom_OpenWith();
@ -1338,7 +1340,7 @@ _FX void Custom_ComServer(void)
// NsiRpc_Init
//---------------------------------------------------------------------------
#include <objbase.h>
//#include <objbase.h>
typedef RPC_STATUS (*P_NsiRpcRegisterChangeNotification)(
LPVOID p1, LPVOID p2, LPVOID p3, LPVOID p4, LPVOID p5, LPVOID p6, LPVOID p7);
@ -1535,6 +1537,217 @@ _FX BOOLEAN Custom_OsppcDll(HMODULE module)
return TRUE;
}
//---------------------------------------------------------------------------
// Custom_ProductID
//---------------------------------------------------------------------------
/*static wchar_t GetCharFromInt(int a) {
switch (a) {
case 0:
return L'0';
break;
case 1:
return L'1';
break;
case 2:
return L'2';
break;
case 3:
return L'3';
break;
case 4:
return L'4';
break;
case 5:
return L'5';
break;
case 6:
return L'6';
break;
case 7:
return L'7';
break;
case 8:
return L'8';
break;
case 9:
return L'9';
break;
}
return 0;
}
static int GetIntLen(DWORD n) {
int count = 0;
while (n != 0)
{
n = n / 10;
count++;
}
return count;
}*/
static unsigned long seed = 1;
int my_rand(void)
{
seed = (seed * 214013L
+ 2531011L) >> 16;
return((unsigned)seed & 0x7fff);
}
/*char* my_itoa(int num, char* str, int radix)
{
char index[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
unsigned unum;
int i = 0, j, k;
if (radix == 10 && num < 0)
{
unum = (unsigned)-num;
str[i++] = '-';
}
else unum = (unsigned)num;
do
{
str[i++] = index[unum % (unsigned)radix];
unum /= radix;
} while (unum);
str[i] = '\0';
if (str[0] == '-') k = 1;
else k = 0;
char temp;
for (j = k; j <= (i - 1) / 2; j++)
{
temp = str[j];
str[j] = str[i - 1 + k - j];
str[i - 1 + k - j] = temp;
}
return str;
}*/
wchar_t* GuidToString(const GUID guid)
{
static wchar_t buf[64] = {0};
Sbie_snwprintf(buf, sizeof(buf),
L"%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X",
guid.Data1, guid.Data2, guid.Data3,
guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3],
guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]);
return buf;
}
_FX BOOLEAN Custom_ProductID(void)
{
if (SbieApi_QueryConfBool(NULL, L"RandomRegUID", FALSE)) {
NTSTATUS status;
UNICODE_STRING uni;
OBJECT_ATTRIBUTES objattrs;
HANDLE hKey;
InitializeObjectAttributes(
&objattrs, &uni, OBJ_CASE_INSENSITIVE, NULL, NULL);
RtlInitUnicodeString(&uni,
L"\\registry\\Machine\\Software\\"
L"\\Microsoft\\Windows NT\\CurrentVersion");
status = Key_OpenIfBoxed(&hKey, KEY_SET_VALUE, &objattrs);
if (NT_SUCCESS(status)) {
//UNICODE_STRING buf;
//RtlInitUnicodeString(&buf, tmp);
/*if (GetIntLen(dwTick) == 1) {
//DWORD last = dwTick - (dwTick / 10) * 10;
DWORD last = dwTick;
WCHAR chr = GetCharFromInt((int)last);
Sleep(0);
DWORD dwTick2 = GetTickCount(),last2=0;
if (GetIntLen(dwTick) == 1)
last2 = dwTick2;
else
last2 = dwTick2 - (dwTick2 / 10) * 10;
WCHAR chr2= GetCharFromInt((int)last2);
wcscpy_s(tmp, 1, chr2);
wcscat_s(tmp, 1, chr2);
for(int i=0;i<=2;i++)
wcscat_s(tmp, 1, chr);
}*/
WCHAR tmp[34] = { 0 };
RtlInitUnicodeString(&uni, L"ProductId");
seed = GetTickCount();
int chain1 = my_rand() % 10000 + 9999,
chain2 = my_rand() % 10000 + 9999,
chain3 = my_rand() % 10000 + 9999,
chain4 = my_rand() % 10000 + 9999
;
Sbie_snwprintf(tmp, 34, L"%05d-%05d-%05d-%05d", chain1, chain2, chain3, chain4);
status = NtSetValueKey(
hKey, &uni, 0, REG_SZ, tmp, sizeof(tmp)+1);
NtClose(hKey);
}
RtlInitUnicodeString(&uni,
L"\\registry\\Machine\\Software\\"
L"\\Microsoft\\Cryptography");
typedef HRESULT(*P_CoCreateGuid)(
GUID* pguid
);
P_CoCreateGuid CoCreateGuid2 = (P_CoCreateGuid)Ldr_GetProcAddrNew(DllName_ole32, L"CoCreateGuid", "CoCreateGuid");
status = Key_OpenIfBoxed(&hKey, KEY_SET_VALUE, &objattrs);
if (NT_SUCCESS(status)&&CoCreateGuid2) {
GUID guid;
HRESULT h = CoCreateGuid2(&guid);
WCHAR buf[64] = { 0 };
if (h == S_OK) {
WCHAR* pChar = GuidToString(guid);
lstrcpy(buf, pChar);
RtlInitUnicodeString(&uni, L"MachineGuid");
status = NtSetValueKey(
hKey, &uni, 0, REG_SZ, buf, sizeof(buf) + 1);
}
}
NtClose(hKey);
RtlInitUnicodeString(&uni,
L"\\registry\\Machine\\Software\\"
L"\\Microsoft\\SQMClient");
status = Key_OpenIfBoxed(&hKey, KEY_SET_VALUE, &objattrs);
if (NT_SUCCESS(status)&&CoCreateGuid2) {
GUID guid;
HRESULT h = CoCreateGuid2(&guid);
WCHAR buf[64] = L"{";
if (h == S_OK) {
WCHAR* pChar = GuidToString(guid);
lstrcat(buf, pChar);
lstrcat(buf, L"}");
RtlInitUnicodeString(&uni, L"MachineId");
status = NtSetValueKey(
hKey, &uni, 0, REG_SZ, buf, sizeof(buf) + 1);
}
}
NtClose(hKey);
return TRUE;
}
return TRUE;
}
#ifndef _M_ARM64
//---------------------------------------------------------------------------

View File

@ -69,6 +69,8 @@ typedef LCID (*P_GetSystemDefaultLCID)();
typedef LANGID (*P_GetSystemDefaultLangID)();
typedef BOOL (*P_GetVolumeInformationByHandleW)(HANDLE hFile, LPWSTR lpVolumeNameBuffer, DWORD nVolumeNameSize, LPDWORD lpVolumeSerialNumber,LPDWORD lpMaximumComponentLength, LPDWORD lpFileSystemFlags, LPWSTR lpFileSystemNameBuffer, DWORD nFileSystemNameSize);
//typedef int (*P_GetLocaleInfoEx)(LPCWSTR lpLocaleName, LCTYPE LCType, LPWSTR lpLCData, int cchData);
//typedef int (*P_GetLocaleInfoA)(LCID Locale, LCTYPE LCType, LPSTR lpLCData, int cchData);
@ -98,12 +100,13 @@ P_QueryPerformanceCounter __sys_QueryPerformanceCounter = NULL;
P_GetUserDefaultUILanguage __sys_GetUserDefaultUILanguage = NULL;
P_GetUserDefaultLocaleName __sys_GetUserDefaultLocaleName = NULL;
P_GetUserDefaultLCID __sys_GetUserDefaultLCID = NULL;
P_GetUserDefaultLangID __sys_GetUserDefaultLangID = NULL;
P_GetUserDefaultLangID __sys_GetUserDefaultLangID = NULL;
P_GetUserDefaultGeoName __sys_GetUserDefaultGeoName = NULL;
P_GetSystemDefaultUILanguage __sys_GetSystemDefaultUILanguage = NULL;
P_GetSystemDefaultLocaleName __sys_GetSystemDefaultLocaleName = NULL;
P_GetSystemDefaultLCID __sys_GetSystemDefaultLCID = NULL;
P_GetSystemDefaultLCID __sys_GetSystemDefaultLCID = NULL;
P_GetSystemDefaultLangID __sys_GetSystemDefaultLangID = NULL;
P_GetVolumeInformationByHandleW __sys_GetVolumeInformationByHandleW = NULL;
LCID Kernel_CustomLCID = 0;
@ -148,7 +151,8 @@ static LCID Kernel_GetSystemDefaultLCID();
static LANGID Kernel_GetSystemDefaultLangID();
static BOOL Kernel_GetVolumeInformationByHandleW(HANDLE hFile, LPWSTR lpVolumeNameBuffer, DWORD nVolumeNameSize, LPDWORD lpVolumeSerialNumber, LPDWORD lpMaximumComponentLength, LPDWORD lpFileSystemFlags, LPWSTR lpFileSystemNameBuffer, DWORD nFileSystemNameSize);
//---------------------------------------------------------------------------
// Kernel_Init
//---------------------------------------------------------------------------
@ -247,6 +251,13 @@ _FX BOOLEAN Kernel_Init()
SBIEDLL_HOOK(Kernel_, GetSystemDefaultLangID);
}
if (SbieApi_QueryConfBool(NULL, L"HideDiskSerialNumber", FALSE)) {
void* GetVolumeInformationByHandleW = GetProcAddress(Dll_KernelBase ? Dll_KernelBase : Dll_Kernel32, "GetVolumeInformationByHandleW");
if (GetVolumeInformationByHandleW) {
SBIEDLL_HOOK(Kernel_, GetVolumeInformationByHandleW);
}
}
return TRUE;
}
@ -488,3 +499,30 @@ _FX LANGID Kernel_GetSystemDefaultLangID()
{
return (LANGID)Kernel_CustomLCID;
}
//----------------------------------------------------------------------------
//Kernel_GetVolumeInformationByHandleW
//----------------------------------------------------------------------------
static unsigned long Kernel_seed = 1;
int Kernel_rand(void)
{
Kernel_seed = (Kernel_seed * 214013L
+ 2531011L) >> 16;
return((unsigned)Kernel_seed & 0x7fff);
}
_FX BOOL Kernel_GetVolumeInformationByHandleW(HANDLE hFile, LPWSTR lpVolumeNameBuffer, DWORD nVolumeNameSize, LPDWORD lpVolumeSerialNumber,LPDWORD lpMaximumComponentLength, LPDWORD lpFileSystemFlags, LPWSTR lpFileSystemNameBuffer, DWORD nFileSystemNameSize)
{
// todo remember returned values and dont return a new rand each time
DWORD ourSerialNumber = 0;
BOOL rtn = __sys_GetVolumeInformationByHandleW(hFile, lpVolumeNameBuffer, nVolumeNameSize, &ourSerialNumber, lpMaximumComponentLength, lpFileSystemFlags, lpFileSystemNameBuffer, nFileSystemNameSize);
if (lpVolumeSerialNumber != NULL) {
Kernel_seed = __sys_GetTickCount();
*lpVolumeSerialNumber = Kernel_rand() % 0x10000;
}
return rtn;
}

View File

@ -765,7 +765,7 @@ _FX BOOLEAN WSA_GetProxyImpl(NETPROXY_RULE* WSA_Proxy, const short *addr, int ad
if (!WSA_Proxy)
return FALSE;
// check if there are any IP's specified for which wes should bypass the proxy
// check if there are any IPs specified for which we should bypass the proxy
if (WSA_Proxy->ip_map.count > 0) {
IP_ADDRESS ip;
if (WSA_GetIP(addr, addrlen, &ip)) {

View File

@ -1236,10 +1236,12 @@ _FX void Api_CopyStringToUser(
_FX NTSTATUS Api_ProcessExemptionControl(PROCESS *proc, ULONG64 *parms)
{
NTSTATUS status = STATUS_SUCCESS;
//KIRQL irql;
KIRQL irql;
API_PROCESS_EXEMPTION_CONTROL_ARGS *pArgs = (API_PROCESS_EXEMPTION_CONTROL_ARGS *)parms;
ULONG *in_flag;
ULONG in_value = 0;
ULONG *out_flag;
ULONG out_value = 0;
if (proc) // is caller sandboxed?
return STATUS_NOT_IMPLEMENTED;
@ -1259,34 +1261,38 @@ _FX NTSTATUS Api_ProcessExemptionControl(PROCESS *proc, ULONG64 *parms)
ProbeForWrite(out_flag, sizeof(ULONG), sizeof(ULONG));
}
if(!in_flag && !out_flag)
if (in_flag)
in_value = *in_flag;
else if(!out_flag)
return STATUS_INVALID_PARAMETER;
//proc = Process_Find(pArgs->process_id.val, &irql);
proc = Process_Find(pArgs->process_id.val, NULL);
proc = Process_Find(pArgs->process_id.val, &irql);
if (proc && (proc != PROCESS_TERMINATED))
{
if (pArgs->action_id.val == 'splr')
{
if (in_flag)
proc->ipc_allowSpoolerPrintToFile = *in_flag != 0;
proc->ipc_allowSpoolerPrintToFile = in_value != 0;
if (out_flag)
*out_flag = proc->ipc_allowSpoolerPrintToFile;
out_value = proc->ipc_allowSpoolerPrintToFile;
}
else if (pArgs->action_id.val == 'inet')
{
if (in_flag)
proc->AllowInternetAccess = *in_flag != 0;
proc->AllowInternetAccess = in_value != 0;
if (out_flag)
*out_flag = proc->AllowInternetAccess;
out_value = proc->AllowInternetAccess;
}
else
status = STATUS_INVALID_INFO_CLASS;
}
else
status = STATUS_NOT_FOUND;
//ExReleaseResourceLite(Process_ListLock);
//KeLowerIrql(irql);
ExReleaseResourceLite(Process_ListLock);
KeLowerIrql(irql);
if (out_flag)
*out_flag = out_value;
return status;
}

View File

@ -34,7 +34,7 @@ const wchar_t Parameters[] = L"\\Parameters";
#define IMAGE_FILE_MACHINE_ARM64 0xAA64 // ARM64 Little-Endian
#endif
#define WIN11_LATEST 26217 // <-----
#define WIN11_LATEST 27686 // <-----
#define SVR2025 26040
#define WIN11_FIRST 22000
#define SVR2022 20348

View File

@ -553,6 +553,7 @@ _FX NTSTATUS KphValidateCertificate()
WCHAR* type = NULL;
WCHAR* level = NULL;
WCHAR* options = NULL;
LONG amount = 1;
WCHAR* key = NULL;
LARGE_INTEGER cert_date = { 0 };
@ -699,6 +700,9 @@ _FX NTSTATUS KphValidateCertificate()
else if (_wcsicmp(L"LEVEL", name) == 0 && level == NULL) {
level = Mem_AllocString(Driver_Pool, value);
}
else if (_wcsicmp(L"OPTIONS", name) == 0 && options == NULL) {
options = Mem_AllocString(Driver_Pool, value);
}
else if (_wcsicmp(L"UPDATEKEY", name) == 0 && key == NULL) {
key = Mem_AllocString(Driver_Pool, value);
}
@ -854,13 +858,15 @@ _FX NTSTATUS KphValidateCertificate()
{
if(days) expiration_date.QuadPart = cert_date.QuadPart + KphGetDateInterval((CSHORT)(days), 0, 0);
else expiration_date.QuadPart = cert_date.QuadPart + KphGetDateInterval((CSHORT)(level ? _wtoi(level) : 7), 0, 0); // x days, default 7
Verify_CertInfo.level = eCertAdvanced;
Verify_CertInfo.level = eCertMaxLevel;
}
else if (!level || _wcsicmp(level, L"STANDARD") == 0) // not used, default does not have explicit level
Verify_CertInfo.level = eCertStandard;
else if (_wcsicmp(level, L"ADVANCED") == 0)
{
if(Verify_CertInfo.type == eCertPatreon || Verify_CertInfo.type == eCertEntryPatreon)
if(Verify_CertInfo.type == eCertGreatPatreon)
Verify_CertInfo.level = eCertMaxLevel;
else if(Verify_CertInfo.type == eCertPatreon || Verify_CertInfo.type == eCertEntryPatreon)
Verify_CertInfo.level = eCertAdvanced1;
else
Verify_CertInfo.level = eCertAdvanced;
@ -900,6 +906,51 @@ _FX NTSTATUS KphValidateCertificate()
if(CertDbg) DbgPrint("Sbie Cert level: %X\n", Verify_CertInfo.level);
if (options) {
if(CertDbg) DbgPrint("Sbie Cert options: %S\n", options);
for (WCHAR* option = options; ; )
{
while (*option == L' ' || *option == L'\t') option++;
WCHAR* end = wcschr(option, L',');
if (!end) end = wcschr(option, L'\0');
//if (CertDbg) DbgPrint("Sbie Cert option: %.*S\n", end - option, option);
if (_wcsnicmp(L"SBOX", option, end - option) == 0)
Verify_CertInfo.opt_sec = 1;
else if (_wcsnicmp(L"EBOX", option, end - option) == 0)
Verify_CertInfo.opt_enc = 1;
else if (_wcsnicmp(L"NETI", option, end - option) == 0)
Verify_CertInfo.opt_net = 1;
else if (_wcsnicmp(L"DESK", option, end - option) == 0)
Verify_CertInfo.opt_desk = 1;
else if (CertDbg) DbgPrint("Sbie Cert UNKNOWN option: %.*S\n", (ULONG)(end - option), option);
if (*end == L'\0')
break;
option = end + 1;
}
}
else {
switch (Verify_CertInfo.level)
{
case eCertMaxLevel:
//case eCertUltimate:
Verify_CertInfo.opt_desk = 1;
case eCertAdvanced:
Verify_CertInfo.opt_net = 1;
case eCertAdvanced1:
Verify_CertInfo.opt_enc = 1;
case eCertStandard2:
case eCertStandard:
Verify_CertInfo.opt_sec = 1;
//case eCertBasic:
}
}
if (CERT_IS_TYPE(Verify_CertInfo, eCertEternal))
expiration_date.QuadPart = -1; // at the end of time (never)
else if (!expiration_date.QuadPart) {
@ -949,6 +1000,7 @@ CleanupExit:
if (type) Mem_FreeString(type);
if (level) Mem_FreeString(level);
if (options) Mem_FreeString(options);
if (key) Mem_FreeString(key);
MyFreeHash(&hashObj);

View File

@ -21,19 +21,27 @@ typedef union _SCertInfo {
unsigned long long State;
struct {
unsigned long
active : 1, // certificate is active
expired : 1, // certificate is expired but may be active
outdated : 1, // certificate is expired, not anymore valid for the current build
unused_1 : 2, // DEPRECATED
active : 1, // certificate is active
expired : 1, // certificate is expired but may be active
outdated : 1, // certificate is expired, not anymore valid for the current build
unused_1 : 2, // DEPRECATED
grace_period: 1, // the certificate is expired and or outdated but we keep it valid for 1 extra month to allof wor a seamless renewal
reservd_2 : 2,
reservd_2 : 2,
type : 5,
level : 3,
type : 5,
level : 3,
reservd_3 : 8,
reservd_3 : 8,
reservd_4 : 8;
reservd_4 : 4, // More features
opt_desk : 1, // Isolated Sandboxie Desktops: "UseSandboxDesktop"
opt_net : 1, // Advanced Network features: "NetworkDnsFilter", "NetworkUseProxy".
opt_enc : 1, // Box Encryption and Box Protection: "ConfidentialBox", "UseFileImage", "EnableEFS".
opt_sec : 1; // Variouse security enchanced box types: "UseSecurityMode", "SysCallLockDown", "RestrictDevices", "UseRuleSpecificity", "UsePrivacyMode", "ProtectHostImages",
// as well as reduced isoaltion box type: "NoSecurityIsolation".
// Other features, available with any cert: "UseRamDisk", "ForceUsbDrives",
// as well as Automatic Updates, etc....
unsigned long expirers_in_sec;
};

View File

@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>674</width>
<height>475</height>
<width>787</width>
<height>575</height>
</rect>
</property>
<property name="sizePolicy">
@ -45,7 +45,7 @@
<enum>QTabWidget::North</enum>
</property>
<property name="currentIndex">
<number>1</number>
<number>10</number>
</property>
<widget class="QWidget" name="tabGeneral">
<attribute name="title">
@ -4767,108 +4767,6 @@ This is done to prevent rogue processes inside the sandbox from creating a renam
<string>Privacy</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_29">
<item row="1" column="1" colspan="3">
<widget class="QCheckBox" name="chkHideFirmware">
<property name="toolTip">
<string/>
</property>
<property name="text">
<string>Hide Firmware Information</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="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="12" column="0" colspan="5">
<widget class="QCheckBox" name="chkBlockWMI">
<property name="toolTip">
<string>Some programs read system details through WMI (a Windows built-in database) instead of normal ways. For example, &quot;tasklist.exe&quot; could get full processes list through accessing WMI, even if &quot;HideOtherBoxes&quot; is used. Enable this option to stop this behaviour.</string>
</property>
<property name="text">
<string>Prevent sandboxed processes from accessing system details through WMI (see tooltip for more info)</string>
</property>
</widget>
</item>
<item row="5" column="1" colspan="3">
<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" rowspan="4" colspan="4">
<widget class="QTreeWidget" name="treeHideProc">
<property name="sortingEnabled">
<bool>true</bool>
</property>
<column>
<property name="text">
<string>Process</string>
</property>
</column>
<column>
<property name="text">
<string/>
</property>
</column>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="lblProcessHiding">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
<kerning>true</kerning>
</font>
</property>
<property name="text">
<string>Process Hiding</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="2" column="1">
<widget class="QLabel" name="label_72">
<property name="text">
<string>Use a custom Locale/LangID</string>
</property>
</widget>
</item>
<item row="11" column="4">
<widget class="QPushButton" name="btnDelProcess">
<property name="text">
<string>Remove</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="lblPrivacyProtection">
<property name="font">
@ -4883,17 +4781,109 @@ This is done to prevent rogue processes inside the sandbox from creating a renam
</property>
</widget>
</item>
<item row="1" column="1" colspan="2">
<widget class="QCheckBox" name="chkHideFirmware">
<property name="toolTip">
<string/>
</property>
<property name="text">
<string>Hide Firmware Information</string>
</property>
</widget>
</item>
<item row="1" column="4">
<widget class="QToolButton" name="btnDumpFW">
<property name="toolTip">
<string>Dump the current Firmware Tables to HKCU\System\SbieCustom</string>
</property>
<property name="text">
<string>Dump FW Tables</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="2" column="2">
<widget class="QComboBox" name="cmbLangID"/>
</item>
<item row="10" column="4">
<widget class="QCheckBox" name="chkShowHiddenProcTmpl">
<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="3" column="1">
<widget class="QCheckBox" name="chkHideSerial">
<property name="text">
<string>Show Templates</string>
<string>Hide Disk Serial Number</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QCheckBox" name="chkHideUID">
<property name="text">
<string>Obfuscate known unique identifiers in the registry</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="lblProcessHiding">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
<kerning>true</kerning>
</font>
</property>
<property name="text">
<string>Process Hiding</string>
</property>
</widget>
</item>
<item row="6" 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="7" column="1" colspan="3">
<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" 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="9" column="4">
<widget class="QPushButton" name="btnAddProcess">
<property name="text">
<string>Add Process</string>
</property>
</widget>
</item>
<item row="10" column="4">
<spacer name="verticalSpacer_16">
<property name="orientation">
<enum>Qt::Vertical</enum>
@ -4906,23 +4896,53 @@ This is done to prevent rogue processes inside the sandbox from creating a renam
</property>
</spacer>
</item>
<item row="4" column="1" colspan="3">
<widget class="QCheckBox" name="chkHideOtherBoxes">
<item row="11" column="4">
<widget class="QCheckBox" name="chkShowHiddenProcTmpl">
<property name="text">
<string>Don't allow sandboxed processes to see processes running in other boxes</string>
<string>Show Templates</string>
</property>
</widget>
</item>
<item row="1" column="4">
<widget class="QToolButton" name="btnDumpFW">
<item row="12" column="4">
<widget class="QPushButton" name="btnDelProcess">
<property name="text">
<string>Remove</string>
</property>
</widget>
</item>
<item row="13" column="0" colspan="4">
<widget class="QCheckBox" name="chkBlockWMI">
<property name="toolTip">
<string>Dump the current Firmware Tables to HKCU\System\SbieCustom</string>
<string>Some programs read system details through WMI (a Windows built-in database) instead of normal ways. For example, &quot;tasklist.exe&quot; could get full processes list through accessing WMI, even if &quot;HideOtherBoxes&quot; is used. Enable this option to stop this behaviour.</string>
</property>
<property name="text">
<string>Dump FW Tables</string>
<string>Prevent sandboxed processes from accessing system details through WMI (see tooltip for more info)</string>
</property>
</widget>
</item>
<item row="9" column="0" rowspan="4" colspan="4">
<widget class="QTreeWidget" name="treeHideProc">
<property name="minimumSize">
<size>
<width>258</width>
<height>200</height>
</size>
</property>
<property name="sortingEnabled">
<bool>true</bool>
</property>
<column>
<property name="text">
<string>Process</string>
</property>
</column>
<column>
<property name="text">
<string/>
</property>
</column>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="tabUsers">
@ -5236,8 +5256,8 @@ instead of &quot;*&quot;.</string>
<rect>
<x>0</x>
<y>0</y>
<width>98</width>
<height>28</height>
<width>75</width>
<height>16</height>
</rect>
</property>
<layout class="QGridLayout" name="dbgLayout">

View File

@ -1584,18 +1584,18 @@
</property>
</widget>
</item>
<item row="9" column="0">
<spacer name="verticalSpacer_5">
<property name="orientation">
<enum>Qt::Vertical</enum>
<item row="8" column="1" colspan="2">
<widget class="QLabel" name="lblHwId">
<property name="font">
<font>
<pointsize>7</pointsize>
<kerning>true</kerning>
</font>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
<property name="text">
<string>HwId: 00000000-0000-0000-0000-000000000000</string>
</property>
</spacer>
</widget>
</item>
<item row="5" column="1" colspan="3">
<widget class="QLabel" name="lblCertExp">
@ -1613,74 +1613,6 @@
</property>
</widget>
</item>
<item row="7" column="3">
<spacer name="horizontalSpacer_3">
<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="7" column="2">
<widget class="QToolButton" name="btnGetCert">
<property name="text">
<string>Get</string>
</property>
</widget>
</item>
<item row="10" column="3">
<widget class="QLabel" name="lblCertGuide">
<property name="font">
<font>
<bold>true</bold>
<kerning>true</kerning>
</font>
</property>
<property name="text">
<string>&lt;a href=&quot;https://sandboxie-plus.com/go.php?to=sbie-use-cert&quot;&gt;Certificate usage guide&lt;/a&gt;</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="3" column="1" colspan="3">
<widget class="QLabel" name="lblSupportCert">
<property name="text">
<string>Supporters of the Sandboxie-Plus project can receive a &lt;a href=&quot;https://sandboxie-plus.com/go.php?to=sbie-cert&quot;&gt;supporter certificate&lt;/a&gt;. It's like a license key but for awesome people using open source software. :-)</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="1" rowspan="2" colspan="3">
<widget class="QLabel" name="lblSupport">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Ignored">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Keeping Sandboxie up to date with the rolling releases of Windows and compatible with all web browsers is a never-ending endeavor. You can support the development by &lt;a href=&quot;https://sandboxie-plus.com/go.php?to=sbie-contribute&quot;&gt;directly contributing to the project&lt;/a&gt;, showing your support by &lt;a href=&quot;https://sandboxie-plus.com/go.php?to=sbie-obtain-cert&quot;&gt;purchasing a supporter certificate&lt;/a&gt;, becoming a patron by &lt;a href=&quot;https://sandboxie-plus.com/go.php?to=patreon&quot;&gt;subscribing on Patreon&lt;/a&gt;, or through a &lt;a href=&quot;https://sandboxie-plus.com/go.php?to=donate&quot;&gt;PayPal donation&lt;/a&gt;.&lt;br /&gt;Your support plays a vital role in the advancement and maintenance of Sandboxie.</string>
</property>
<property name="textFormat">
<enum>Qt::RichText</enum>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="0" rowspan="3">
<widget class="QLabel" name="label_4">
<property name="sizePolicy">
@ -1700,14 +1632,27 @@
</property>
</widget>
</item>
<item row="10" column="0" colspan="3">
<widget class="QCheckBox" name="chkNoCheck">
<item row="7" column="2">
<widget class="QToolButton" name="btnGetCert">
<property name="text">
<string>In the future, don't notify about certificate expiration</string>
<string>Get</string>
</property>
</widget>
</item>
<item row="4" column="1" colspan="3">
<item row="10" column="0">
<spacer name="verticalSpacer_5">
<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="4" column="1" colspan="4">
<widget class="QPlainTextEdit" name="txtCertificate">
<property name="maximumSize">
<size>
@ -1720,16 +1665,87 @@
</property>
</widget>
</item>
<item row="8" column="1" colspan="2">
<widget class="QLabel" name="lblHwId">
<item row="7" column="3" colspan="2">
<spacer name="horizontalSpacer_3">
<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="3" column="1" colspan="4">
<widget class="QLabel" name="lblSupportCert">
<property name="text">
<string>Supporters of the Sandboxie-Plus project can receive a &lt;a href=&quot;https://sandboxie-plus.com/go.php?to=sbie-cert&quot;&gt;supporter certificate&lt;/a&gt;. It's like a license key but for awesome people using open source software. :-)</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="1" rowspan="2" colspan="4">
<widget class="QLabel" name="lblSupport">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Ignored">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Keeping Sandboxie up to date with the rolling releases of Windows and compatible with all web browsers is a never-ending endeavor. You can support the development by &lt;a href=&quot;https://sandboxie-plus.com/go.php?to=sbie-contribute&quot;&gt;directly contributing to the project&lt;/a&gt;, showing your support by &lt;a href=&quot;https://sandboxie-plus.com/go.php?to=sbie-obtain-cert&quot;&gt;purchasing a supporter certificate&lt;/a&gt;, becoming a patron by &lt;a href=&quot;https://sandboxie-plus.com/go.php?to=patreon&quot;&gt;subscribing on Patreon&lt;/a&gt;, or through a &lt;a href=&quot;https://sandboxie-plus.com/go.php?to=donate&quot;&gt;PayPal donation&lt;/a&gt;.&lt;br /&gt;Your support plays a vital role in the advancement and maintenance of Sandboxie.</string>
</property>
<property name="textFormat">
<enum>Qt::RichText</enum>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="6" column="4">
<widget class="QLabel" name="lblCertGuide">
<property name="font">
<font>
<pointsize>7</pointsize>
<bold>true</bold>
<kerning>true</kerning>
</font>
</property>
<property name="text">
<string>HwId: 00000000-0000-0000-0000-000000000000</string>
<string>&lt;a href=&quot;https://sandboxie-plus.com/go.php?to=sbie-use-cert&quot;&gt;Certificate usage guide&lt;/a&gt;</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="12" column="0" colspan="3">
<widget class="QCheckBox" name="chkNoCheck">
<property name="text">
<string>In the future, don't notify about certificate expiration</string>
</property>
</widget>
</item>
<item row="11" column="1" colspan="4">
<widget class="QLabel" name="lblCert">
<property name="font">
<font>
<pointsize>9</pointsize>
<kerning>true</kerning>
</font>
</property>
<property name="text">
<string>Cert Info</string>
</property>
<property name="openExternalLinks">
<bool>false</bool>
</property>
</widget>
</item>

View File

@ -2584,7 +2584,7 @@ void CSandMan::OnStatusChanged()
CheckSupport();
int WizardLevel = abs(theConf->GetInt("Options/WizardLevel", 0));
if (WizardLevel < (theConf->GetInt("Options/CheckForUpdates", 2) != 1 ? SETUP_LVL_2 : SETUP_LVL_1)) {
if (WizardLevel < (!g_CertInfo.active ? SETUP_LVL_3 : (theConf->GetInt("Options/CheckForUpdates", 2) != 1 ? SETUP_LVL_2 : SETUP_LVL_1))) {
if (!CSetupWizard::ShowWizard(WizardLevel)) { // if user canceled, mark that and do not show again, until there is something new
if(QMessageBox::question(NULL, "Sandboxie-Plus", tr("Do you want the setup wizard to be omitted?"), QMessageBox::Yes, QMessageBox::No | QMessageBox::Default) == QMessageBox::Yes)
theConf->SetValue("Options/WizardLevel", -SETUP_LVL_CURRENT);

View File

@ -1,121 +1,122 @@
{
"Description Text...": "Description Text...",
"Fix current issues": "Fix current issues",
"Fix issues with sandboxing": "Fix issues with sandboxing",
"An Application does not work properly when sandboxed": "An Application does not work properly when sandboxed",
"Issues with a web browser": "Issues with a web browser",
"Perform Sandbox maintenance": "Perform Sandbox maintenance",
"Fix issues with the UI or Shell": "Fix issues with the UI or Shell",
"Yes": "Yes",
"No": "No",
"\nPlease note that this required preset works only with a valid supporter certificate!": "\nPlease note that this required preset works only with a valid supporter certificate!",
"App compatibility checker": "App compatibility checker",
"This script check which app compatibility templates needs to be enabled": "This script check which app compatibility templates needs to be enabled",
"Loaded %1 templates": "Loaded %1 templates",
"Browser shortcut is missing from the desktop": "Browser shortcut is missing from the desktop",
"This procedure will add a browser shortcut to the desktop": "This procedure will add a browser shortcut to the desktop",
"Default Browser": "Default Browser",
"Another": "Another",
"Select Browser": "Select Browser",
"Select Sandbox": "Select Sandbox",
"Select which browser you want to create a shortcut for and in what box": "Select which browser you want to create a shortcut for and in what box",
"Select Browser Path": "Select Browser Path",
"Explorer Context Menu extension does not work": "Explorer Context Menu extension does not work",
"This procedure will re install the shell integration": "This procedure will re install the shell integration",
"Add Run Sandboxed": "Add Run Sandboxed",
"Add Run Unsandboxed": "Add Run Unsandboxed",
"Install legacy shell extensions": "Install legacy shell extensions",
"Select which shell options should be reinstalled": "Select which shell options should be reinstalled",
"Low FPS in sandboxed games": "Low FPS in sandboxed games",
"This procedure will optimize the box settings for gaming": "This procedure will optimize the box settings for gaming",
"Select which box to optimize.": "Select which box to optimize.",
"To apply recommended settings press NEXT. \n": "To apply recommended settings press NEXT. \n",
"The options has been applied please tryout your game in %1 and indicate if the issue has been resolved.": "The options has been applied please tryout your game in %1 and indicate if the issue has been resolved.",
"FPS optimization not successful": "FPS optimization not successful",
"Failed to install application into a sandbox": "Failed to install application into a sandbox",
"It helps troubleshoot issues related to installing applications in the sandbox": "It helps troubleshoot issues related to installing applications in the sandbox",
"Enter Installer Path": "Enter Installer Path",
"Select a sandbox to install into": "Select a sandbox to install into",
"This box has DropAdminRights enabled, preventing execution of installers. Do you want to disable this restriction, that will reduce the security level.": "This box has DropAdminRights enabled, preventing execution of installers. Do you want to disable this restriction, that will reduce the security level.",
"Disable DropAdminRights": "Disable DropAdminRights",
"Enable FakeAdminRights": "Enable FakeAdminRights",
"running installer, pid: %1 press NEXT once it finishes to continue": "running installer, pid: %1 press NEXT once it finishes to continue",
"Was the issue resolved?": "Was the issue resolved?",
"no mitigation worked": "no mitigation worked",
"Webcam or Sound does not work when sandboxed": "Webcam or Sound does not work when sandboxed",
"It helps troubleshoot webcam and audio issues in the sandbox": "It helps troubleshoot webcam and audio issues in the sandbox",
"To enable webcam support on Windows 11, the isolation level must be reduced. \nIf you want to proceed, please press NEXT and select a sandbox to modify. \n": "To enable webcam support on Windows 11, the isolation level must be reduced. \nIf you want to proceed, please press NEXT and select a sandbox to modify. \n",
"Select which box to turn into a reduced isolation app compartment box.": "Select which box to turn into a reduced isolation app compartment box.",
"The mitigation has been applied please try out the web cam in %1 and indicate if the issue has been resolved.": "The mitigation has been applied please try out the web cam in %1 and indicate if the issue has been resolved.",
"Webcam mitigation not successful": "Webcam mitigation not successful",
"Select affected sandbox": "Select affected sandbox",
"Enter Process Name": "Enter Process Name",
"SBIE1307: Program cannot access the Internet due to restrictions": "SBIE1307: Program cannot access the Internet due to restrictions",
"Program cannot access the Internet due to restrictions": "Program cannot access the Internet due to restrictions",
"Internet Access restrictions are in effect for the sandbox in which the program is running. The program is prohibited from accessing the Internet.": "Internet Access restrictions are in effect for the sandbox in which the program is running. The program is prohibited from accessing the Internet.",
"SBIE1308: Program cannot start due to restrictions": "SBIE1308: Program cannot start due to restrictions",
"Program cannot start due to restrictions": "Program cannot start due to restrictions",
"Start/Run restrictions are in effect for the sandbox in which the program is running. The program is prohibited from starting or running.": "Start/Run restrictions are in effect for the sandbox in which the program is running. The program is prohibited from starting or running.",
"SBIE2102: File is too large to copy into sandbox": "SBIE2102: File is too large to copy into sandbox",
"File is too large to copy into sandbox": "File is too large to copy into sandbox",
"SBIE2113: File is too large to copy into sandbox, creating empty file": "SBIE2113: File is too large to copy into sandbox, creating empty file",
"File is too large to copy into sandbox, creating empty file": "File is too large to copy into sandbox, creating empty file",
"SBIE2114: File is too large to copy into sandbox, denying access": "SBIE2114: File is too large to copy into sandbox, denying access",
"File is too large to copy into sandbox, denying access": "File is too large to copy into sandbox, denying access",
"SBIE2115: File is too large to copy into sandbox, opening in read only": "SBIE2115: File is too large to copy into sandbox, opening in read only",
"File is too large to copy into sandbox, opening in read only": "File is too large to copy into sandbox, opening in read only",
"SBIE2181: Failed to load SbieDll.dll": "SBIE2181: Failed to load SbieDll.dll",
"Fix the DACLs of Sandboxie's home folder": "Fix the DACLs of Sandboxie's home folder",
"Failures to load SbieDll.dll when encountered by Chrome, or another software employing app containers, it is often caused by invalid DACL entries for the Sandboxie home directory. This mitigation measure will fix them, for this reason it will prompt for admin privileges which need to be granted for kmdutil.exe.": "Failures to load SbieDll.dll when encountered by Chrome, or another software employing app containers, it is often caused by invalid DACL entries for the Sandboxie home directory. This mitigation measure will fix them, for this reason it will prompt for admin privileges which need to be granted for kmdutil.exe.",
"The DACLs have been adjusted, please try to run your application again and indicate if the issue has been resolved.": "The DACLs have been adjusted, please try to run your application again and indicate if the issue has been resolved.",
"DACLs fix did not resolve the issue": "DACLs fix did not resolve the issue",
"SBIE2204: Cannot start a specific sandboxed service": "SBIE2204: Cannot start a specific sandboxed service",
"Sandboxie failed to start a service in the sandbox": "Sandboxie failed to start a service in the sandbox",
"The message indicates that Sandboxie was unable to start one of the helper programs SandboxieRpcSs or SandboxieDcomLaunch. The name noted in the message can be rpcss or dcomlaunch.\n\nYou can submit an issue report on the next page to help us to analyze the issue.": "The message indicates that Sandboxie was unable to start one of the helper programs SandboxieRpcSs or SandboxieDcomLaunch. The name noted in the message can be rpcss or dcomlaunch.\n\nYou can submit an issue report on the next page to help us to analyze the issue.",
"SBIE2313: Could not execute specific process": "SBIE2313: Could not execute specific process",
"Sandboxie failed to start a process in the sandbox": "Sandboxie failed to start a process in the sandbox",
"Sandboxie was not able to execute one of its own programs. Check access permissions to the Sandboxie installation folder and/or reinstall Sandboxie.\n\nPossible Causes:\n1. Sandboxie was configured to block access to the folder containing its program files.\n2. A third-party (HIPS) security software was configured to block the execution of the program mentioned in the message.\n\nYou can submit an issue report on the next page to help us to analyze the issue.": "Sandboxie was not able to execute one of its own programs. Check access permissions to the Sandboxie installation folder and/or reinstall Sandboxie.\n\nPossible Causes:\n1. Sandboxie was configured to block access to the folder containing its program files.\n2. A third-party (HIPS) security software was configured to block the execution of the program mentioned in the message.\n\nYou can submit an issue report on the next page to help us to analyze the issue.",
"open config": "open config",
"opens box config on a given page": "opens box config on a given page",
"Do you want to open the box option dialog to change this preset?": "Do you want to open the box option dialog to change this preset?",
"No, it is fine as it is": "No, it is fine as it is",
"No, but I want to report a bug": "No, but I want to report a bug",
"SBIE 2113/2114/2115 and 2102": "SBIE 2113/2114/2115 and 2102",
"handle migration error messages": "handle migration error messages",
"The message %1 is caused by the file migration limit being reached.": "The message %1 is caused by the file migration limit being reached.",
"fix parental controls breaking sandboxie": "fix parental controls breaking sandboxie",
"stops AppId driver and AppIdSvc service and disables the offending policy file": "stops AppId driver and AppIdSvc service and disables the offending policy file",
"It seems you are using a non-administrative user account on a system with enabled parental controls, this is known to be incompatible with Sandboxie.\nYou have the following options to resolve the issue.": "It seems you are using a non-administrative user account on a system with enabled parental controls, this is known to be incompatible with Sandboxie.\nYou have the following options to resolve the issue.",
"SBIEMSG, I'm getting a cryptic SBIExxxx message": "SBIEMSG, I'm getting a cryptic SBIExxxx message",
"Handle all sbie messages...": "Handle all sbie messages...",
"Sbie Message Code": "Sbie Message Code",
"Name affected process": "Name affected process",
"Please enter the SBIEMSG ID you have encountered.": "Please enter the SBIEMSG ID you have encountered.",
"There is no automated troubleshooting available for SBIE%1 yet.<br />": "There is no automated troubleshooting available for SBIE%1 yet.<br />",
"The full message text is: %1<br />": "The full message text is: %1<br />",
"Visit out <a href=\"%1\">online-documentation</a> to learn more about this, and other sbie messages.": "Visit out <a href=\"%1\">online-documentation</a> to learn more about this, and other sbie messages.",
"Would you like to collect some logs to help us resolve the issue.": "Would you like to collect some logs to help us resolve the issue.",
"Now please run your application again to trigger the Sbie message.<br /><br />": "Now please run your application again to trigger the Sbie message.<br /><br />",
"Press NEXT when you are done collecting logs.": "Press NEXT when you are done collecting logs."
"Description Text...": "Текст описания...",
"Fix current issues": "Устранение текущих проблем",
"Fix issues with sandboxing": "Устранение проблем с песочницей",
"An Application does not work properly when sandboxed": "Приложение не работает должным образом в песочнице",
"Issues with a web browser": "Проблемы с веб-браузером",
"Perform Sandbox maintenance": "Выполнить обслуживание песочницы",
"Fix issues with the UI or Shell": "Устранение проблем с интерфейсом или оболочкой",
"Yes": "Да",
"No": "Нет",
"\nPlease note that this required preset works only with a valid supporter certificate!": "\nОбратите внимание, что этот обязательный пресет работает только при наличии действующего сертификата сторонника!",
"App compatibility checker": "Проверка совместимости приложений",
"This script check which app compatibility templates needs to be enabled": "Этот скрипт проверяет, какие шаблоны совместимости приложений должны быть включены",
"Loaded %1 templates": "Загружено %1 шаблонов",
"Browser shortcut is missing from the desktop": "Ярлык браузера отсутствует на рабочем столе",
"This procedure will add a browser shortcut to the desktop": "Эта процедура добавит ярлык браузера на рабочий стол",
"Default Browser": "Браузер по умолчанию",
"Another": "Другой",
"Select Browser": "Выберите браузер",
"Select Sandbox": "Выберите песочницу",
"Select which browser you want to create a shortcut for and in what box": "Выберите, для какого браузера вы хотите создать ярлык и в какой песочнице",
"Select Browser Path": "Выберите путь к браузеру",
"Explorer Context Menu extension does not work": "Расширение контекстного меню Проводника не работает",
"This procedure will re install the shell integration": "Эта процедура переустановит интеграцию оболочки",
"Add Run Sandboxed": "Добавить Запуск в песочнице",
"Add Run Unsandboxed": "Добавить Запуск вне песочницы",
"Install legacy shell extensions": "Установить устаревшие расширения оболочки",
"Select which shell options should be reinstalled": "Выберите, какие параметры оболочки должны быть переустановлены",
"Low FPS in sandboxed games": "Низкий FPS в играх в песочнице",
"This procedure will optimize the box settings for gaming": "Эта процедура оптимизирует настройки песочницы для игр",
"Select which box to optimize.": "Выберите, какую песочницу оптимизировать.",
"To apply recommended settings press NEXT. \n": "Чтобы применить рекомендуемые настройки, нажмите ДАЛЕЕ. \n",
"The options has been applied please tryout your game in %1 and indicate if the issue has been resolved.": "Настройки применены, пожалуйста, попробуйте вашу игру в %1 и укажите, решена ли проблема.",
"FPS optimization not successful": "Оптимизация FPS не удалась",
"Failed to install application into a sandbox": "Не удалось установить приложение в песочницу",
"It helps troubleshoot issues related to installing applications in the sandbox": "Это помогает устранить проблемы, связанные с установкой приложений в песочницу",
"Enter Installer Path": "Введите путь к установщику",
"Select a sandbox to install into": "Выберите песочницу для установки",
"This box has DropAdminRights enabled, preventing execution of installers. Do you want to disable this restriction, that will reduce the security level.": "В этой песочнице включен DropAdminRights, что предотвращает запуск установщиков. Вы хотите отключить это ограничение, что снизит уровень безопасности?",
"Disable DropAdminRights": "Отключить DropAdminRights",
"Enable FakeAdminRights": "Включить FakeAdminRights",
"running installer, pid: %1 press NEXT once it finishes to continue": "Запуск установщика, pid: %1 нажмите ДАЛЕЕ после завершения, чтобы продолжить",
"Was the issue resolved?": "Была ли проблема решена?",
"no mitigation worked": "не сработало",
"Webcam or Sound does not work when sandboxed": "Веб-камера или звук не работают в песочнице",
"It helps troubleshoot webcam and audio issues in the sandbox": "Это помогает устранить проблемы с веб-камерой и звуком в песочнице",
"To enable webcam support on Windows 11, the isolation level must be reduced. \nIf you want to proceed, please press NEXT and select a sandbox to modify. \n": "Для включения поддержки веб-камеры в Windows 11 необходимо снизить уровень изоляции. \nЕсли хотите продолжить, нажмите ДАЛЕЕ и выберите песочницу для изменения. \n",
"Select which box to turn into a reduced isolation app compartment box.": "Выберите песочницу для преобразования в песочницу с пониженным уровнем изоляции.",
"The mitigation has been applied please try out the web cam in %1 and indicate if the issue has been resolved.": "Меры применены, пожалуйста, попробуйте веб-камеру в %1 и укажите, решена ли проблема.",
"Webcam mitigation not successful": "Меры по веб-камере не помогли",
"Select affected sandbox": "Выберите затронутую песочницу",
"Enter Process Name": "Введите имя процесса",
"SBIE1307: Program cannot access the Internet due to restrictions": "SBIE1307: Программа не может получить доступ к Интернету из-за ограничений",
"Program cannot access the Internet due to restrictions": "Программа не может получить доступ к Интернету из-за ограничений",
"Internet Access restrictions are in effect for the sandbox in which the program is running. The program is prohibited from accessing the Internet.": "Ограничения доступа к Интернету действуют для песочницы, в которой выполняется программа. Программе запрещено получать доступ к Интернету.",
"SBIE1308: Program cannot start due to restrictions": "SBIE1308: Программа не может запуститься из-за ограничений",
"Program cannot start due to restrictions": "Программа не может запуститься из-за ограничений",
"Start/Run restrictions are in effect for the sandbox in which the program is running. The program is prohibited from starting or running.": "Ограничения запуска/выполнения действуют для песочницы, в которой выполняется программа. Программе запрещено запускаться или выполняться.",
"SBIE2102: File is too large to copy into sandbox": "SBIE2102: Файл слишком большой для копирования в песочницу",
"File is too large to copy into sandbox": "Файл слишком большой для копирования в песочницу",
"SBIE2113: File is too large to copy into sandbox, creating empty file": "SBIE2113: Файл слишком большой для копирования в песочницу, создается пустой файл",
"File is too large to copy into sandbox, creating empty file": "Файл слишком большой для копирования в песочницу, создается пустой файл",
"SBIE2114: File is too large to copy into sandbox, denying access": "SBIE2114: Файл слишком большой для копирования в песочницу, доступ запрещен",
"File is too large to copy into sandbox, denying access": "Файл слишком большой для копирования в песочницу, доступ запрещен",
"SBIE2115: File is too large to copy into sandbox, opening in read only": "SBIE2115: Файл слишком большой для копирования в песочницу, открытие в режиме только для чтения",
"File is too large to copy into sandbox, opening in read only": "Файл слишком большой для копирования в песочницу, открытие в режиме только для чтения",
"SBIE2181: Failed to load SbieDll.dll": "SBIE2181: Не удалось загрузить SbieDll.dll",
"Fix the DACLs of Sandboxie's home folder": "Исправьте DACLs в домашней папке Sandboxie",
"Failures to load SbieDll.dll when encountered by Chrome, or another software employing app containers, it is often caused by invalid DACL entries for the Sandboxie home directory. This mitigation measure will fix them, for this reason it will prompt for admin privileges which need to be granted for kmdutil.exe.": "Сбой загрузки SbieDll.dll, если он возникает в Chrome или другом ПО, использующем контейнеры приложений, часто вызван недействительными записями DACL для домашней директории Sandboxie. Эта мера устранения проблемы исправит их, поэтому будет запрошено предоставление привилегий администратора для kmdutil.exe.",
"The DACLs have been adjusted, please try to run your application again and indicate if the issue has been resolved.": "DACLs были скорректированы, попробуйте снова запустить ваше приложение и укажите, решена ли проблема.",
"DACLs fix did not resolve the issue": "Исправление DACLs не решило проблему",
"SBIE2204: Cannot start a specific sandboxed service": "SBIE2204: Не удалось запустить определенную службу в песочнице",
"Sandboxie failed to start a service in the sandbox": "Sandboxie не удалось запустить службу в песочнице",
"The message indicates that Sandboxie was unable to start one of the helper programs SandboxieRpcSs or SandboxieDcomLaunch. The name noted in the message can be rpcss or dcomlaunch.\n\nYou can submit an issue report on the next page to help us to analyze the issue.": "Сообщение указывает, что Sandboxie не удалось запустить одну из вспомогательных программ SandboxieRpcSs или SandboxieDcomLaunch. Имя, указанное в сообщении, может быть rpcss или dcomlaunch.\n\nВы можете отправить отчет о проблеме на следующей странице, чтобы мы могли проанализировать проблему.",
"SBIE2313: Could not execute specific process": "SBIE2313: Не удалось запустить определенный процесс",
"Sandboxie failed to start a process in the sandbox": "Sandboxie не удалось запустить процесс в песочнице",
"Sandboxie was not able to execute one of its own programs. Check access permissions to the Sandboxie installation folder and/or reinstall Sandboxie.\n\nPossible Causes:\n1. Sandboxie was configured to block access to the folder containing its program files.\n2. A third-party (HIPS) security software was configured to block the execution of the program mentioned in the message.\n\nYou can submit an issue report on the next page to help us to analyze the issue.": "Sandboxie не удалось запустить одну из своих программ. Проверьте права доступа к папке установки Sandboxie и/или переустановите Sandboxie.\n\nВозможные причины:\n1. Sandboxie настроен на блокировку доступа к папке, содержащей файлы его программ.\n2. Стороннее (HIPS) программное обеспечение безопасности настроено на блокировку выполнения программы, указанной в сообщении.\n\nВы можете отправить отчет о проблеме на следующей странице, чтобы мы могли проанализировать проблему.",
"open config": "открыть конфигурацию",
"opens box config on a given page": "открывает конфигурацию песочницы на указанной странице",
"Do you want to open the box option dialog to change this preset?": "Хотите открыть диалог опций песочницы для изменения этого пресета?",
"No, it is fine as it is": "Нет, все нормально",
"No, but I want to report a bug": "Нет, но я хочу сообщить об ошибке",
"SBIE 2113/2114/2115 and 2102": "SBIE 2113/2114/2115 и 2102",
"handle migration error messages": "обработать сообщения об ошибках миграции",
"The message %1 is caused by the file migration limit being reached.": "Сообщение %1 вызвано превышением лимита миграции файлов.",
"fix parental controls breaking sandboxie": "исправить проблемы с родительским контролем, нарушающим работу Sandboxie",
"stops AppId driver and AppIdSvc service and disables the offending policy file": "останавливает драйвер AppId и службу AppIdSvc и отключает проблемный файл политики",
"It seems you are using a non-administrative user account on a system with enabled parental controls, this is known to be incompatible with Sandboxie.\nYou have the following options to resolve the issue.": "Похоже, вы используете учетную запись пользователя без прав администратора на системе с включенным родительским контролем, что несовместимо с Sandboxie.\nУ вас есть следующие варианты решения проблемы.",
"SBIEMSG, I'm getting a cryptic SBIExxxx message": "SBIEMSG, я получаю загадочное сообщение SBIExxx",
"Handle all sbie messages...": "Обработать все сообщения sbie...",
"Sbie Message Code": "Код сообщения Sbie",
"Name affected process": "Укажите затронутый процесс",
"Please enter the SBIEMSG ID you have encountered.": "Пожалуйста, введите идентификатор SBIEMSG, с которым вы столкнулись.",
"There is no automated troubleshooting available for SBIE%1 yet.<br />": "Автоматизированное устранение неполадок для SBIE%1 пока недоступно.<br />",
"The full message text is: %1<br />": "Полный текст сообщения: %1<br />",
"Visit out <a href=\"%1\">online-documentation</a> to learn more about this, and other sbie messages.": "Посетите нашу <a href=\"%1\">онлайн-документацию</a>, чтобы узнать больше об этом и других сообщениях sbie.",
"Would you like to collect some logs to help us resolve the issue.": "Хотите собрать логи, чтобы помочь нам решить проблему?",
"Now please run your application again to trigger the Sbie message.<br /><br />": "Теперь, пожалуйста, снова запустите ваше приложение, чтобы сгенерировать сообщение Sbie.<br /><br />",
"Press NEXT when you are done collecting logs.": "Нажмите ДАЛЕЕ после завершения сбора логов."
}

View File

@ -104,6 +104,8 @@ void COptionsWindow::CreateAdvanced()
InitLangID();
connect(ui.chkHideFirmware, SIGNAL(clicked(bool)), this, SLOT(OnAdvancedChanged()));
connect(ui.chkHideUID, SIGNAL(clicked(bool)), this, SLOT(OnAdvancedChanged()));
connect(ui.chkHideSerial, SIGNAL(clicked(bool)), this, SLOT(OnAdvancedChanged()));
connect(ui.cmbLangID, SIGNAL(currentIndexChanged(int)), this, SLOT(OnAdvancedChanged()));
connect(ui.btnDumpFW, SIGNAL(clicked(bool)), this, SLOT(OnDumpFW()));
@ -285,6 +287,8 @@ void COptionsWindow::LoadAdvanced()
//
ui.chkHideFirmware->setChecked(m_pBox->GetBool("HideFirmwareInfo", false));
ui.chkHideUID->setChecked(m_pBox->GetBool("RandomRegUID",false));
ui.chkHideSerial->setChecked(m_pBox->GetBool("HideDiskSerialNumber", false));
ui.cmbLangID->setCurrentIndex(ui.cmbLangID->findData(m_pBox->GetNum("CustomLCID", 0)));
@ -569,6 +573,8 @@ void COptionsWindow::SaveAdvanced()
//
WriteAdvancedCheck(ui.chkHideFirmware, "HideFirmwareInfo", "y", "");
WriteAdvancedCheck(ui.chkHideUID, "RandomRegUID", "y", "");
WriteAdvancedCheck(ui.chkHideSerial, "HideDiskSerialNumber", "y", "");
int CustomLCID = ui.cmbLangID->currentData().toInt();
if (CustomLCID) m_pBox->SetNum("CustomLCID", CustomLCID);

View File

@ -529,6 +529,8 @@ CSettingsWindow::CSettingsWindow(QWidget* parent)
if(theAPI->GetDriverInfo(-2, uuid_str, sizeof(uuid_str)))
ui.lblHwId->setText(tr("HwId: %1").arg(QString::fromWCharArray(uuid_str)));
connect(ui.lblCert, SIGNAL(linkActivated(const QString&)), this, SLOT(OnStartEval()));
connect(ui.btnGetCert, SIGNAL(clicked(bool)), this, SLOT(OnGetCert()));
connect(ui.chkNoCheck, SIGNAL(stateChanged(int)), this, SLOT(OnOptChanged()));
@ -1152,7 +1154,7 @@ void CSettingsWindow::OnRamDiskChange()
{
if (sender() == ui.chkRamDisk) {
if (ui.chkRamDisk->isChecked())
theGUI->CheckCertificate(this, 2);
theGUI->CheckCertificate(this);
}
if (ui.chkRamDisk->isChecked() && ui.txtRamLimit->text().isEmpty())
@ -1175,7 +1177,7 @@ void CSettingsWindow::OnVolumeChanged()
{
if (sender() == ui.chkSandboxUsb) {
if (ui.chkSandboxUsb->isChecked())
theGUI->CheckCertificate(this, 2);
theGUI->CheckCertificate(this);
}
ui.cmbUsbSandbox->setEnabled(ui.chkSandboxUsb->isChecked() && g_CertInfo.active);
@ -1254,6 +1256,14 @@ void CSettingsWindow::UpdateDrives()
void CSettingsWindow::UpdateCert()
{
ui.lblCertExp->setVisible(false);
int EvalCount = theConf->GetInt("User/EvalCount", 0);
if(EvalCount >= EVAL_MAX)
ui.lblCert->setText(tr("<b>You have used %1/%2 evaluation certificates. No more free certificates can be generated.</b>").arg(EvalCount).arg(EVAL_MAX));
else
ui.lblCert->setText(tr("<b><a href=\"_\">Get a free evaluation certificate</a> and enjoy all premium features for %1 days.</b>").arg(EVAL_DAYS));
ui.lblCert->setToolTip(tr("You can request a free %1-day evaluation certificate up to %2 times for any one Hardware ID").arg(EVAL_DAYS).arg(EVAL_MAX));
//ui.lblCertLevel->setVisible(!g_Certificate.isEmpty());
if (!g_Certificate.isEmpty())
{
@ -1310,6 +1320,33 @@ void CSettingsWindow::UpdateCert()
// ui.lblCertCount->setToolTip(tr("Count of certificates in use"));
// });
//}
QStringList Info;
if(g_CertInfo.expirers_in_sec > 0)
Info.append(tr("Expires in: %1 Days").arg(g_CertInfo.expirers_in_sec / (60*60*24)));
else if(g_CertInfo.expirers_in_sec < 0)
Info.append(tr("Expires: %1 Days ago").arg(g_CertInfo.expirers_in_sec / (60*60*24)));
QStringList Options;
if (g_CertInfo.opt_sec) Options.append("SBox");
else Options.append(QString("<font color='gray'>SBox</font>"));
if (g_CertInfo.opt_enc) Options.append("EBox");
else Options.append(QString("<font color='gray'>EBox</font>"));
if (g_CertInfo.opt_net) Options.append("NetI");
else Options.append(QString("<font color='gray'>NetI</font>"));
if (g_CertInfo.opt_desk) Options.append("Desk");
else Options.append(QString("<font color='gray'>Desk</font>"));
Info.append(tr("Options: %1").arg(Options.join(", ")));
ui.lblCert->setText(Info.join("<br />"));
QStringList OptionsEx;
OptionsEx.append(tr("Security/Privacy Enhanced & App Boxes (SBox): %1").arg(g_CertInfo.opt_sec ? tr("Enabled") : tr("Disabled")));
OptionsEx.append(tr("Encrypted Sandboxes (EBox): %1").arg(g_CertInfo.opt_enc ? tr("Enabled") : tr("Disabled")));
OptionsEx.append(tr("Network Interception (NetI): %1").arg(g_CertInfo.opt_net ? tr("Enabled") : tr("Disabled")));
OptionsEx.append(tr("Sandboxie Desktop (Desk): %1").arg(g_CertInfo.opt_desk ? tr("Enabled") : tr("Disabled")));
ui.lblCert->setToolTip(OptionsEx.join("\n"));
}
ui.radInsider->setEnabled(CERT_IS_INSIDER(g_CertInfo));
@ -1360,12 +1397,41 @@ void CSettingsWindow::OnGetCert()
}
}
void CSettingsWindow::OnStartEval()
{
StartEval(this, this, SLOT(OnCertData(const QByteArray&, const QVariantMap&)));
}
void CSettingsWindow::StartEval(QWidget* parent, QObject* receiver, const char* member)
{
QString Name = theConf->GetString("User/Name", qgetenv("USERNAME"));
QString eMail = QInputDialog::getText(parent, tr("Sandboxie-Plus - Get EVALUATION Certificate"), tr("Please enter your email address to receive a free %1-day evaluation certificate, which will be issued to %2 and locked to the current hardware.\n"
"You can request up to %3 evaluation certificates for each unique hardware ID.").arg(EVAL_DAYS).arg(Name).arg(EVAL_MAX), QLineEdit::Normal, theConf->GetString("User/eMail"));
if (eMail.isEmpty()) return;
theConf->SetValue("User/eMail", eMail);
QVariantMap Params;
Params["eMail"] = eMail;
Params["Name"] = Name;
SB_PROGRESS Status = theGUI->m_pUpdater->GetSupportCert("", receiver, member, Params);
if (Status.GetStatus() == OP_ASYNC) {
theGUI->AddAsyncOp(Status.GetValue());
Status.GetValue()->ShowMessage(tr("Retrieving certificate..."));
}
}
void CSettingsWindow::OnCertData(const QByteArray& Certificate, const QVariantMap& Params)
{
if (Certificate.isEmpty())
{
QString Error = Params["error"].toString();
qDebug() << Error;
if (Error == "max eval reached") {
if (theConf->GetInt("User/EvalCount", 0) < EVAL_MAX)
theConf->SetValue("User/EvalCount", EVAL_MAX);
}
QString Message = tr("Error retrieving certificate: %1").arg(Error.isEmpty() ? tr("Unknown Error (probably a network issue)") : Error);
CSandMan::ShowMessageBox(this, QMessageBox::Critical, Message);
return;
@ -1391,6 +1457,12 @@ void CSettingsWindow::ApplyCert()
bool bRet = ApplyCertificate(Certificate, this);
if (bRet && CERT_IS_TYPE(g_CertInfo, eCertEvaluation)) {
int EvalCount = theConf->GetInt("User/EvalCount", 0);
EvalCount++;
theConf->SetValue("User/EvalCount", EvalCount);
}
if (Certificate.isEmpty())
palette.setColor(QPalette::Base, Qt::white);
else if (!bRet)
@ -1942,7 +2014,10 @@ bool CSettingsWindow::ApplyCertificate(const QByteArray &Certificate, QWidget* w
QMessageBox::information(widget, "Sandboxie-Plus", tr("This certificate has unfortunately expired, you need to get a new certificate."));
}
else {
QMessageBox::information(widget, "Sandboxie-Plus", tr("Thank you for supporting the development of Sandboxie-Plus."));
if(CERT_IS_TYPE(g_CertInfo, eCertEvaluation))
QMessageBox::information(widget, "Sandboxie-Plus", tr("The evaluation certificate has been successfully applied. Enjoy your free trial!"));
else
QMessageBox::information(widget, "Sandboxie-Plus", tr("Thank you for supporting the development of Sandboxie-Plus."));
}
return true;

View File

@ -59,6 +59,8 @@ public:
static QColor GetCertColor();
static QString GetCertLevel();
static void StartEval(QWidget* parent, QObject* receiver, const char* member);
signals:
void OptionsChanged(bool bRebuildUI = false);
void Closed();
@ -139,6 +141,7 @@ private slots:
void OnCertData(const QByteArray& Certificate, const QVariantMap& Params);
void ApplyCert();
void UpdateUpdater();
void OnStartEval();
void GetUpdates();
void OnUpdateData(const QVariantMap& Data, const QVariantMap& Params);
@ -208,3 +211,6 @@ extern QByteArray g_Certificate;
#include "..\..\Sandboxie\core\drv\verify.h"
extern SCertInfo g_CertInfo;
#define EVAL_MAX 3 // for UI only actual limits enforced on server
#define EVAL_DAYS 10

View File

@ -12,16 +12,17 @@
CSetupWizard::CSetupWizard(int iOldLevel, QWidget *parent)
: QWizard(parent)
{
if (iOldLevel < SETUP_LVL_1) {
if (iOldLevel < SETUP_LVL_1)
setPage(Page_Intro, new CIntroPage);
setPage(Page_Certificate, new CCertificatePage);
if (iOldLevel < SETUP_LVL_3)
setPage(Page_Certificate, new CCertificatePage(iOldLevel));
if (iOldLevel < SETUP_LVL_1) {
setPage(Page_UI, new CUIPage);
setPage(Page_Shell, new CShellPage);
//setPage(Page_WFP, new CWFPPage);
}
if (iOldLevel < SETUP_LVL_2) {
if (iOldLevel < SETUP_LVL_2)
setPage(Page_Update, new CSBUpdate);
}
setPage(Page_Finish, new CFinishPage);
setWizardStyle(ModernStyle);
@ -239,12 +240,17 @@ bool CIntroPage::isComplete() const
// CCertificatePage
//
CCertificatePage::CCertificatePage(QWidget *parent)
CCertificatePage::CCertificatePage(int iOldLevel, QWidget *parent)
: QWizardPage(parent)
{
setTitle(tr("Install your <b>Sandboxie-Plus</b> support certificate"));
setSubTitle(tr("If you have a supporter certificate, please fill it into the field below."));
if (iOldLevel < SETUP_LVL_1)
m_NextPage = CSetupWizard::Page_UI;
else if (iOldLevel < SETUP_LVL_3)
m_NextPage = CSetupWizard::Page_Finish;
QGridLayout *layout = new QGridLayout;
m_pTopLabel = new QLabel();
@ -280,6 +286,13 @@ CCertificatePage::CCertificatePage(QWidget *parent)
connect(m_pEvaluate, SIGNAL(toggled(bool)), this, SIGNAL(completeChanged()));
registerField("isEvaluate", m_pEvaluate);
QLabel* pGetEvalCert = new QLabel(tr("<b><a href=\"_\"><font color='red'>Get a free evaluation certificate</font></a> and enjoy all premium features for %1 days.</b>").arg(EVAL_DAYS));
pGetEvalCert->setToolTip(tr("You can request a free %1-day evaluation certificate up to %2 times for any one Hardware ID").arg(EVAL_DAYS).arg(EVAL_MAX));
layout->addWidget(pGetEvalCert);
connect(pGetEvalCert, &QLabel::linkActivated, this, [=]() {
CSettingsWindow::StartEval(this, this, SLOT(OnCertData(const QByteArray&, const QVariantMap&)));
});
layout->addWidget(new QWidget());
setLayout(layout);
@ -328,7 +341,7 @@ void CCertificatePage::initializePage()
int CCertificatePage::nextId() const
{
return CSetupWizard::Page_UI;
return m_NextPage;
}
bool CCertificatePage::isComplete() const

View File

@ -11,7 +11,8 @@ QT_END_NAMESPACE
#define SETUP_LVL_1 1
#define SETUP_LVL_2 2
#define SETUP_LVL_CURRENT SETUP_LVL_2
#define SETUP_LVL_3 3
#define SETUP_LVL_CURRENT SETUP_LVL_3
class CSetupWizard : public QWizard
{
@ -59,7 +60,7 @@ class CCertificatePage : public QWizardPage
Q_OBJECT
public:
CCertificatePage(QWidget *parent = nullptr);
CCertificatePage(int iOldLevel, QWidget *parent = nullptr);
void initializePage() override;
int nextId() const override;
@ -74,6 +75,7 @@ private:
QPlainTextEdit* m_pCertificate;
QLineEdit* m_pSerial;
QCheckBox* m_pEvaluate;
int m_NextPage;
};
//////////////////////////////////////////////////////////////////////////////////////////

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,7 @@
#define VERSION_MJR 1
#define VERSION_MIN 14
#define VERSION_REV 6
#define VERSION_REV 7
#define VERSION_UPD 0
#ifndef STR

View File

@ -76,7 +76,7 @@ std::vector<T> SplitStrx(const T& String, const T& Separator, bool bKeepEmpty =
typename T::size_type Sep = bMulti ? String.find_first_of(Separator,Pos) : String.find(Separator,Pos);
if(Sep != T::npos)
{
if(bKeepEmpty || Sep-Pos > 0)
if(bKeepEmpty || Sep > Pos)
StringList.push_back(String.substr(Pos,Sep-Pos));
Pos = Sep+1;
}

View File

@ -33,7 +33,7 @@ To achieve this goal, Sandboxie has established a translation program that enabl
|Polish|Yes|Yes - Apr 27, 2024|No|
|Portuguese|Yes|Yes - May 30, 2023|No|
|PortugueseBr|Yes - Feb 14, 2023|Yes - Feb 14, 2023|No|
|Russian|Yes - Sep 21, 2023|Yes - Jun 6, 2024|No|
|Russian|Yes - Aug 22, 2024|Yes - Aug 22, 2024|Yes - Aug 22, 2024|
|SimpChinese|Yes - May 20, 2024|Yes - Jun 19, 2024|Yes - Jun 20, 2024|
|Slovak|Yes|No|No|
|Spanish|Yes|Yes - Jun 17, 2024|Yes - Jan 5, 2024|