1.3.2
This commit is contained in:
parent
df9be3b684
commit
a6bf997c2e
|
@ -9,10 +9,13 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
||||||
### Added
|
### Added
|
||||||
- added icons to sub tabs in the box options dialog
|
- added icons to sub tabs in the box options dialog
|
||||||
- recovery and message pop-up menu options are not persisting across UI restarts any more
|
- recovery and message pop-up menu options are not persisting across UI restarts any more
|
||||||
|
- added new box color, a white box indicates that its not really a sandbox and is displayed when the user specified OpenFilePath=* or alike
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
- Sandboxie no longer issues message 1301 when forced processes are temporarily disabled
|
- Sandboxie no longer issues message 1301 when forced processes are temporarily disabled
|
||||||
-- the message can be re-enabled with "NotifyForceProcessDisabled=y"
|
-- the message can be re-enabled with "NotifyForceProcessDisabled=y"
|
||||||
|
- reworked the "Open COM" checkbox mechanism in the plus UI
|
||||||
|
-- Now it uses a template and it can also keep COM closed while OpenIpcPath=* is set
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
- fixed compatibility issue with Proxifier [#2163](https://github.com/sandboxie-plus/Sandboxie/issues/2163)
|
- fixed compatibility issue with Proxifier [#2163](https://github.com/sandboxie-plus/Sandboxie/issues/2163)
|
||||||
|
|
|
@ -3477,6 +3477,29 @@ RpcPortBinding=SHELL32.dll,'201ef99a-7fa0-444c-9399-19ba84f12a1a@ncalrpc:',IpcPo
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# COM/RPC Presets
|
||||||
|
#
|
||||||
|
|
||||||
|
[Template_OpenCOM]
|
||||||
|
OpenIpcPath=*\BaseNamedObjects*\__ComCatalogCache__
|
||||||
|
OpenIpcPath=\RPC Control\epmapper
|
||||||
|
OpenIpcPath=\RPC Control\OLE*
|
||||||
|
OpenIpcPath=\RPC Control\LRPC*
|
||||||
|
|
||||||
|
[Template_BoxedCOM]
|
||||||
|
NormalIpcPath=*BaseNamedObjects*\__ComCatalogCache__
|
||||||
|
NormalIpcPath=*BaseNamedObjects*\ComPlusCOMRegTable
|
||||||
|
NormalIpcPath=*BaseNamedObjects*\RotHintTable
|
||||||
|
NormalIpcPath=*BaseNamedObjects*\{A3BD3259-3E4F-428a-84C8-F0463A9D3EB5}
|
||||||
|
NormalIpcPath=*BaseNamedObjects*\{A64C7F33-DA35-459b-96CA-63B51FB0CDB9}
|
||||||
|
NormalIpcPath=\RPC Control\actkernel
|
||||||
|
NormalIpcPath=\RPC Control\epmapper
|
||||||
|
NormalIpcPath=\RPC Control\OLE*
|
||||||
|
NormalIpcPath=\RPC Control\LRPC*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Optional RPC Port Config
|
# Optional RPC Port Config
|
||||||
#
|
#
|
||||||
|
|
|
@ -2288,35 +2288,40 @@ void CSandMan::UpdateSettings(bool bRebuildUI)
|
||||||
|
|
||||||
if (bRebuildUI)
|
if (bRebuildUI)
|
||||||
{
|
{
|
||||||
LoadLanguage();
|
|
||||||
|
|
||||||
StoreState();
|
StoreState();
|
||||||
|
|
||||||
if(m_pRefreshAll) this->removeAction(m_pRefreshAll);
|
RebuildUI();
|
||||||
if(m_pMenuBrowse) this->removeAction(m_pMenuBrowse);
|
|
||||||
if(m_pMenuResetGUI) this->removeAction(m_pMenuResetGUI);
|
|
||||||
|
|
||||||
m_pMainWidget->deleteLater();
|
|
||||||
m_pMainWidget = new QWidget(this);
|
|
||||||
setCentralWidget(m_pMainWidget);
|
|
||||||
|
|
||||||
m_pLabel->deleteLater();
|
|
||||||
|
|
||||||
CreateUI();
|
|
||||||
|
|
||||||
m_pTrayMenu->deleteLater();
|
|
||||||
CreateTrayMenu();
|
|
||||||
|
|
||||||
LoadState(false);
|
|
||||||
|
|
||||||
GetBoxView()->ReloadUserConfig();
|
|
||||||
|
|
||||||
OnStatusChanged();
|
|
||||||
|
|
||||||
if(m_pTrayBoxes) m_pTrayBoxes->setStyle(QStyleFactory::create(m_DefaultStyle));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSandMan::RebuildUI()
|
||||||
|
{
|
||||||
|
LoadLanguage();
|
||||||
|
|
||||||
|
if(m_pRefreshAll) this->removeAction(m_pRefreshAll);
|
||||||
|
if(m_pMenuBrowse) this->removeAction(m_pMenuBrowse);
|
||||||
|
if(m_pMenuResetGUI) this->removeAction(m_pMenuResetGUI);
|
||||||
|
|
||||||
|
m_pMainWidget->deleteLater();
|
||||||
|
m_pMainWidget = new QWidget(this);
|
||||||
|
setCentralWidget(m_pMainWidget);
|
||||||
|
|
||||||
|
m_pLabel->deleteLater();
|
||||||
|
|
||||||
|
CreateUI();
|
||||||
|
|
||||||
|
m_pTrayMenu->deleteLater();
|
||||||
|
CreateTrayMenu();
|
||||||
|
|
||||||
|
LoadState(false);
|
||||||
|
|
||||||
|
GetBoxView()->ReloadUserConfig();
|
||||||
|
|
||||||
|
OnStatusChanged();
|
||||||
|
|
||||||
|
if(m_pTrayBoxes) m_pTrayBoxes->setStyle(QStyleFactory::create(m_DefaultStyle));
|
||||||
|
}
|
||||||
|
|
||||||
void CSandMan::OnResetMsgs()
|
void CSandMan::OnResetMsgs()
|
||||||
{
|
{
|
||||||
auto Ret = QMessageBox("Sandboxie-Plus", tr("Do you also want to reset hidden message boxes (yes), or only all log messages (no)?"),
|
auto Ret = QMessageBox("Sandboxie-Plus", tr("Do you also want to reset hidden message boxes (yes), or only all log messages (no)?"),
|
||||||
|
@ -2344,6 +2349,8 @@ void CSandMan::OnResetMsgs()
|
||||||
theConf->SetValue("Options/WarnTerminate", -1);
|
theConf->SetValue("Options/WarnTerminate", -1);
|
||||||
|
|
||||||
theConf->SetValue("Options/InfoMkLink", -1);
|
theConf->SetValue("Options/InfoMkLink", -1);
|
||||||
|
|
||||||
|
theConf->SetValue("Options/WarnOpenCOM", -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
theAPI->GetUserSettings()->UpdateTextList("SbieCtrl_HideMessage", QStringList(), true);
|
theAPI->GetUserSettings()->UpdateTextList("SbieCtrl_HideMessage", QStringList(), true);
|
||||||
|
@ -2352,8 +2359,6 @@ void CSandMan::OnResetMsgs()
|
||||||
|
|
||||||
void CSandMan::OnResetGUI()
|
void CSandMan::OnResetGUI()
|
||||||
{
|
{
|
||||||
hide();
|
|
||||||
|
|
||||||
theConf->DelValue("ErrorWindow/Window_Geometry");
|
theConf->DelValue("ErrorWindow/Window_Geometry");
|
||||||
theConf->DelValue("MainWindow/Window_Geometry");
|
theConf->DelValue("MainWindow/Window_Geometry");
|
||||||
theConf->DelValue("MainWindow/Window_State");
|
theConf->DelValue("MainWindow/Window_State");
|
||||||
|
@ -2388,9 +2393,7 @@ void CSandMan::OnResetGUI()
|
||||||
// theConf->SetValue("Options/DPIScaling", 1);
|
// theConf->SetValue("Options/DPIScaling", 1);
|
||||||
theConf->SetValue("Options/FontScaling", 100);
|
theConf->SetValue("Options/FontScaling", 100);
|
||||||
|
|
||||||
LoadState();
|
RebuildUI();
|
||||||
|
|
||||||
SafeShow(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSandMan::OnEditIni()
|
void CSandMan::OnEditIni()
|
||||||
|
|
|
@ -148,6 +148,7 @@ public slots:
|
||||||
class CRecoveryWindow* ShowRecovery(const CSandBoxPtr& pBox, bool bFind = true);
|
class CRecoveryWindow* ShowRecovery(const CSandBoxPtr& pBox, bool bFind = true);
|
||||||
|
|
||||||
void UpdateSettings(bool bRebuildUI);
|
void UpdateSettings(bool bRebuildUI);
|
||||||
|
void RebuildUI();
|
||||||
void OnIniReloaded();
|
void OnIniReloaded();
|
||||||
|
|
||||||
void SetupHotKeys();
|
void SetupHotKeys();
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
#include "../MiscHelpers/Common/Common.h"
|
#include "../MiscHelpers/Common/Common.h"
|
||||||
#include "../MiscHelpers/Common/ComboInputDialog.h"
|
#include "../MiscHelpers/Common/ComboInputDialog.h"
|
||||||
#include "../MiscHelpers/Common/SettingsWidgets.h"
|
#include "../MiscHelpers/Common/SettingsWidgets.h"
|
||||||
|
#include "../MiscHelpers/Common/CheckableMessageBox.h"
|
||||||
#include "Helpers/WinAdmin.h"
|
#include "Helpers/WinAdmin.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -304,9 +305,15 @@ void COptionsWindow::AddAccessEntry(EAccessType Type, EAccessMode Mode, QString
|
||||||
pItem->setText(2, GetAccessModeStr(Mode));
|
pItem->setText(2, GetAccessModeStr(Mode));
|
||||||
pItem->setData(2, Qt::UserRole, (int)Mode);
|
pItem->setData(2, Qt::UserRole, (int)Mode);
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////
|
||||||
|
// File and Registry entries auto append a '*' wildcard
|
||||||
|
// when thay don't contain any.
|
||||||
|
// Prepanding '|' disables this behavioure
|
||||||
|
//
|
||||||
|
|
||||||
QString sPath = Path;
|
QString sPath = Path;
|
||||||
if (Type == eFile || Type == eKey) {
|
if (Type == eFile || Type == eKey) {
|
||||||
if (sPath.left(1) != "|" && !sPath.contains("*") && sPath.right(1) != "*")
|
if (!sPath.isEmpty() && sPath.left(1) != "|" && !sPath.contains("*") && sPath.right(1) != "*")
|
||||||
sPath.append("*");
|
sPath.append("*");
|
||||||
}
|
}
|
||||||
pItem->setText(3, sPath);
|
pItem->setText(3, sPath);
|
||||||
|
@ -430,6 +437,21 @@ void COptionsWindow::CloseAccessEdit(QTreeWidgetItem* pItem, bool bSave)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pItem->data(0, Qt::UserRole).toInt() == eIPC && pMode->currentData().toInt() == eOpen
|
||||||
|
&& ((pPath->text() == "*" && pItem->data(3, Qt::UserRole).toString() != "*")
|
||||||
|
|| (pPath->text() == "\\*" && pItem->data(3, Qt::UserRole).toString() != "\\*"))
|
||||||
|
&& !m_BoxTemplates.contains("BoxedCOM"))
|
||||||
|
{
|
||||||
|
if (theConf->GetInt("Options/WarnOpenCOM", -1) == -1) {
|
||||||
|
bool State = false;
|
||||||
|
if (CCheckableMessageBox::question(this, "Sandboxie-Plus", tr("Opening all IPC access, also opens COM access, do you want to restrict COM to the sandbox non the less?")
|
||||||
|
, tr("Don't ask in future"), &State, QDialogButtonBox::Yes | QDialogButtonBox::No, QDialogButtonBox::Yes) == QDialogButtonBox::Yes)
|
||||||
|
SetTemplate("BoxedCOM", true); // Normal overrides Open even without rule specificity :D
|
||||||
|
if (State)
|
||||||
|
theConf->SetValue("Options/WarnOpenCOM", 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pItem->setText(1, (pNot->isChecked() ? "NOT " : "") + pCombo->currentText());
|
pItem->setText(1, (pNot->isChecked() ? "NOT " : "") + pCombo->currentText());
|
||||||
pItem->setData(1, Qt::UserRole, (pNot->isChecked() ? "!" : "") + Program);
|
pItem->setData(1, Qt::UserRole, (pNot->isChecked() ? "!" : "") + Program);
|
||||||
pItem->setText(2, GetAccessModeStr((EAccessMode)pMode->currentData().toInt()));
|
pItem->setText(2, GetAccessModeStr((EAccessMode)pMode->currentData().toInt()));
|
||||||
|
|
|
@ -79,6 +79,7 @@ void COptionsWindow::LoadAdvanced()
|
||||||
ui.chkProtectSystem->setChecked(!m_pBox->GetBool("ExposeBoxedSystem", false));
|
ui.chkProtectSystem->setChecked(!m_pBox->GetBool("ExposeBoxedSystem", false));
|
||||||
ui.chkDropPrivileges->setChecked(m_pBox->GetBool("StripSystemPrivileges", true));
|
ui.chkDropPrivileges->setChecked(m_pBox->GetBool("StripSystemPrivileges", true));
|
||||||
|
|
||||||
|
CheckOpenCOM();
|
||||||
ui.chkComTimeout->setChecked(!m_pBox->GetBool("RpcMgmtSetComTimeout", true));
|
ui.chkComTimeout->setChecked(!m_pBox->GetBool("RpcMgmtSetComTimeout", true));
|
||||||
|
|
||||||
ui.chkNoSecurityIsolation->setChecked(m_pBox->GetBool("NoSecurityIsolation", false));
|
ui.chkNoSecurityIsolation->setChecked(m_pBox->GetBool("NoSecurityIsolation", false));
|
||||||
|
@ -241,7 +242,7 @@ void COptionsWindow::SaveAdvanced()
|
||||||
WriteTextList("OnBoxDelete", DeleteCommand);
|
WriteTextList("OnBoxDelete", DeleteCommand);
|
||||||
//
|
//
|
||||||
|
|
||||||
WriteAdvancedCheck(ui.chkHideOtherBoxes, "HideOtherBoxes");
|
WriteAdvancedCheck(ui.chkHideOtherBoxes, "HideOtherBoxes", "", "n");
|
||||||
|
|
||||||
QStringList Processes;
|
QStringList Processes;
|
||||||
for (int i = 0; i < ui.lstProcesses->count(); i++)
|
for (int i = 0; i < ui.lstProcesses->count(); i++)
|
||||||
|
@ -322,20 +323,20 @@ void COptionsWindow::OnAdvancedChanged()
|
||||||
OnOptChanged();
|
OnOptChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void COptionsWindow::CheckOpenCOM()
|
||||||
|
{
|
||||||
|
bool bComIpcOpen = GetAccessEntry(eIPC, "", eOpen, "\\RPC Control\\epmapper") != NULL || GetAccessEntry(eIPC, "", eOpen, "*") != NULL;
|
||||||
|
if(bComIpcOpen)
|
||||||
|
ui.chkOpenCOM->setChecked(!m_BoxTemplates.contains("BoxedCOM"));
|
||||||
|
else
|
||||||
|
ui.chkOpenCOM->setChecked(m_BoxTemplates.contains("OpenCOM"));
|
||||||
|
}
|
||||||
|
|
||||||
void COptionsWindow::OnOpenCOM()
|
void COptionsWindow::OnOpenCOM()
|
||||||
{
|
{
|
||||||
if (ui.chkOpenCOM->isChecked()) {
|
bool bComIpcOpen = GetAccessEntry(eIPC, "", eOpen, "\\RPC Control\\epmapper") != NULL || GetAccessEntry(eIPC, "", eOpen, "*") != NULL;
|
||||||
SetAccessEntry(eIPC, "", eOpen, "\\RPC Control\\epmapper");
|
SetTemplate("OpenCOM", !bComIpcOpen && ui.chkOpenCOM->isChecked());
|
||||||
SetAccessEntry(eIPC, "", eOpen, "\\RPC Control\\LRPC*");
|
SetTemplate("BoxedCOM", bComIpcOpen && !ui.chkOpenCOM->isChecked());
|
||||||
SetAccessEntry(eIPC, "", eOpen, "\\RPC Control\\OLE*");
|
|
||||||
SetAccessEntry(eIPC, "", eOpen, "*\\BaseNamedObjects*\\__ComCatalogCache__");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
DelAccessEntry(eIPC, "", eOpen, "\\RPC Control\\epmapper");
|
|
||||||
DelAccessEntry(eIPC, "", eOpen, "\\RPC Control\\LRPC*");
|
|
||||||
DelAccessEntry(eIPC, "", eOpen, "\\RPC Control\\OLE*");
|
|
||||||
DelAccessEntry(eIPC, "", eOpen, "*\\BaseNamedObjects*\\__ComCatalogCache__");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void COptionsWindow::OnNoWindowRename()
|
void COptionsWindow::OnNoWindowRename()
|
||||||
|
|
|
@ -778,7 +778,7 @@ void COptionsWindow::UpdateCurrentTab()
|
||||||
}
|
}
|
||||||
else if (m_iCurrentTab == eAdvanced)
|
else if (m_iCurrentTab == eAdvanced)
|
||||||
{
|
{
|
||||||
ui.chkOpenCOM->setChecked(GetAccessEntry(eIPC, "", eOpen, "\\RPC Control\\epmapper") != NULL);
|
CheckOpenCOM();
|
||||||
|
|
||||||
if (GetAccessEntry(eWnd, "", eOpen, "*") != NULL)
|
if (GetAccessEntry(eWnd, "", eOpen, "*") != NULL)
|
||||||
{
|
{
|
||||||
|
|
|
@ -370,6 +370,7 @@ protected:
|
||||||
void UpdateBoxIsolation();
|
void UpdateBoxIsolation();
|
||||||
void ShowTriggersTmpl(bool bUpdate = false);
|
void ShowTriggersTmpl(bool bUpdate = false);
|
||||||
void AddTriggerItem(const QString& Value, ETriggerAction Type, const QString& Template = QString());
|
void AddTriggerItem(const QString& Value, ETriggerAction Type, const QString& Template = QString());
|
||||||
|
void CheckOpenCOM();
|
||||||
//
|
//
|
||||||
|
|
||||||
void CreateDebug();
|
void CreateDebug();
|
||||||
|
|
Loading…
Reference in New Issue