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 "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 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 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 ### Changed
- improved suspend process ahndling [#3375](https://github.com/sandboxie-plus/Sandboxie/issues/3375) - 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; 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) { foreach(const CSandBoxPtr& pBox, m_SandBoxes) {
if (!bNoExceptions && pBox->GetBool("ExcludeFromTerminateAll", false))
continue;
if (!pBox->TerminateAll()) 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) 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 CSandBoxPtr GetBoxByName(const QString &BoxName) const { return m_SandBoxes.value(BoxName.toLower()); }
virtual CBoxedProcessPtr GetProcessById(quint32 ProcessId) const; 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 SB_STATUS SetProcessExemption(quint32 process_id, quint32 action_id, bool NewState);
virtual bool GetProcessExemption(quint32 process_id, quint32 action_id); 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"> <layout class="QGridLayout" name="gridLayout_63">
<item row="0" column="0"> <item row="0" column="0">
<layout class="QGridLayout" name="gridLayout_62"> <layout class="QGridLayout" name="gridLayout_62">
<item row="7" column="1"> <item row="3" 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">
<widget class="QCheckBox" name="chkElevateCreateProcessFix"> <widget class="QCheckBox" name="chkElevateCreateProcessFix">
<property name="text"> <property name="text">
<string>Apply ElevateCreateProcess Workaround (legacy behaviour)</string> <string>Apply ElevateCreateProcess Workaround (legacy behaviour)</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="1"> <item row="6" 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="chkUseSbieWndStation"> <widget class="QCheckBox" name="chkUseSbieWndStation">
<property name="text"> <property name="text">
<string>Emulate sandboxed window station for all processes</string> <string>Emulate sandboxed window station for all processes</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="0"> <item row="1" column="0">
<widget class="QLabel" name="lblCompatibility"> <widget class="QLabel" name="lblCompatibility">
<property name="font"> <property name="font">
<font> <font>
<weight>75</weight>
<bold>true</bold> <bold>true</bold>
<kerning>true</kerning> <kerning>true</kerning>
</font> </font>
@ -3518,14 +3497,28 @@ The process match level has a higher priority than the specificity and describes
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="1"> <item row="7" column="1">
<widget class="QCheckBox" name="chkNestedJobs"> <widget class="QCheckBox" name="chkComTimeout">
<property name="text"> <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> </property>
</widget> </widget>
</item> </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"> <spacer name="verticalSpacer_28">
<property name="orientation"> <property name="orientation">
<enum>Qt::Vertical</enum> <enum>Qt::Vertical</enum>
@ -3538,17 +3531,33 @@ The process match level has a higher priority than the specificity and describes
</property> </property>
</spacer> </spacer>
</item> </item>
<item row="6" column="1"> <item row="8" column="1">
<widget class="QCheckBox" name="chkComTimeout"> <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"> <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> </property>
</widget> </widget>
</item> </item>
<item row="4" column="1"> <item row="0" column="1">
<widget class="QCheckBox" name="chkUseSbieDeskHack"> <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"> <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> </property>
</widget> </widget>
</item> </item>

View File

@ -2577,8 +2577,18 @@ void CSandMan::OnHotKey(size_t id)
switch (id) switch (id)
{ {
case HK_PANIC: case HK_PANIC:
theAPI->TerminateAll(); {
// 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; break;
}
case HK_TOP: case HK_TOP:
if (this->isActiveWindow() && m_bOnTop) if (this->isActiveWindow() && m_bOnTop)

View File

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