diff --git a/Sandboxie/core/dll/guititle.c b/Sandboxie/core/dll/guititle.c index 455b3bd8..1a0b174b 100644 --- a/Sandboxie/core/dll/guititle.c +++ b/Sandboxie/core/dll/guititle.c @@ -95,7 +95,7 @@ _FX BOOLEAN Gui_InitTitle(HMODULE module) // hook functions // - if (! Gui_DisableTitle) { + if (! Gui_DisableTitle||SbieApi_QueryConfBool(NULL,"NoTitle",FALSE)) { SBIEDLL_HOOK_GUI(GetWindowTextW); SBIEDLL_HOOK_GUI(GetWindowTextA); @@ -291,7 +291,6 @@ _FX int Gui_FixTitleW(HWND hWnd, WCHAR *lpWindowTitle, int len) { if (len >= (int)Gui_TitleSuffixW_len * 2 && Gui_ShouldCreateTitle(hWnd)) { - if (wmemcmp(lpWindowTitle, &Gui_TitleSuffixW[1], 3) == 0) { len -= 4; wmemmove(lpWindowTitle, lpWindowTitle + 4, len); @@ -326,7 +325,6 @@ _FX int Gui_FixTitleA(HWND hWnd, UCHAR *lpWindowTitle, int len) { if (len >= (int)Gui_TitleSuffixA_len * 2 && Gui_ShouldCreateTitle(hWnd)) { - if (memcmp(lpWindowTitle, &Gui_TitleSuffixA[1], 3) == 0) { len -= 4; memmove(lpWindowTitle, lpWindowTitle + 4, len); diff --git a/SandboxiePlus/SandMan/Forms/OptionsWindow.ui b/SandboxiePlus/SandMan/Forms/OptionsWindow.ui index 003ea11e..cb253a32 100644 --- a/SandboxiePlus/SandMan/Forms/OptionsWindow.ui +++ b/SandboxiePlus/SandMan/Forms/OptionsWindow.ui @@ -285,144 +285,6 @@ File Options - - - - - 20 - 16777215 - - - - - - - - - - - Encrypt sandbox content - - - - - - - Qt::Horizontal - - - - 410 - 13 - - - - - - - - When <a href="sbie://docs/boxencryption">Box Encryption</a> is enabled the box’s root folder, including its registry hive, is stored in an encrypted disk image, using <a href="https://diskcryptor.org">Disk Cryptor's</a> AES-XTS implementation. - - - true - - - true - - - - - - - Warn when an application opens a harddrive handle - - - - - - - Set Password - - - - - - - Virtualization scheme - - - - - - - - - - Qt::Vertical - - - - 20 - 52 - - - - - - - - - 75 - true - true - - - - Disk/File access - - - - - - - Allow elevated sandboxed applications to read the harddrive - - - - - - - The box structure can only be changed when the sandbox is empty - - - - - - - Partially checked means prevent box removal but not content deletion. - - - Protect this sandbox from deletion or emptying - - - true - - - - - - - Auto delete content when last sandboxed process terminates - - - - - - - <a href="addon://ImDisk">Install ImDisk</a> driver to enable Ram Disk and Disk Image support. - - - @@ -437,7 +299,24 @@ - + + + + The box structure can only be changed when the sandbox is empty + + + + + + + Virtualization scheme + + + + + + + Separate user folders @@ -447,14 +326,62 @@ - + + + + Use volume serial numbers for drives, like: \drive\C~1234-ABCD + + + + Store the sandbox content in a Ram Disk - + + + + Encrypt sandbox content + + + + + + + Set Password + + + + + + + When <a href="sbie://docs/boxencryption">Box Encryption</a> is enabled the box’s root folder, including its registry hive, is stored in an encrypted disk image, using <a href="https://diskcryptor.org">Disk Cryptor's</a> AES-XTS implementation. + + + true + + + true + + + + + + + <a href="addon://ImDisk">Install ImDisk</a> driver to enable Ram Disk and Disk Image support. + + + + + + + Force protection on mount + + + + @@ -468,13 +395,93 @@ - - + + - Use volume serial numbers for drives, like: \drive\C~1234-ABCD + Auto delete content when last sandboxed process terminates + + + + Partially checked means prevent box removal but not content deletion. + + + Protect this sandbox from deletion or emptying + + + true + + + + + + + + 75 + true + true + + + + Disk/File access + + + + + + + + 20 + 16777215 + + + + + + + + + + + Allow elevated sandboxed applications to read the harddrive + + + + + + + Warn when an application opens a harddrive handle + + + + + + + Qt::Vertical + + + + 20 + 52 + + + + + + + + Qt::Horizontal + + + + 410 + 13 + + + + @@ -4585,8 +4592,8 @@ instead of "*". 0 0 - 98 - 28 + 92 + 16 diff --git a/SandboxiePlus/SandMan/SandMan.cpp b/SandboxiePlus/SandMan/SandMan.cpp index 2c11443c..3ad2037c 100644 --- a/SandboxiePlus/SandMan/SandMan.cpp +++ b/SandboxiePlus/SandMan/SandMan.cpp @@ -1716,6 +1716,7 @@ SB_STATUS CSandMan::ImBoxMount(const CSandBoxPtr& pBox, bool bAutoUnmount) } CBoxImageWindow window(CBoxImageWindow::eMount, this); + window.SetForce(pBox->GetBool("ForceProtectionOnMount", false)); window.SetAutoUnMount(bAutoUnmount); if (theGUI->SafeExec(&window) != 1) return SB_ERR(SB_Canceled); diff --git a/SandboxiePlus/SandMan/Windows/BoxImageWindow.cpp b/SandboxiePlus/SandMan/Windows/BoxImageWindow.cpp index 05b3a6d4..3d16efc1 100644 --- a/SandboxiePlus/SandMan/Windows/BoxImageWindow.cpp +++ b/SandboxiePlus/SandMan/Windows/BoxImageWindow.cpp @@ -97,10 +97,17 @@ CBoxImageWindow::CBoxImageWindow(EAction Action, QWidget *parent) ui.chkProtect->setVisible(false); ui.chkAutoLock->setVisible(false); } - + + + //restoreGeometry(theConf->GetBlob("BoxImageWindow/Window_Geometry")); } - +void CBoxImageWindow::SetForce(bool force) { + ui.chkProtect->setEnabled(!force); + ui.chkProtect->setChecked(true); + ui.chkAutoLock->setChecked(true); + ui.chkAutoLock->setEnabled(!force); +} CBoxImageWindow::~CBoxImageWindow() { //theConf->SetBlob("BoxImageWindow/Window_Geometry", saveGeometry()); diff --git a/SandboxiePlus/SandMan/Windows/BoxImageWindow.h b/SandboxiePlus/SandMan/Windows/BoxImageWindow.h index 2531e226..ae061f0e 100644 --- a/SandboxiePlus/SandMan/Windows/BoxImageWindow.h +++ b/SandboxiePlus/SandMan/Windows/BoxImageWindow.h @@ -22,6 +22,7 @@ public: QString GetPassword() const { return m_Password; } QString GetNewPassword() const { return m_NewPassword; } + void SetForce(bool force); void SetImageSize(quint64 uSize) const { return ui.txtImageSize->setText(QString::number(uSize / 1024)); } quint64 GetImageSize() const { return ui.txtImageSize->text().toULongLong() * 1024; } bool UseProtection() const { return ui.chkProtect->isChecked(); } diff --git a/SandboxiePlus/SandMan/Windows/OptionsGeneral.cpp b/SandboxiePlus/SandMan/Windows/OptionsGeneral.cpp index 0544d3b3..e0042e34 100644 --- a/SandboxiePlus/SandMan/Windows/OptionsGeneral.cpp +++ b/SandboxiePlus/SandMan/Windows/OptionsGeneral.cpp @@ -190,6 +190,7 @@ void COptionsWindow::CreateGeneral() connect(ui.chkRamBox, SIGNAL(clicked(bool)), this, SLOT(OnDiskChanged())); connect(ui.chkEncrypt, SIGNAL(clicked(bool)), this, SLOT(OnDiskChanged())); + connect(ui.chkForceProtection, SIGNAL(clicked(bool)), this, SLOT(OnGeneralChanged())); connect(ui.btnPassword, SIGNAL(clicked(bool)), this, SLOT(OnSetPassword())); bool bImDiskReady = theGUI->IsImDiskReady(); @@ -330,8 +331,11 @@ void COptionsWindow::LoadGeneral() ui.chkRamBox->setChecked(m_pBox->GetBool("UseRamDisk", false)); ui.chkEncrypt->setChecked(m_pBox->GetBool("UseFileImage", false)); - if (ui.chkRamBox->isEnabled()) + ui.chkForceProtection->setChecked(m_pBox->GetBool("ForceProtectionOnMount", false)); + if (ui.chkRamBox->isEnabled()) { ui.chkEncrypt->setEnabled(!ui.chkRamBox->isChecked()); + ui.chkForceProtection->setEnabled(!ui.chkRamBox->isChecked()); + } CSandBoxPlus* pBoxEx = qobject_cast(m_pBox.data()); if (pBoxEx && QFile::exists(pBoxEx->GetBoxImagePath())) { @@ -422,6 +426,7 @@ void COptionsWindow::SaveGeneral() WriteAdvancedCheck(ui.chkCloseClipBoard, "OpenClipboard", "n", ""); //WriteAdvancedCheck(ui.chkBlockCapture, "IsBlockCapture", "y", "n"); WriteAdvancedCheck(ui.chkProtectPower, "BlockInterferePower", "y", "n"); + WriteAdvancedCheck(ui.chkForceProtection, "ForceProtectionOnMount", "y", "n"); WriteAdvancedCheck(ui.chkVmReadNotify, "NotifyProcessAccessDenied", "y", ""); //WriteAdvancedCheck(ui.chkOpenSmartCard, "OpenSmartCard", "", "n"); //WriteAdvancedCheck(ui.chkOpenBluetooth, "OpenBluetooth", "y", ""); @@ -1127,11 +1132,13 @@ void COptionsWindow::OnDiskChanged() ui.chkEncrypt->setEnabled(false); ui.chkEncrypt->setChecked(false); ui.btnPassword->setEnabled(false); + ui.chkForceProtection->setEnabled(false); } else { ui.chkEncrypt->setEnabled(true); CSandBoxPlus* pBoxEx = qobject_cast(m_pBox.data()); ui.btnPassword->setEnabled(ui.chkEncrypt->isChecked() && pBoxEx && pBoxEx->GetMountRoot().isEmpty()); + ui.chkForceProtection->setEnabled(ui.chkEncrypt->isChecked()); } OnGeneralChanged();