This commit is contained in:
DavidXanatos 2022-11-29 18:26:51 +01:00
parent b84b5c5aa2
commit 213d9fbbb9
5 changed files with 639 additions and 454 deletions

View File

@ -7,15 +7,19 @@ This project adheres to [Semantic Versioning](http://semver.org/).
## [1.6.0a / 5.61.0] - 2022-??-??
#changed
### Added
- added global option to add run menu entries to all boxes
### Changed
- reorganized cmd entried [#2451](https://github.com/sandboxie-plus/Sandboxie/issues/2451)
#fixed
### Fixed
- fixed issue with support setting drop down menu multiplying [2502#](https://github.com/sandboxie-plus/Sandboxie/pull/2502) (okrc)
- Add translations folder to deprecated [#2500](https://github.com/sandboxie-plus/Sandboxie/pull/2500) (lufog)
- fixed issue with boolean settings which can also be set per process [#2495](https://github.com/sandboxie-plus/Sandboxie/issues/2495)
## [1.6.0 / 5.61.0] - 2022-11-26
### Added

View File

@ -45,7 +45,7 @@
<enum>QTabWidget::North</enum>
</property>
<property name="currentIndex">
<number>8</number>
<number>0</number>
</property>
<widget class="QWidget" name="tabGeneral">
<attribute name="title">
@ -439,6 +439,16 @@
<string>Interface Config</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_17">
<item row="1" column="0">
<widget class="QTabWidget" name="tabsGUI">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="tabUI">
<attribute name="title">
<string>User Interface</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_11">
<item row="0" column="0">
<layout class="QGridLayout" name="gridLayout_15">
<item row="10" column="0">
@ -619,30 +629,115 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="tabRun">
<attribute name="title">
<string>Run Menu</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_22">
<item row="1" column="1">
<widget class="QToolButton" name="btnAddCmd">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>23</height>
</size>
</property>
<property name="text">
<string>Add program</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
<string>You can configure custom entries for all sandboxes run menus.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="2" column="1">
<spacer name="verticalSpacer_15">
<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="3" column="1">
<widget class="QToolButton" name="btnDelCmd">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>23</height>
</size>
</property>
<property name="text">
<string>Remove</string>
</property>
</widget>
</item>
<item row="1" column="0" rowspan="3">
<widget class="QTreeWidget" name="treeRun">
<property name="sortingEnabled">
<bool>true</bool>
</property>
<column>
<property name="text">
<string>Name</string>
</property>
</column>
<column>
<property name="text">
<string>Command Line</string>
</property>
</column>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="tabAdvanced">
<attribute name="title">
<string>Advanced Config</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_6">
<item row="1" column="0">
<layout class="QGridLayout" name="gridLayout_5"/>
</item>
<item row="0" column="0">
<layout class="QGridLayout" name="gridLayout_5">
<item row="4" column="2" colspan="4">
<widget class="QLineEdit" name="ipcRoot"/>
</item>
<item row="2" column="2">
<widget class="QCheckBox" name="chkSeparateUserFolders">
<property name="text">
<string>Separate user folders</string>
<widget class="QTabWidget" name="tabsAdvanced">
<property name="currentIndex">
<number>0</number>
</property>
</widget>
</item>
<item row="8" column="1" colspan="5">
<widget class="QCheckBox" name="chkWin32k">
<property name="text">
<string>Hook selected Win32k system calls to enable GPU acceleration (experimental)</string>
</property>
</widget>
</item>
<widget class="QWidget" name="tabSandbox">
<attribute name="title">
<string>Sandbox Config</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_20">
<item row="0" column="0">
<layout class="QGridLayout" name="gridLayout_18">
<item row="2" column="5">
<widget class="QCheckBox" name="chkAutoRoot">
<property name="text">
@ -650,42 +745,10 @@
</property>
</widget>
</item>
<item row="3" column="2" colspan="4">
<widget class="QLineEdit" name="regRoot"/>
</item>
<item row="10" column="3">
<spacer name="horizontalSpacer">
<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="10" column="1">
<spacer name="horizontalSpacer_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="2" colspan="4">
<widget class="QLineEdit" name="fileRoot"/>
</item>
<item row="3" column="0" colspan="2">
<widget class="QLabel" name="label_16">
<item row="4" column="0" colspan="2">
<widget class="QLabel" name="label_17">
<property name="text">
<string>Sandbox &lt;a href=&quot;sbie://docs/keyrootpath&quot;&gt;registry root&lt;/a&gt;: </string>
<string>Sandbox &lt;a href=&quot;sbie://docs/ipcrootpath&quot;&gt;ipc root&lt;/a&gt;: </string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
@ -695,19 +758,6 @@
</property>
</widget>
</item>
<item row="5" column="0" colspan="2">
<widget class="QLabel" name="lblBoxFeatures">
<property name="font">
<font>
<bold>true</bold>
<kerning>true</kerning>
</font>
</property>
<property name="text">
<string>Sandboxing features</string>
</property>
</widget>
</item>
<item row="1" column="6">
<widget class="QPushButton" name="btnBrowse">
<property name="maximumSize">
@ -721,16 +771,13 @@
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="lblBoxRoot">
<property name="font">
<font>
<bold>true</bold>
<kerning>true</kerning>
</font>
</property>
<item row="1" column="2" colspan="4">
<widget class="QLineEdit" name="fileRoot"/>
</item>
<item row="6" column="1" colspan="5">
<widget class="QCheckBox" name="chkWFP">
<property name="text">
<string>Sandbox default</string>
<string>Use Windows Filtering Platform to restrict network access</string>
</property>
</widget>
</item>
@ -747,19 +794,18 @@
</property>
</widget>
</item>
<item row="7" column="1" colspan="5">
<widget class="QCheckBox" name="chkObjCb">
<property name="text">
<string>Activate Kernel Mode Object Filtering</string>
<item row="10" column="3">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="6" column="1" colspan="5">
<widget class="QCheckBox" name="chkWFP">
<property name="text">
<string>Use Windows Filtering Platform to restrict network access</string>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</widget>
</spacer>
</item>
<item row="10" column="2">
<spacer name="verticalSpacer_2">
@ -774,6 +820,92 @@
</property>
</spacer>
</item>
<item row="9" column="1" colspan="5">
<widget class="QCheckBox" name="chkSbieLogon">
<property name="text">
<string>Use a Sandboxie login instead of an anonymous token (experimental)</string>
</property>
</widget>
</item>
<item row="10" column="1">
<spacer name="horizontalSpacer_4">
<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="0" column="0">
<widget class="QLabel" name="lblBoxRoot">
<property name="font">
<font>
<bold>true</bold>
<kerning>true</kerning>
</font>
</property>
<property name="text">
<string>Sandbox default</string>
</property>
</widget>
</item>
<item row="3" column="2" colspan="4">
<widget class="QLineEdit" name="regRoot"/>
</item>
<item row="3" column="0" colspan="2">
<widget class="QLabel" name="label_16">
<property name="text">
<string>Sandbox &lt;a href=&quot;sbie://docs/keyrootpath&quot;&gt;registry root&lt;/a&gt;: </string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget>
</item>
<item row="8" column="1" colspan="5">
<widget class="QCheckBox" name="chkWin32k">
<property name="text">
<string>Hook selected Win32k system calls to enable GPU acceleration (experimental)</string>
</property>
</widget>
</item>
<item row="7" column="1" colspan="5">
<widget class="QCheckBox" name="chkObjCb">
<property name="text">
<string>Activate Kernel Mode Object Filtering</string>
</property>
</widget>
</item>
<item row="4" column="2" colspan="4">
<widget class="QLineEdit" name="ipcRoot"/>
</item>
<item row="2" column="2">
<widget class="QCheckBox" name="chkSeparateUserFolders">
<property name="text">
<string>Separate user folders</string>
</property>
</widget>
</item>
<item row="5" column="0" colspan="2">
<widget class="QLabel" name="lblBoxFeatures">
<property name="font">
<font>
<bold>true</bold>
<kerning>true</kerning>
</font>
</property>
<property name="text">
<string>Sandboxing features</string>
</property>
</widget>
</item>
<item row="10" column="4">
<spacer name="horizontalSpacer_5">
<property name="orientation">
@ -787,27 +919,83 @@
</property>
</spacer>
</item>
<item row="4" column="0" colspan="2">
<widget class="QLabel" name="label_17">
<property name="text">
<string>Sandbox &lt;a href=&quot;sbie://docs/ipcrootpath&quot;&gt;ipc root&lt;/a&gt;: </string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget>
</item>
<item row="9" column="1" colspan="5">
<widget class="QCheckBox" name="chkSbieLogon">
<property name="text">
<string>Use a Sandboxie login instead of an anonymous token (experimental)</string>
</property>
</widget>
</layout>
</item>
</layout>
</widget>
<widget class="QWidget" name="tabLock">
<attribute name="title">
<string>Config Protection</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_21">
<item row="0" column="0">
<layout class="QGridLayout" name="gridLayout_19">
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="lblProtection">
<property name="font">
<font>
<bold>true</bold>
<kerning>true</kerning>
</font>
</property>
<property name="text">
<string>Config protection</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QCheckBox" name="chkClearPass">
<property name="text">
<string>Clear password when main window becomes hidden</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QCheckBox" name="chkAdminOnly">
<property name="text">
<string>Only Administrator user accounts can make changes</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QCheckBox" name="chkAdminOnlyFP">
<property name="text">
<string>Only Administrator user accounts can use Pause Forcing Programs command</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QCheckBox" name="chkPassRequired">
<property name="text">
<string>Password must be entered in order to make changes</string>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QPushButton" name="btnSetPassword">
<property name="text">
<string>Change Password</string>
</property>
</widget>
</item>
<item row="5" column="1">
<spacer name="verticalSpacer_7">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
@ -901,78 +1089,6 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="tabLock">
<attribute name="title">
<string>Config Protection</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_12">
<item row="0" column="0">
<layout class="QGridLayout" name="gridLayout_11">
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="lblProtection">
<property name="font">
<font>
<bold>true</bold>
<kerning>true</kerning>
</font>
</property>
<property name="text">
<string>Config protection</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QCheckBox" name="chkClearPass">
<property name="text">
<string>Clear password when main window becomes hidden</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QCheckBox" name="chkAdminOnly">
<property name="text">
<string>Only Administrator user accounts can make changes</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QCheckBox" name="chkAdminOnlyFP">
<property name="text">
<string>Only Administrator user accounts can use Pause Forcing Programs command</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QCheckBox" name="chkPassRequired">
<property name="text">
<string>Password must be entered in order to make changes</string>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QPushButton" name="btnSetPassword">
<property name="text">
<string>Change Password</string>
</property>
</widget>
</item>
<item row="5" column="1">
<spacer name="verticalSpacer_7">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QWidget" name="tabCompat">
<attribute name="title">
<string>Compatibility</string>

View File

@ -154,7 +154,7 @@ void COptionsWindow::CreateGeneral()
connect(ui.chkRawDiskNotify, SIGNAL(clicked(bool)), this, SLOT(OnGeneralChanged()));
connect(ui.btnAddCmd, SIGNAL(clicked(bool)), this, SLOT(OnAddCommand()));
QMenu* pRunBtnMenu = new QMenu(ui.btnAddFile);
QMenu* pRunBtnMenu = new QMenu(ui.btnAddCmd);
pRunBtnMenu->addAction(tr("Browse for Program"), this, SLOT(OnBrowsePath()));
ui.btnAddCmd->setPopupMode(QToolButton::MenuButtonPopup);
ui.btnAddCmd->setMenu(pRunBtnMenu);

View File

@ -141,7 +141,7 @@ CSettingsWindow::CSettingsWindow(QWidget* parent)
ui.tabs->setTabIcon(0, CSandMan::GetIcon("Config"));
ui.tabs->setTabIcon(1, CSandMan::GetIcon("Shell"));
ui.tabs->setTabIcon(2, CSandMan::GetIcon("GUI"));
ui.tabs->setTabIcon(2, CSandMan::GetIcon("Design"));
ui.tabs->setTabIcon(3, CSandMan::GetIcon("Advanced"));
ui.tabs->setTabIcon(4, CSandMan::GetIcon("Alarm"));
ui.tabs->setTabIcon(5, CSandMan::GetIcon("Lock"));
@ -149,6 +149,12 @@ CSettingsWindow::CSettingsWindow(QWidget* parent)
ui.tabs->setTabIcon(7, CSandMan::GetIcon("EditIni"));
ui.tabs->setTabIcon(8, CSandMan::GetIcon("Support"));
ui.tabsGUI->setTabIcon(0, CSandMan::GetIcon("Design"));
ui.tabsGUI->setTabIcon(1, CSandMan::GetIcon("Run"));
ui.tabsAdvanced->setTabIcon(0, CSandMan::GetIcon("Options"));
ui.tabsAdvanced->setTabIcon(1, CSandMan::GetIcon("Lock"));
int size = 16.0;
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
size *= (QApplication::desktop()->logicalDpiX() / 96.0); // todo Qt6
@ -170,23 +176,7 @@ CSettingsWindow::CSettingsWindow(QWidget* parent)
AddIconToLabel(ui.lblUpdates, CSandMan::GetIcon("Update").pixmap(size,size));
int iViewMode = theConf->GetInt("Options/ViewMode", 1);
int iOptionLayout = theConf->GetInt("Options/NewConfigLayout", 2);
if (iOptionLayout == 2)
iOptionLayout = 1; // iViewMode != 2 ? 1 : 0;
// re structure the UI a bit
if (iOptionLayout == 1)
{
QWidget* pWidget = new QWidget(this);
QGridLayout* pLayout = new QGridLayout(pWidget);
QTabWidget* pTabs = new QTabWidget();
pLayout->addWidget(pTabs, 0, 0);
ui.tabs->insertTab(3, pWidget, CSandMan::GetIcon("Advanced"), tr("Advanced Config"));
pTabs->addTab(ui.tabAdvanced, CSandMan::GetIcon("Options"), tr("Sandbox Config"));
pTabs->addTab(ui.tabLock, CSandMan::GetIcon("Lock"), tr("Config Protection"));
}
/*if (iViewMode == 0)
{
@ -282,6 +272,16 @@ CSettingsWindow::CSettingsWindow(QWidget* parent)
connect(ui.cmbTrayBoxes, SIGNAL(currentIndexChanged(int)), this, SLOT(OnChange()));
connect(ui.chkCompactTray, SIGNAL(stateChanged(int)), this, SLOT(OnChangeGUI()));
connect(ui.btnAddCmd, SIGNAL(clicked(bool)), this, SLOT(OnAddCommand()));
QMenu* pRunBtnMenu = new QMenu(ui.btnAddCmd);
pRunBtnMenu->addAction(tr("Browse for Program"), this, SLOT(OnBrowsePath()));
ui.btnAddCmd->setPopupMode(QToolButton::MenuButtonPopup);
ui.btnAddCmd->setMenu(pRunBtnMenu);
connect(ui.btnDelCmd, SIGNAL(clicked(bool)), this, SLOT(OnDelCommand()));
connect(ui.treeRun, SIGNAL(itemChanged(QTreeWidgetItem *, int)), this, SLOT(OnRunChanged()));
m_FeaturesChanged = false;
connect(ui.chkWFP, SIGNAL(stateChanged(int)), this, SLOT(OnFeaturesChanged()));
connect(ui.chkObjCb, SIGNAL(stateChanged(int)), this, SLOT(OnFeaturesChanged()));
@ -405,7 +405,7 @@ void CSettingsWindow::showTab(int Tab, bool bExclusive)
case eOptions: pWidget = ui.tabGeneral; break;
case eShell: pWidget = ui.tabShell; break;
case eGuiConfig: pWidget = ui.tabGUI; break;
case eAdvanced: pWidget = ui.tabAdvanced; break;
case eAdvanced: pWidget = ui.tabSandbox; break;
case eProgCtrl: pWidget = ui.tabAlerts; break;
case eConfigLock: pWidget = ui.tabLock; break;
case eSoftCompat: pWidget = ui.tabCompat; break;
@ -458,6 +458,50 @@ bool CSettingsWindow::eventFilter(QObject *source, QEvent *event)
return QDialog::eventFilter(source, event);
}
void CSettingsWindow::OnBrowsePath()
{
QString Value = QFileDialog::getOpenFileName(this, tr("Select Program"), "", tr("Executables (*.exe *.cmd)")).replace("/", "\\");
if (Value.isEmpty())
return;
QString Name = QInputDialog::getText(this, "Sandboxie-Plus", tr("Please enter a menu title"), QLineEdit::Normal);
if (Name.isEmpty())
return;
AddRunItem(Name, Value);
}
void CSettingsWindow::OnAddCommand()
{
QString Value = QInputDialog::getText(this, "Sandboxie-Plus", tr("Please enter a command"), QLineEdit::Normal);
if (Value.isEmpty())
return;
QString Name = QInputDialog::getText(this, "Sandboxie-Plus", tr("Please enter a menu title"), QLineEdit::Normal);
if (Name.isEmpty())
return;
AddRunItem(Name, Value);
}
void CSettingsWindow::AddRunItem(const QString& Name, const QString& Command)
{
QTreeWidgetItem* pItem = new QTreeWidgetItem();
pItem->setText(0, Name);
pItem->setText(1, Command);
pItem->setFlags(pItem->flags() | Qt::ItemIsEditable);
ui.treeRun->addTopLevelItem(pItem);
}
void CSettingsWindow::OnDelCommand()
{
QTreeWidgetItem* pItem = ui.treeRun->currentItem();
if (!pItem)
return;
delete pItem;
}
Qt::CheckState CSettingsWindow__IsContextMenu()
{
//QSettings Package("HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\PackagedCom\\Package", QSettings::NativeFormat);
@ -582,6 +626,14 @@ void CSettingsWindow::LoadSettings()
if (theAPI->IsConnected())
{
ui.treeRun->clear();
foreach(const QString& Value, theAPI->GetGlobalSettings()->GetTextList("RunCommand", false))
{
StrPair NameCmd = Split2(Value, "|");
QTreeWidgetItem* pItem = new QTreeWidgetItem();
AddRunItem(NameCmd.first, NameCmd.second);
}
QString FileRootPath_Default = "\\??\\%SystemDrive%\\Sandbox\\%USER%\\%SANDBOX%";
QString KeyRootPath_Default = "\\REGISTRY\\USER\\Sandbox_%USER%_%SANDBOX%";
QString IpcRootPath_Default = "\\Sandbox\\%USER%\\%SANDBOX%\\Session_%SESSION%";
@ -883,6 +935,13 @@ void CSettingsWindow::SaveSettings()
{
try
{
QStringList RunCommands;
for (int i = 0; i < ui.treeRun->topLevelItemCount(); i++) {
QTreeWidgetItem* pItem = ui.treeRun->topLevelItem(i);
RunCommands.append(pItem->text(0) + "|" + pItem->text(1));
}
WriteTextList("RunCommand", RunCommands);
WriteText("FileRootPath", ui.fileRoot->text()); //ui.fileRoot->setText("\\??\\%SystemDrive%\\Sandbox\\%USER%\\%SANDBOX%");
WriteAdvancedCheck(ui.chkSeparateUserFolders, "SeparateUserFolders", "", "n");
WriteText("KeyRootPath", ui.regRoot->text()); //ui.regRoot->setText("\\REGISTRY\\USER\\Sandbox_%USER%_%SANDBOX%");

View File

@ -86,6 +86,10 @@ private slots:
void OnTab();
void OnBrowsePath();
void OnAddCommand();
void OnDelCommand();
void OnChangeGUI() { m_bRebuildUI = true; }
void OnFeaturesChanged() { m_FeaturesChanged = true; }
@ -126,6 +130,8 @@ protected:
void OnTab(QWidget* pTab);
void AddRunItem(const QString& Name, const QString& Command);
void AddWarnEntry(const QString& Name, int type);
void LoadSettings();