This commit is contained in:
DavidXanatos 2022-07-24 15:30:54 +02:00
parent 1a0cf442c1
commit 28ae06c8d5
7 changed files with 1067 additions and 1388 deletions

View File

@ -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

View File

@ -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
#

View File

@ -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.
.
#----------------------------------------------------------------------------

View File

@ -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();
}

View File

@ -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