1.2.6
This commit is contained in:
parent
1a0cf442c1
commit
28ae06c8d5
|
@ -5,14 +5,18 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|||
|
||||
|
||||
|
||||
## [1.2.5b / 5.57.5] - 2022-07-22
|
||||
|
||||
|
||||
## [1.2.6 / 5.57.6] - 2022-07-??
|
||||
|
||||
### Changed
|
||||
- improved a few icons
|
||||
- the access view list now adds in display the tailing * to file and key paths the same way the driver does [2039](https://github.com/sandboxie-plus/Sandboxie/issues/2039)
|
||||
- reworked saving of global options
|
||||
|
||||
### Fixed
|
||||
- fixed issue with delete all button [#2043](https://github.com/sandboxie-plus/Sandboxie/issues/2043)
|
||||
- fixed issue with box prefs [#2046](https://github.com/sandboxie-plus/Sandboxie/issues/2046)
|
||||
- fixed issue with Delete V2 registry
|
||||
|
||||
|
||||
|
||||
|
@ -26,6 +30,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|||
- fixed certificate validation issue
|
||||
|
||||
|
||||
|
||||
## [1.2.4 / 5.57.4] - 2022-07-21
|
||||
|
||||
### Added
|
||||
|
|
|
@ -493,6 +493,10 @@ SBIE2223 To increase the file size limit for copying files, please double-click
|
|||
SBIE2224 Sandboxed program has crashed: %2
|
||||
.
|
||||
|
||||
2225;pop;wrn;01
|
||||
SBIE2225 Tried to access an EFS file: %2
|
||||
.
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# SbieDrv
|
||||
#
|
||||
|
|
|
@ -323,7 +323,7 @@ SBIE2102 Fichier trop gros pour le bac à sable - %2
|
|||
.
|
||||
|
||||
2103;pop;inf;01
|
||||
SBIE2103 Échec au chargement du pilote système '%2'
|
||||
SBIE2103 Échec au chargement du pilote système « %2 »
|
||||
.
|
||||
|
||||
2104;pop;inf;02
|
||||
|
@ -335,11 +335,11 @@ SBIE2104 Échec à la fermeture de cette session Windows - %2
|
|||
# .
|
||||
|
||||
# 2106;pop;inf;01
|
||||
# SBIE2106 Veuillez activer « Exécuter comme Administrateur UAC » dans Sandboxie Control, menu Fichier
|
||||
# SBIE2106 Veuillez activer « Exécuter en tant qu'administrateur UAC » dans Sandboxie Control, menu Fichier
|
||||
# .
|
||||
|
||||
# 2107;pop;inf;01
|
||||
# SBIE2107 Préparation assemblage WinSxS « %2 »
|
||||
# SBIE2107 Préparation de l'assemblage WinSxS « %2 »
|
||||
# .
|
||||
|
||||
2108;pop;inf;01
|
||||
|
@ -694,7 +694,7 @@ SBIE9234 Erreur de démarrage du service %2
|
|||
.
|
||||
|
||||
3003;txt;01
|
||||
&Naviguer...
|
||||
&Parcourir...
|
||||
.
|
||||
|
||||
3004;txt;01
|
||||
|
@ -726,11 +726,11 @@ Démarrage de Sandboxie
|
|||
.
|
||||
|
||||
3103;txt;01
|
||||
Tapez le nom du programme et Sandboxie l'ouvrira pour vous.
|
||||
Saisissez le nom d'un programme ou d'un dossier et Sandboxie l'ouvrira pour vous.
|
||||
.
|
||||
|
||||
3104;txt;01
|
||||
Tapez « . » (le caractère « point ») pour explorer avec Sandboxie.
|
||||
Saisissez « . » (le caractère « point ») pour lancer l'explorateur Windows dans Sandboxie.
|
||||
.
|
||||
|
||||
3105;txt;01
|
||||
|
@ -750,7 +750,7 @@ Bureau
|
|||
.
|
||||
|
||||
3113;txt;01
|
||||
(explorer le dossier)
|
||||
(parcourir le dossier)
|
||||
.
|
||||
|
||||
# should match the localized folder name for Programs in the Start Menu folder
|
||||
|
@ -1063,7 +1063,7 @@ Désactiver les programmes &forcés
|
|||
.
|
||||
|
||||
3414;txt;01
|
||||
Exécuter comme Administrateur &UAC
|
||||
Exécuter en tant qu'administrateur &UAC
|
||||
.
|
||||
|
||||
3415;txt;01
|
||||
|
@ -1671,8 +1671,8 @@ En cliquant sur OK, le mécanisme de forçage des programmes sera temporairement
|
|||
.
|
||||
|
||||
3599;txt;01
|
||||
Vous pouvez désactiver le forçage d'un programme en maintenant enfoncé la touche « Ctrl »,
|
||||
« Maj » et « Flèche du bas » quand vous cliquez sur « Exécuter dans un bac à sable » pour ce programme.
|
||||
Vous pouvez désactiver le forçage d'un programme en maintenant enfoncées les touches « Ctrl » et
|
||||
« Maj » quand vous cliquez sur « Exécuter dans un bac à sable » pour ce programme.
|
||||
.
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
|
|
@ -460,6 +460,52 @@ void CSettingsWindow::UpdateCert()
|
|||
}
|
||||
}
|
||||
|
||||
void CSettingsWindow::WriteAdvancedCheck(QCheckBox* pCheck, const QString& Name, const QString& OnValue, const QString& OffValue)
|
||||
{
|
||||
//if (pCheck->checkState() == Qt::PartiallyChecked)
|
||||
// return;
|
||||
|
||||
if (!pCheck->isEnabled())
|
||||
return;
|
||||
|
||||
SB_STATUS Status;
|
||||
if (pCheck->checkState() == Qt::Checked)
|
||||
{
|
||||
if(!OnValue.isEmpty())
|
||||
Status = theAPI->GetGlobalSettings()->SetText(Name, OnValue);
|
||||
else
|
||||
Status = theAPI->GetGlobalSettings()->DelValue(Name);
|
||||
}
|
||||
else if (pCheck->checkState() == Qt::Unchecked)
|
||||
{
|
||||
if (!OffValue.isEmpty())
|
||||
Status = theAPI->GetGlobalSettings()->SetText(Name, OffValue);
|
||||
else
|
||||
Status = theAPI->GetGlobalSettings()->DelValue(Name);
|
||||
}
|
||||
|
||||
if (!Status)
|
||||
throw Status;
|
||||
}
|
||||
|
||||
void CSettingsWindow::WriteText(const QString& Name, const QString& Value)
|
||||
{
|
||||
SB_STATUS Status;
|
||||
if(Value.isEmpty())
|
||||
Status = theAPI->GetGlobalSettings()->DelValue(Name);
|
||||
else
|
||||
Status = theAPI->GetGlobalSettings()->SetText(Name, Value);
|
||||
if (!Status)
|
||||
throw Status;
|
||||
}
|
||||
|
||||
void CSettingsWindow::WriteTextList(const QString& Setting, const QStringList& List)
|
||||
{
|
||||
SB_STATUS Status = theAPI->GetGlobalSettings()->UpdateTextList(Setting, List, false);
|
||||
if (!Status)
|
||||
throw Status;
|
||||
}
|
||||
|
||||
void CSettingsWindow::SaveSettings()
|
||||
{
|
||||
theConf->SetValue("Options/UiLanguage", ui.uiLang->currentData());
|
||||
|
@ -536,97 +582,91 @@ void CSettingsWindow::SaveSettings()
|
|||
|
||||
if (theAPI->IsConnected())
|
||||
{
|
||||
if (ui.fileRoot->text().isEmpty())
|
||||
theAPI->GetGlobalSettings()->DelValue("FileRootPath"); //ui.fileRoot->setText("\\??\\%SystemDrive%\\Sandbox\\%USER%\\%SANDBOX%");
|
||||
else
|
||||
theAPI->GetGlobalSettings()->SetText("FileRootPath", ui.fileRoot->text());
|
||||
theAPI->GetGlobalSettings()->SetBool("SeparateUserFolders", ui.chkSeparateUserFolders->isChecked());
|
||||
|
||||
if (ui.regRoot->text().isEmpty())
|
||||
theAPI->GetGlobalSettings()->DelValue("KeyRootPath"); //ui.regRoot->setText("\\REGISTRY\\USER\\Sandbox_%USER%_%SANDBOX%");
|
||||
else
|
||||
theAPI->GetGlobalSettings()->SetText("KeyRootPath", ui.regRoot->text());
|
||||
|
||||
if (ui.ipcRoot->text().isEmpty())
|
||||
theAPI->GetGlobalSettings()->DelValue("IpcRootPath"); //ui.ipcRoot->setText("\\Sandbox\\%USER%\\%SANDBOX%\\Session_%SESSION%");
|
||||
else
|
||||
theAPI->GetGlobalSettings()->SetText("IpcRootPath", ui.ipcRoot->text());
|
||||
|
||||
|
||||
theAPI->GetGlobalSettings()->SetBool("NetworkEnableWFP", ui.chkWFP->isChecked());
|
||||
theAPI->GetGlobalSettings()->SetBool("EnableObjectFiltering", ui.chkObjCb->isChecked());
|
||||
theAPI->GetGlobalSettings()->SetBool("EnableWin32kHooks", ui.chkWin32k->isChecked());
|
||||
theAPI->GetGlobalSettings()->SetBool("SandboxieLogon", ui.chkSbieLogon->isChecked());
|
||||
|
||||
|
||||
if (m_FeaturesChanged) {
|
||||
m_FeaturesChanged = false;
|
||||
theAPI->ReloadConfig(true);
|
||||
}
|
||||
|
||||
theAPI->GetGlobalSettings()->SetBool("EditAdminOnly", ui.chkAdminOnly->isChecked());
|
||||
|
||||
bool isPassSet = !theAPI->GetGlobalSettings()->GetText("EditPassword", "").isEmpty();
|
||||
if (ui.chkPassRequired->isChecked())
|
||||
try
|
||||
{
|
||||
if (!isPassSet && m_NewPassword.isEmpty())
|
||||
OnSetPassword(); // request password entry if it wasn't entered already
|
||||
if (!m_NewPassword.isEmpty()) {
|
||||
theAPI->LockConfig(m_NewPassword); // set new/changed password
|
||||
m_NewPassword.clear();
|
||||
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%");
|
||||
WriteText("IpcRootPath", ui.ipcRoot->text()); //ui.ipcRoot->setText("\\Sandbox\\%USER%\\%SANDBOX%\\Session_%SESSION%");
|
||||
|
||||
WriteAdvancedCheck(ui.chkWFP, "NetworkEnableWFP", "y", "");
|
||||
WriteAdvancedCheck(ui.chkObjCb, "EnableObjectFiltering", "", "n");
|
||||
WriteAdvancedCheck(ui.chkWin32k, "EnableWin32kHooks", "", "n");
|
||||
WriteAdvancedCheck(ui.chkSbieLogon, "SandboxieLogon", "", "n");
|
||||
|
||||
if (m_FeaturesChanged) {
|
||||
m_FeaturesChanged = false;
|
||||
theAPI->ReloadConfig(true);
|
||||
}
|
||||
}
|
||||
else if (isPassSet)
|
||||
theAPI->LockConfig(QString()); // clear password
|
||||
|
||||
theAPI->GetGlobalSettings()->SetBool("ForceDisableAdminOnly", ui.chkAdminOnlyFP->isChecked());
|
||||
theAPI->GetGlobalSettings()->SetBool("ForgetPassword", ui.chkClearPass->isChecked());
|
||||
WriteAdvancedCheck(ui.chkAdminOnly, "EditAdminOnly", "y", "");
|
||||
|
||||
if (m_WarnProgsChanged)
|
||||
{
|
||||
theAPI->GetGlobalSettings()->SetBool("StartRunAlertDenied", ui.chkStartBlock->isChecked());
|
||||
theAPI->GetGlobalSettings()->SetBool("NotifyStartRunAccessDenied", ui.chkStartBlockMsg->isChecked());
|
||||
|
||||
QStringList AlertProcess;
|
||||
QStringList AlertFolder;
|
||||
for (int i = 0; i < ui.treeWarnProgs->topLevelItemCount(); i++)
|
||||
bool isPassSet = !theAPI->GetGlobalSettings()->GetText("EditPassword", "").isEmpty();
|
||||
if (ui.chkPassRequired->isChecked())
|
||||
{
|
||||
QTreeWidgetItem* pItem = ui.treeWarnProgs->topLevelItem(i);
|
||||
int Type = pItem->data(0, Qt::UserRole).toInt();
|
||||
switch (Type)
|
||||
if (!isPassSet && m_NewPassword.isEmpty())
|
||||
OnSetPassword(); // request password entry if it wasn't entered already
|
||||
if (!m_NewPassword.isEmpty()) {
|
||||
theAPI->LockConfig(m_NewPassword); // set new/changed password
|
||||
m_NewPassword.clear();
|
||||
}
|
||||
}
|
||||
else if (isPassSet)
|
||||
theAPI->LockConfig(QString()); // clear password
|
||||
|
||||
WriteAdvancedCheck(ui.chkAdminOnlyFP, "ForceDisableAdminOnly", "y", "");
|
||||
WriteAdvancedCheck(ui.chkClearPass, "ForgetPassword", "y", "");
|
||||
|
||||
if (m_WarnProgsChanged)
|
||||
{
|
||||
WriteAdvancedCheck(ui.chkStartBlock, "StartRunAlertDenied", "y", "");
|
||||
WriteAdvancedCheck(ui.chkStartBlockMsg, "NotifyStartRunAccessDenied", "", "n");
|
||||
|
||||
QStringList AlertProcess;
|
||||
QStringList AlertFolder;
|
||||
for (int i = 0; i < ui.treeWarnProgs->topLevelItemCount(); i++)
|
||||
{
|
||||
case 1: AlertProcess.append(pItem->data(1, Qt::UserRole).toString()); break;
|
||||
case 2: AlertFolder.append(pItem->data(1, Qt::UserRole).toString()); break;
|
||||
QTreeWidgetItem* pItem = ui.treeWarnProgs->topLevelItem(i);
|
||||
int Type = pItem->data(0, Qt::UserRole).toInt();
|
||||
switch (Type)
|
||||
{
|
||||
case 1: AlertProcess.append(pItem->data(1, Qt::UserRole).toString()); break;
|
||||
case 2: AlertFolder.append(pItem->data(1, Qt::UserRole).toString()); break;
|
||||
}
|
||||
}
|
||||
|
||||
WriteTextList("AlertProcess", AlertProcess);
|
||||
WriteTextList("AlertFolder", AlertFolder);
|
||||
m_WarnProgsChanged = false;
|
||||
}
|
||||
|
||||
theAPI->GetGlobalSettings()->UpdateTextList("AlertProcess", AlertProcess, false);
|
||||
theAPI->GetGlobalSettings()->UpdateTextList("AlertFolder", AlertFolder, false);
|
||||
m_WarnProgsChanged = false;
|
||||
if (m_CompatChanged)
|
||||
{
|
||||
QStringList Used;
|
||||
QStringList Rejected;
|
||||
for (int i = 0; i < ui.treeCompat->topLevelItemCount(); i++) {
|
||||
QTreeWidgetItem* pItem = ui.treeCompat->topLevelItem(i);
|
||||
if (pItem->checkState(0) == Qt::Unchecked)
|
||||
Rejected.append(pItem->data(0, Qt::UserRole).toString());
|
||||
else
|
||||
Used.append(pItem->data(0, Qt::UserRole).toString());
|
||||
}
|
||||
|
||||
// retain local templates
|
||||
foreach(const QString& Template, theAPI->GetGlobalSettings()->GetTextList("Template", false)) {
|
||||
if (Template.left(6) == "Local_") {
|
||||
Used.append(Template);
|
||||
}
|
||||
}
|
||||
|
||||
WriteTextList("Template", Used);
|
||||
WriteTextList("TemplateReject", Rejected);
|
||||
m_CompatChanged = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (m_CompatChanged)
|
||||
catch (SB_STATUS Status)
|
||||
{
|
||||
QStringList Used;
|
||||
QStringList Rejected;
|
||||
for (int i = 0; i < ui.treeCompat->topLevelItemCount(); i++) {
|
||||
QTreeWidgetItem* pItem = ui.treeCompat->topLevelItem(i);
|
||||
if (pItem->checkState(0) == Qt::Unchecked)
|
||||
Rejected.append(pItem->data(0, Qt::UserRole).toString());
|
||||
else
|
||||
Used.append(pItem->data(0, Qt::UserRole).toString());
|
||||
}
|
||||
|
||||
// retain local templates
|
||||
foreach(const QString& Template, theAPI->GetGlobalSettings()->GetTextList("Template", false)) {
|
||||
if (Template.left(6) == "Local_") {
|
||||
Used.append(Template);
|
||||
}
|
||||
}
|
||||
|
||||
theAPI->GetGlobalSettings()->UpdateTextList("Template", Used, false);
|
||||
theAPI->GetGlobalSettings()->UpdateTextList("TemplateReject", Rejected, false);
|
||||
m_CompatChanged = false;
|
||||
theGUI->CheckResults(QList<SB_STATUS>() << Status);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -751,7 +791,7 @@ void CSettingsWindow::apply()
|
|||
|
||||
void CSettingsWindow::ok()
|
||||
{
|
||||
SaveSettings();
|
||||
apply();
|
||||
|
||||
this->close();
|
||||
}
|
||||
|
|
|
@ -122,7 +122,13 @@ protected:
|
|||
bool m_CompatChanged;
|
||||
bool m_FeaturesChanged;
|
||||
bool m_CertChanged;
|
||||
|
||||
private:
|
||||
|
||||
void WriteAdvancedCheck(QCheckBox* pCheck, const QString& Name, const QString& OnValue, const QString& OffValue);
|
||||
void WriteText(const QString& Name, const QString& Value);
|
||||
void WriteTextList(const QString& Setting, const QStringList& List);
|
||||
|
||||
Ui::SettingsWindow ui;
|
||||
};
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue