This commit is contained in:
DavidXanatos 2023-10-22 13:33:08 +02:00
parent 21ddfaae5b
commit b57e0ed223
6 changed files with 73 additions and 41 deletions

View File

@ -16,6 +16,8 @@ This project adheres to [Semantic Versioning](http://semver.org/).
- added "get_cert SBIEX-XXXXX-XXXXX-XXXXX-XXXXX" command to UpdUtil.exe allowing to get a cert by serial using command line
- added mechanism to revoke leaked or refunded certificates
- added new global hot key to bring sandman in fron as top most ALT+Break [#3320](https://github.com/sandboxie-plus/Sandboxie/issues/3320)
- added Exclude specific boxes from 'Terminate all processes' [#3108](https://github.com/sandboxie-plus/Sandboxie/issues/3108)
- Note: press the panic button hot key 3 times with less then 1 second between clicks to Terminate All with NO exceptions
### Changed
- improved suspend process ahndling [#3375](https://github.com/sandboxie-plus/Sandboxie/issues/3375)

View File

@ -1636,14 +1636,19 @@ SB_STATUS CSbieAPI::TerminateAll(const QString& BoxName)
return Status;
}
SB_STATUS CSbieAPI::TerminateAll()
SB_STATUS CSbieAPI::TerminateAll(bool bNoExceptions)
{
SB_STATUS Status = SB_OK;
#ifdef _DEBUG
qDebug() << "TerminateAll" << bNoExceptions;
#endif
bool bFailed = false;
foreach(const CSandBoxPtr& pBox, m_SandBoxes) {
if (!bNoExceptions && pBox->GetBool("ExcludeFromTerminateAll", false))
continue;
if (!pBox->TerminateAll())
Status = SB_ERR(SB_FailedKillAll);
bFailed = true;
}
return Status;
return bFailed ? SB_ERR(SB_FailedKillAll) : SB_OK;
}
SB_STATUS CSbieAPI::Terminate(quint32 ProcessId)

View File

@ -73,7 +73,7 @@ public:
virtual CSandBoxPtr GetBoxByName(const QString &BoxName) const { return m_SandBoxes.value(BoxName.toLower()); }
virtual CBoxedProcessPtr GetProcessById(quint32 ProcessId) const;
virtual SB_STATUS TerminateAll();
virtual SB_STATUS TerminateAll(bool bNoExceptions = false);
virtual SB_STATUS SetProcessExemption(quint32 process_id, quint32 action_id, bool NewState);
virtual bool GetProcessExemption(quint32 process_id, quint32 action_id);

View File

@ -3470,45 +3470,24 @@ The process match level has a higher priority than the specificity and describes
<layout class="QGridLayout" name="gridLayout_63">
<item row="0" column="0">
<layout class="QGridLayout" name="gridLayout_62">
<item row="7" column="1">
<spacer name="horizontalSpacer_12">
<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="2" column="1">
<item row="3" column="1">
<widget class="QCheckBox" name="chkElevateCreateProcessFix">
<property name="text">
<string>Apply ElevateCreateProcess Workaround (legacy behaviour)</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QCheckBox" name="chkPreferExternalManifest">
<property name="text">
<string>Force usage of custom dummy Manifest files (legacy behaviour)</string>
</property>
</widget>
</item>
<item row="5" column="1">
<item row="6" column="1">
<widget class="QCheckBox" name="chkUseSbieWndStation">
<property name="text">
<string>Emulate sandboxed window station for all processes</string>
</property>
</widget>
</item>
<item row="0" column="0">
<item row="1" column="0">
<widget class="QLabel" name="lblCompatibility">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
<kerning>true</kerning>
</font>
@ -3518,14 +3497,28 @@ The process match level has a higher priority than the specificity and describes
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QCheckBox" name="chkNestedJobs">
<item row="7" column="1">
<widget class="QCheckBox" name="chkComTimeout">
<property name="text">
<string>Allow use of nested job objects (works on Windows 8 and later)</string>
<string>Disable the use of RpcMgmtSetComTimeout by default (this may resolve compatibility issues)</string>
</property>
</widget>
</item>
<item row="7" column="0">
<item row="2" column="1">
<widget class="QCheckBox" name="chkPreferExternalManifest">
<property name="text">
<string>Force usage of custom dummy Manifest files (legacy behaviour)</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QCheckBox" name="chkUseSbieDeskHack">
<property name="text">
<string>Use desktop object workaround for all processes</string>
</property>
</widget>
</item>
<item row="8" column="0">
<spacer name="verticalSpacer_28">
<property name="orientation">
<enum>Qt::Vertical</enum>
@ -3538,17 +3531,33 @@ The process match level has a higher priority than the specificity and describes
</property>
</spacer>
</item>
<item row="6" column="1">
<widget class="QCheckBox" name="chkComTimeout">
<item row="8" column="1">
<spacer name="horizontalSpacer_12">
<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="4" column="1">
<widget class="QCheckBox" name="chkNestedJobs">
<property name="text">
<string>Disable the use of RpcMgmtSetComTimeout by default (this may resolve compatibility issues)</string>
<string>Allow use of nested job objects (works on Windows 8 and later)</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QCheckBox" name="chkUseSbieDeskHack">
<item row="0" column="1">
<widget class="QCheckBox" name="chkNoPanic">
<property name="toolTip">
<string>When the global hotkey is pressed 3 times in short succession this exception will be ignored.</string>
</property>
<property name="text">
<string>Use desktop object workaround for all processes</string>
<string>Exclude this sandbox from being terminated when &quot;Terminate All Processes&quot; is invoked.</string>
</property>
</widget>
</item>

View File

@ -2576,9 +2576,19 @@ void CSandMan::OnHotKey(size_t id)
{
switch (id)
{
case HK_PANIC:
theAPI->TerminateAll();
case HK_PANIC:
{
// terminate with no exceptions when clicked 3 times
static quint64 LastClickTick = 0;
static int LastClickCount = 0;
if (GetCurTick() - LastClickTick > 1000)
LastClickCount = 0;
LastClickCount++;
if(LastClickCount != 2) // skip second click as it may take more than a second
theAPI->TerminateAll(LastClickCount >= 3);
LastClickTick = GetCurTick();
break;
}
case HK_TOP:
if (this->isActiveWindow() && m_bOnTop)

View File

@ -11,6 +11,8 @@
void COptionsWindow::CreateAdvanced()
{
connect(ui.chkNoPanic, SIGNAL(clicked(bool)), this, SLOT(OnAdvancedChanged()));
connect(ui.chkPreferExternalManifest, SIGNAL(clicked(bool)), this, SLOT(OnAdvancedChanged()));
connect(ui.chkElevateCreateProcessFix, SIGNAL(clicked(bool)), this, SLOT(OnAdvancedChanged()));
connect(ui.chkNoWindowRename, SIGNAL(clicked(bool)), this, SLOT(OnNoWindowRename()));
@ -115,6 +117,8 @@ void COptionsWindow::CreateAdvanced()
void COptionsWindow::LoadAdvanced()
{
ui.chkNoPanic->setChecked(m_pBox->GetBool("ExcludeFromTerminateAll", false));
ui.chkPreferExternalManifest->setChecked(m_pBox->GetBool("PreferExternalManifest", false));
ui.chkElevateCreateProcessFix->setChecked(m_pBox->GetBool("ApplyElevateCreateProcessFix", false));
@ -309,6 +313,8 @@ void COptionsWindow::ShowTriggersTmpl(bool bUpdate)
void COptionsWindow::SaveAdvanced()
{
WriteAdvancedCheck(ui.chkNoPanic, "ExcludeFromTerminateAll", "y", "");
WriteAdvancedCheck(ui.chkPreferExternalManifest, "PreferExternalManifest", "y", "");
WriteAdvancedCheck(ui.chkElevateCreateProcessFix, "ApplyElevateCreateProcessFix", "y", "");