1.12.0
This commit is contained in:
parent
21ddfaae5b
commit
b57e0ed223
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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 "Terminate All Processes" is invoked.</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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", "");
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue