@@ -352,7 +352,7 @@ struct SSandboxieAPI
352352 return status;
353353 }
354354
355- NTSTATUS SbieIniGet (const std::wstring& section, const std::wstring& setting, quint32 index, std::wstring& value)
355+ NTSTATUS SbieIniGet (const std::wstring& section, const std::wstring& setting, quint32 index, std::wstring& value, ULONG * pType = NULL )
356356 {
357357 WCHAR out_buffer[SBIE_CONF_LINE_LEN ] = { 0 };
358358
@@ -365,6 +365,7 @@ struct SSandboxieAPI
365365 parms[2 ] = (ULONG64 )setting.c_str ();
366366 parms[3 ] = (ULONG64 )&index;
367367 parms[4 ] = (ULONG64 )&Output;
368+ parms[5 ] = (ULONG64 )pType;
368369 NTSTATUS status = IoControl (parms);
369370
370371 value = std::wstring (out_buffer);
@@ -563,19 +564,34 @@ void CSandboxieAPI::QueryPathList(quint64 ProcessId, quint32 path_code, QStringL
563564 }
564565}
565566
566- #define CONF_GET_NO_GLOBAL 0x40000000L
567- #define CONF_GET_NO_EXPAND 0x20000000L
568- #define CONF_GET_NO_TEMPLS 0x10000000L
569-
570- QList<QPair<QString, QString>> CSandboxieAPI::GetIniSection (const QString& BoxName, qint32* pStatus, bool withTemplates) const
567+ QList<CSandboxieAPI::SbieIniValue> CSandboxieAPI::GetIniSection (const QString& BoxName, qint32* pStatus, bool withTemplates, bool withGlobals) const
571568{
572569 qint32 status = STATUS_SUCCESS ;
573570
574571 int flags = CONF_GET_NO_EXPAND ;
575572 if (!withTemplates)
576- flags |= CONF_GET_NO_TEMPLS | CONF_GET_NO_GLOBAL ;
573+ flags |= CONF_GET_NO_TEMPLS ;
574+ if (!withGlobals)
575+ flags |= CONF_GET_NO_GLOBAL ;
576+
577+ std::set<std::wstring> names;
578+
579+ if (withGlobals) {
580+ for (int setting_index = 0 ; ; setting_index++)
581+ {
582+ std::wstring setting_name;
583+ status = m->SbieIniGet (L" GlobalSettings" , L" " , setting_index | flags, setting_name);
584+ if (status == STATUS_RESOURCE_NAME_NOT_FOUND ) {
585+ status = STATUS_SUCCESS ;
586+ break ;
587+ }
588+ if (status != STATUS_SUCCESS )
589+ break ;
590+
591+ names.insert (setting_name);
592+ }
593+ }
577594
578- QList<QPair<QString, QString>> Settings;
579595 for (int setting_index = 0 ; ; setting_index++)
580596 {
581597 std::wstring setting_name;
@@ -587,18 +603,27 @@ QList<QPair<QString, QString>> CSandboxieAPI::GetIniSection(const QString& BoxNa
587603 if (status != STATUS_SUCCESS )
588604 break ;
589605
606+ names.insert (setting_name);
607+ }
608+
609+
610+ QList<SbieIniValue> Settings;
611+
612+ for (const std::wstring& setting_name : names)
613+ {
590614 for (int value_index = 0 ; ; value_index++)
591615 {
592616 std::wstring setting_value;
593- status = m->SbieIniGet (BoxName.toStdWString (), setting_name, value_index | flags, setting_value);
617+ ULONG uType = 0 ;
618+ status = m->SbieIniGet (BoxName.toStdWString (), setting_name, value_index | flags, setting_value, &uType);
594619 if (status == STATUS_RESOURCE_NAME_NOT_FOUND ) {
595620 status = STATUS_SUCCESS ;
596621 break ;
597622 }
598623 if (status != STATUS_SUCCESS )
599624 break ;
600625
601- Settings.append (qMakePair ( QString::fromStdWString (setting_name), QString::fromStdWString (setting_value)) );
626+ Settings.append (SbieIniValue { QString::fromStdWString (setting_name), uType, QString::fromStdWString (setting_value) } );
602627 }
603628
604629 if (status != STATUS_SUCCESS )
0 commit comments