diff --git a/mRemoteNG/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsDeserializerMremotengFormat.cs b/mRemoteNG/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsDeserializerMremotengFormat.cs
index f445fac8..82b6eee7 100644
--- a/mRemoteNG/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsDeserializerMremotengFormat.cs
+++ b/mRemoteNG/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsDeserializerMremotengFormat.cs
@@ -226,6 +226,18 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv
connectionRecord.UseCredSsp = value;
}
+ if (headers.Contains("UseRestrictedAdmin"))
+ {
+ if (bool.TryParse(connectionCsv[headers.IndexOf("UseRestrictedAdmin")], out bool value))
+ connectionRecord.UseRestrictedAdmin = value;
+ }
+ if (headers.Contains("UseRCG"))
+ {
+ if (bool.TryParse(connectionCsv[headers.IndexOf("UseRCG")], out bool value))
+ connectionRecord.UseRCG = value;
+ }
+
+
if (headers.Contains("UseVmId"))
{
if (bool.TryParse(connectionCsv[headers.IndexOf("UseVmId")], out bool value))
@@ -636,6 +648,19 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv
connectionRecord.Inheritance.UseCredSsp = value;
}
+ if (headers.Contains("InheritUseRestrictedAdmin"))
+ {
+ if (bool.TryParse(connectionCsv[headers.IndexOf("InheritUseRestrictedAdmin")], out bool value))
+ connectionRecord.Inheritance.UseRestrictedAdmin = value;
+ }
+
+ if (headers.Contains("InheritUseRCG"))
+ {
+ if (bool.TryParse(connectionCsv[headers.IndexOf("InheritUseRCG")], out bool value))
+ connectionRecord.Inheritance.UseRCG = value;
+ }
+
+
if (headers.Contains("InheritUseVmId"))
{
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritUseVmId")], out bool value))
diff --git a/mRemoteNG/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsSerializerMremotengFormat.cs b/mRemoteNG/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsSerializerMremotengFormat.cs
index 5952bc3b..9fd37322 100644
--- a/mRemoteNG/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsSerializerMremotengFormat.cs
+++ b/mRemoteNG/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsSerializerMremotengFormat.cs
@@ -56,7 +56,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv
if (_saveFilter.SaveDomain)
sb.Append("Domain;");
- sb.Append("Hostname;Port;VmId;Protocol;SSHTunnelConnectionName;OpeningCommand;SSHOptions;PuttySession;ConnectToConsole;UseCredSsp;UseVmId;UseEnhancedMode;RenderingEngine;RDPAuthenticationLevel;" +
+ sb.Append("Hostname;Port;VmId;Protocol;SSHTunnelConnectionName;OpeningCommand;SSHOptions;PuttySession;ConnectToConsole;UseCredSsp;UseRestrictedAdmin;UseRCG;UseVmId;UseEnhancedMode;RenderingEngine;RDPAuthenticationLevel;" +
"LoadBalanceInfo;Colors;Resolution;AutomaticResize;DisplayWallpaper;DisplayThemes;EnableFontSmoothing;EnableDesktopComposition;DisableFullWindowDrag;DisableMenuAnimations;DisableCursorShadow;DisableCursorBlinking;" +
"CacheBitmaps;RedirectDiskDrives;RedirectPorts;RedirectPrinters;RedirectClipboard;RedirectSmartCards;RedirectSound;RedirectKeys;" +
"PreExtApp;PostExtApp;MacAddress;UserField;ExtApp;Favorite;VNCCompression;VNCEncoding;VNCAuthMode;VNCProxyType;VNCProxyIP;" +
@@ -68,7 +68,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv
"InheritEnableFontSmoothing;InheritEnableDesktopComposition;InheritDisableFullWindowDrag;InheritDisableMenuAnimations;InheritDisableCursorShadow;InheritDisableCursorBlinking;InheritDomain;InheritIcon;InheritPanel;InheritPassword;InheritPort;" +
"InheritProtocol;InheritSSHTunnelConnectionName;InheritOpeningCommand;InheritSSHOptions;InheritPuttySession;InheritRedirectDiskDrives;InheritRedirectKeys;InheritRedirectPorts;InheritRedirectPrinters;" +
"InheritRedirectClipboard;InheritRedirectSmartCards;InheritRedirectSound;InheritResolution;InheritAutomaticResize;" +
- "InheritUseConsoleSession;InheritUseCredSsp;InheritUseVmId;InheritUseEnhancedMode;InheritVmId;InheritRenderingEngine;InheritUsername;" +
+ "InheritUseConsoleSession;InheritUseCredSsp;InheritUseRestrictedAdmin;InheritUseRCG;InheritUseVmId;InheritUseEnhancedMode;InheritVmId;InheritRenderingEngine;InheritUsername;" +
"InheritRDPAuthenticationLevel;InheritLoadBalanceInfo;InheritPreExtApp;InheritPostExtApp;InheritMacAddress;InheritUserField;" +
"InheritFavorite;InheritExtApp;InheritVNCCompression;InheritVNCEncoding;InheritVNCAuthMode;InheritVNCProxyType;InheritVNCProxyIP;" +
"InheritVNCProxyPort;InheritVNCProxyUsername;InheritVNCProxyPassword;InheritVNCColors;InheritVNCSmartSizeMode;InheritVNCViewOnly;" +
@@ -125,6 +125,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv
.Append(FormatForCsv(con.PuttySession))
.Append(FormatForCsv(con.UseConsoleSession))
.Append(FormatForCsv(con.UseCredSsp))
+ .Append(FormatForCsv(con.UseRestrictedAdmin))
+ .Append(FormatForCsv(con.UseRCG))
.Append(FormatForCsv(con.UseVmId))
.Append(FormatForCsv(con.UseEnhancedMode))
.Append(FormatForCsv(con.RenderingEngine))
@@ -216,6 +218,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv
.Append(FormatForCsv(con.Inheritance.AutomaticResize))
.Append(FormatForCsv(con.Inheritance.UseConsoleSession))
.Append(FormatForCsv(con.Inheritance.UseCredSsp))
+ .Append(FormatForCsv(con.Inheritance.UseRestrictedAdmin))
+ .Append(FormatForCsv(con.Inheritance.UseRCG))
.Append(FormatForCsv(con.Inheritance.UseVmId))
.Append(FormatForCsv(con.Inheritance.UseEnhancedMode))
.Append(FormatForCsv(con.Inheritance.VmId))
diff --git a/mRemoteNG/Config/Serializers/ConnectionSerializers/MsSql/DataTableDeserializer.cs b/mRemoteNG/Config/Serializers/ConnectionSerializers/MsSql/DataTableDeserializer.cs
index faf6fe58..a54e3205 100644
--- a/mRemoteNG/Config/Serializers/ConnectionSerializers/MsSql/DataTableDeserializer.cs
+++ b/mRemoteNG/Config/Serializers/ConnectionSerializers/MsSql/DataTableDeserializer.cs
@@ -97,6 +97,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
connectionInfo.Port = (int)dataRow["Port"];
connectionInfo.UseConsoleSession = (bool)dataRow["ConnectToConsole"];
connectionInfo.UseCredSsp = (bool)dataRow["UseCredSsp"];
+ connectionInfo.UseRestrictedAdmin = (bool)dataRow["UseRestrictedAdmin"];
+ connectionInfo.UseRCG = (bool)dataRow["UseRCG"];
connectionInfo.UseVmId = (bool)dataRow["UseVmId"];
connectionInfo.RenderingEngine = (HTTPBase.RenderingEngine)Enum.Parse(typeof(HTTPBase.RenderingEngine), (string)dataRow["RenderingEngine"]);
connectionInfo.RDPAuthenticationLevel = (AuthenticationLevel)Enum.Parse(typeof(AuthenticationLevel), (string)dataRow["RDPAuthenticationLevel"]);
@@ -188,6 +190,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
connectionInfo.Inheritance.AutomaticResize = (bool)dataRow["InheritAutomaticResize"];
connectionInfo.Inheritance.UseConsoleSession = (bool)dataRow["InheritUseConsoleSession"];
connectionInfo.Inheritance.UseCredSsp = (bool)dataRow["InheritUseCredSsp"];
+ connectionInfo.Inheritance.UseRestrictedAdmin = (bool)dataRow["InheritUseRestrictedAdmin"];
+ connectionInfo.Inheritance.UseRCG = (bool)dataRow["InheritUseRCG"];
connectionInfo.Inheritance.UseVmId = (bool)dataRow["InheritUseVmId"];
connectionInfo.Inheritance.UseEnhancedMode = (bool)dataRow["InheritUseEnhancedMode"];
connectionInfo.Inheritance.VmId = (bool)dataRow["InheritVmId"];
diff --git a/mRemoteNG/Config/Serializers/ConnectionSerializers/MsSql/DataTableSerializer.cs b/mRemoteNG/Config/Serializers/ConnectionSerializers/MsSql/DataTableSerializer.cs
index 9e73857c..f6ea9a8c 100644
--- a/mRemoteNG/Config/Serializers/ConnectionSerializers/MsSql/DataTableSerializer.cs
+++ b/mRemoteNG/Config/Serializers/ConnectionSerializers/MsSql/DataTableSerializer.cs
@@ -116,6 +116,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
dataTable.Columns.Add("PuttySession", typeof(string));
dataTable.Columns.Add("ConnectToConsole", typeof(bool));
dataTable.Columns.Add("UseCredSsp", typeof(bool));
+ dataTable.Columns.Add("UseRestrictedAdmin", typeof(bool));
+ dataTable.Columns.Add("UseRCG", typeof(bool));
dataTable.Columns.Add("RenderingEngine", typeof(string));
dataTable.Columns.Add("RDPAuthenticationLevel", typeof(string));
dataTable.Columns.Add("Colors", typeof(string));
@@ -192,6 +194,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
dataTable.Columns.Add("InheritResolution", typeof(bool));
dataTable.Columns.Add("InheritUseConsoleSession", typeof(bool));
dataTable.Columns.Add("InheritUseCredSsp", typeof(bool));
+ dataTable.Columns.Add("InheritUseRestrictedAdmin", typeof(bool));
+ dataTable.Columns.Add("InheritUseRCG", typeof(bool));
dataTable.Columns.Add("InheritRenderingEngine", typeof(bool));
dataTable.Columns.Add("InheritRDPAuthenticationLevel", typeof(bool));
dataTable.Columns.Add("InheritUsername", typeof(bool));
@@ -285,6 +289,10 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
isFieldNotChange = isFieldNotChange &&
dataRow["UseCredSsp"].Equals(connectionInfo.UseCredSsp);
isFieldNotChange = isFieldNotChange &&
+ dataRow["UseRestrictedAdmin"].Equals(connectionInfo.UseRestrictedAdmin);
+ isFieldNotChange = isFieldNotChange &&
+ dataRow["UseRCG"].Equals(connectionInfo.UseRCG);
+ isFieldNotChange = isFieldNotChange &&
dataRow["UseVmId"].Equals(connectionInfo.UseVmId);
isFieldNotChange = isFieldNotChange &&
dataRow["UseEnhancedMode"].Equals(connectionInfo.UseEnhancedMode);
@@ -385,6 +393,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
dataRow["InheritAutomaticResize"].Equals(connectionInfo.Inheritance.AutomaticResize) &&
dataRow["InheritUseConsoleSession"].Equals(connectionInfo.Inheritance.UseConsoleSession) &&
dataRow["InheritUseCredSsp"].Equals(connectionInfo.Inheritance.UseCredSsp) &&
+ dataRow["InheritUseRestrictedAdmin"].Equals(connectionInfo.Inheritance.UseRestrictedAdmin) &&
+ dataRow["InheritUseRCG"].Equals(connectionInfo.Inheritance.UseRCG) &&
dataRow["InheritRenderingEngine"].Equals(connectionInfo.Inheritance.RenderingEngine) &&
dataRow["InheritUsername"].Equals(connectionInfo.Inheritance.Username) &&
dataRow["InheritVmId"].Equals(connectionInfo.Inheritance.VmId) &&
@@ -452,6 +462,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
dataRow["InheritAutomaticResize"].Equals(false) &&
dataRow["InheritUseConsoleSession"].Equals(false) &&
dataRow["InheritUseCredSsp"].Equals(false) &&
+ dataRow["InheritUseRestrictedAdmin"].Equals(false) &&
+ dataRow["InheritUseRCG"].Equals(false) &&
dataRow["InheritRenderingEngine"].Equals(false) &&
dataRow["InheritUsername"].Equals(false) &&
dataRow["InheritRDPAuthenticationLevel"].Equals(false) &&
@@ -534,6 +546,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
dataRow["Port"] = connectionInfo.Port;
dataRow["ConnectToConsole"] = connectionInfo.UseConsoleSession;
dataRow["UseCredSsp"] = connectionInfo.UseCredSsp;
+ dataRow["UseRestrictedAdmin"] = connectionInfo.UseRestrictedAdmin;
+ dataRow["UseRCG"] = connectionInfo.UseRCG;
dataRow["UseVmId"] = connectionInfo.UseVmId;
dataRow["UseEnhancedMode"] = connectionInfo.UseEnhancedMode;
dataRow["RenderingEngine"] = connectionInfo.RenderingEngine;
@@ -629,6 +643,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
dataRow["InheritAutomaticResize"] = connectionInfo.Inheritance.AutomaticResize;
dataRow["InheritUseConsoleSession"] = connectionInfo.Inheritance.UseConsoleSession;
dataRow["InheritUseCredSsp"] = connectionInfo.Inheritance.UseCredSsp;
+ dataRow["InheritUseRestrictedAdmin"] = connectionInfo.Inheritance.UseRestrictedAdmin;
+ dataRow["InheritUseRCG"] = connectionInfo.Inheritance.UseRCG;
dataRow["InheritRenderingEngine"] = connectionInfo.Inheritance.RenderingEngine;
dataRow["InheritUsername"] = connectionInfo.Inheritance.Username;
dataRow["InheritVmId"] = connectionInfo.Inheritance.VmId;
@@ -700,6 +716,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
dataRow["InheritAutomaticResize"] = false;
dataRow["InheritUseConsoleSession"] = false;
dataRow["InheritUseCredSsp"] = false;
+ dataRow["InheritUseRestrictedAdmin"] = false;
+ dataRow["InheritUseRCG"] = false;
dataRow["InheritRenderingEngine"] = false;
dataRow["InheritUsername"] = false;
dataRow["InheritRDPAuthenticationLevel"] = false;
diff --git a/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDeserializer.cs b/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDeserializer.cs
index 58760b9b..a82b6c68 100644
--- a/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDeserializer.cs
+++ b/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDeserializer.cs
@@ -569,6 +569,10 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml
connectionInfo.Inheritance.UserViaAPI = xmlnode.GetAttributeAsBool("InheritUserViaAPI");
connectionInfo.EC2InstanceId = xmlnode.GetAttributeAsString("EC2InstanceId");
connectionInfo.EC2Region = xmlnode.GetAttributeAsString("EC2Region");
+ connectionInfo.UseRestrictedAdmin = xmlnode.GetAttributeAsBool("UseRestrictedAdmin");
+ connectionInfo.Inheritance.UseRestrictedAdmin = xmlnode.GetAttributeAsBool("InheritUseRestrictedAdmin");
+ connectionInfo.UseRCG = xmlnode.GetAttributeAsBool("UseRCG");
+ connectionInfo.Inheritance.UseRCG = xmlnode.GetAttributeAsBool("InheritUseRCG");
}
}
catch (Exception ex)
diff --git a/mRemoteNG/Connection/AbstractConnectionRecord.cs b/mRemoteNG/Connection/AbstractConnectionRecord.cs
index 3e16664c..a0cef34e 100644
--- a/mRemoteNG/Connection/AbstractConnectionRecord.cs
+++ b/mRemoteNG/Connection/AbstractConnectionRecord.cs
@@ -45,6 +45,8 @@ namespace mRemoteNG.Connection
private string _loadBalanceInfo;
private HTTPBase.RenderingEngine _renderingEngine;
private bool _useCredSsp;
+ private bool _useRestrictedAdmin;
+ private bool _useRCG;
private bool _useVmId;
private RDGatewayUsageMethod _rdGatewayUsageMethod;
@@ -394,6 +396,28 @@ namespace mRemoteNG.Connection
set => SetField(ref _useCredSsp, value, "UseCredSsp");
}
+ [LocalizedAttributes.LocalizedCategory(nameof(Language.Protocol), 3),
+ LocalizedAttributes.LocalizedDisplayName(nameof(Language.UseRestrictedAdmin)),
+ LocalizedAttributes.LocalizedDescription(nameof(Language.PropertyDescriptionUseRestrictedAdmin)),
+ TypeConverter(typeof(MiscTools.YesNoTypeConverter)),
+ AttributeUsedInProtocol(ProtocolType.RDP)]
+ public bool UseRestrictedAdmin
+ {
+ get => GetPropertyValue("UseRestrictedAdmin", _useRestrictedAdmin);
+ set => SetField(ref _useRestrictedAdmin, value, "UseRestrictedAdmin");
+ }
+
+ [LocalizedAttributes.LocalizedCategory(nameof(Language.Protocol), 3),
+ LocalizedAttributes.LocalizedDisplayName(nameof(Language.UseRCG)),
+ LocalizedAttributes.LocalizedDescription(nameof(Language.PropertyDescriptionUseRCG)),
+ TypeConverter(typeof(MiscTools.YesNoTypeConverter)),
+ AttributeUsedInProtocol(ProtocolType.RDP)]
+ public bool UseRCG
+ {
+ get => GetPropertyValue("UseRCG", _useRCG);
+ set => SetField(ref _useRCG, value, "UseRCG");
+ }
+
[LocalizedAttributes.LocalizedCategory(nameof(Language.Protocol), 3),
LocalizedAttributes.LocalizedDisplayName(nameof(Language.UseVmId)),
LocalizedAttributes.LocalizedDescription(nameof(Language.PropertyDescriptionUseVmId)),
diff --git a/mRemoteNG/Connection/ConnectionInfo.cs b/mRemoteNG/Connection/ConnectionInfo.cs
index 0fee759d..c0559587 100644
--- a/mRemoteNG/Connection/ConnectionInfo.cs
+++ b/mRemoteNG/Connection/ConnectionInfo.cs
@@ -312,6 +312,8 @@ namespace mRemoteNG.Connection
LoadBalanceInfo = Settings.Default.ConDefaultLoadBalanceInfo;
RenderingEngine = (HTTPBase.RenderingEngine)Enum.Parse(typeof(HTTPBase.RenderingEngine), Settings.Default.ConDefaultRenderingEngine);
UseCredSsp = Settings.Default.ConDefaultUseCredSsp;
+ UseRestrictedAdmin = Settings.Default.ConDefaultUseRestrictedAdmin;
+ UseRCG = Settings.Default.ConDefaultUseRCG;
UseVmId = Settings.Default.ConDefaultUseVmId;
UseEnhancedMode = Settings.Default.ConDefaultUseEnhancedMode;
}
diff --git a/mRemoteNG/Connection/ConnectionInfoInheritance.cs b/mRemoteNG/Connection/ConnectionInfoInheritance.cs
index 05ccdd98..5d2ee8b5 100644
--- a/mRemoteNG/Connection/ConnectionInfoInheritance.cs
+++ b/mRemoteNG/Connection/ConnectionInfoInheritance.cs
@@ -184,6 +184,18 @@ namespace mRemoteNG.Connection
TypeConverter(typeof(MiscTools.YesNoTypeConverter))]
public bool UseCredSsp { get; set; }
+ [LocalizedAttributes.LocalizedCategory(nameof(Language.Protocol), 4),
+ LocalizedAttributes.LocalizedDisplayNameInherit(nameof(Language.UseRestrictedAdmin)),
+ LocalizedAttributes.LocalizedDescriptionInherit(nameof(Language.PropertyDescriptionUseRestrictedAdmin)),
+ TypeConverter(typeof(MiscTools.YesNoTypeConverter))]
+ public bool UseRestrictedAdmin { get; set; }
+
+ [LocalizedAttributes.LocalizedCategory(nameof(Language.Protocol), 4),
+ LocalizedAttributes.LocalizedDisplayNameInherit(nameof(Language.UseRCG)),
+ LocalizedAttributes.LocalizedDescriptionInherit(nameof(Language.PropertyDescriptionUseRCG)),
+ TypeConverter(typeof(MiscTools.YesNoTypeConverter))]
+ public bool UseRCG { get; set; }
+
[LocalizedAttributes.LocalizedCategory(nameof(Language.Protocol), 4),
LocalizedAttributes.LocalizedDisplayNameInherit(nameof(Language.UseVmId)),
LocalizedAttributes.LocalizedDescriptionInherit(nameof(Language.PropertyDescriptionUseVmId)),
diff --git a/mRemoteNG/Connection/Protocol/RDP/RdpProtocol6.cs b/mRemoteNG/Connection/Protocol/RDP/RdpProtocol6.cs
index 766f0289..f64ef715 100644
--- a/mRemoteNG/Connection/Protocol/RDP/RdpProtocol6.cs
+++ b/mRemoteNG/Connection/Protocol/RDP/RdpProtocol6.cs
@@ -307,6 +307,16 @@ namespace mRemoteNG.Connection.Protocol.RDP
{
_rdpClient.AdvancedSettings7.EnableCredSspSupport = connectionInfo.UseCredSsp;
}
+ if(_rdpVersion >= Versions.RDC81)
+ {
+ if (connectionInfo.UseRestrictedAdmin)
+ SetExtendedProperty("RestrictedLogon", true);
+ else if (connectionInfo.UseRCG)
+ {
+ SetExtendedProperty("DisableCredentialsDelegation", true);
+ SetExtendedProperty("RedirectedAuthentication", true);
+ }
+ }
SetUseConsoleSession();
SetPort();
diff --git a/mRemoteNG/Connection/Protocol/RDP/RdpProtocol9.cs b/mRemoteNG/Connection/Protocol/RDP/RdpProtocol9.cs
index e0527d8b..d521e40d 100644
--- a/mRemoteNG/Connection/Protocol/RDP/RdpProtocol9.cs
+++ b/mRemoteNG/Connection/Protocol/RDP/RdpProtocol9.cs
@@ -1,4 +1,5 @@
-using System.Windows.Forms;
+using System;
+using System.Windows.Forms;
using AxMSTSCLib;
using MSTSCLib;
@@ -20,5 +21,6 @@ namespace mRemoteNG.Connection.Protocol.RDP
{
RdpClient9.UpdateSessionDisplaySettings(width, height, width, height, 0, 1, 1);
}
+
}
}
\ No newline at end of file
diff --git a/mRemoteNG/Language/Language.Designer.cs b/mRemoteNG/Language/Language.Designer.cs
index 9fc86917..1f054720 100644
--- a/mRemoteNG/Language/Language.Designer.cs
+++ b/mRemoteNG/Language/Language.Designer.cs
@@ -4059,7 +4059,29 @@ namespace mRemoteNG.Resources.Language {
return ResourceManager.GetString("PropertyDescriptionUseCredSsp", resourceCulture);
}
}
-
+
+ ///
+ /// Looks up a localized string for UseRestrictedAdmin Description
+ ///
+ internal static string PropertyDescriptionUseRestrictedAdmin
+ {
+ get
+ {
+ return ResourceManager.GetString("PropertyDescriptionUseRestrictedAdmin", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string for UseRCG Description
+ ///
+ internal static string PropertyDescriptionUseRCG
+ {
+ get
+ {
+ return ResourceManager.GetString("PropertyDescriptionUseRCG", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Connect to a Hyper-V host with enhanced mode enabled..
///
@@ -6081,7 +6103,29 @@ namespace mRemoteNG.Resources.Language {
return ResourceManager.GetString("UseCredSsp", resourceCulture);
}
}
-
+
+ ///
+ /// Looks up a localized string similar to UseRestrictedAdmin.
+ ///
+ internal static string UseRestrictedAdmin
+ {
+ get
+ {
+ return ResourceManager.GetString("UseRestrictedAdmin", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to UseRestrictedAdmin.
+ ///
+ internal static string UseRCG
+ {
+ get
+ {
+ return ResourceManager.GetString("UseRCG", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Use default.
///
diff --git a/mRemoteNG/Language/Language.resx b/mRemoteNG/Language/Language.resx
index 5c987e0e..bf6d29e0 100644
--- a/mRemoteNG/Language/Language.resx
+++ b/mRemoteNG/Language/Language.resx
@@ -1086,6 +1086,15 @@ If you run into such an error, please create a new connection file!
Use the Credential Security Support Provider (CredSSP) for authentication if it is available.
+
+
+ Use restricted admin mode on the target host (local system context).
+
+
+
+ Use Remote Credential Guard to tunnel authentication on target back to source through the RDP channel.
+
+
Feel free to enter any information you need here.
@@ -1239,6 +1248,15 @@ If you run into such an error, please create a new connection file!
Use CredSSP
+
+
+ Use Restricted Admin
+
+
+ Use Remote Credential Guard
+
+
+
User Field
diff --git a/mRemoteNG/Properties/Settings.Designer.cs b/mRemoteNG/Properties/Settings.Designer.cs
index d96fdf40..8b0183a0 100644
--- a/mRemoteNG/Properties/Settings.Designer.cs
+++ b/mRemoteNG/Properties/Settings.Designer.cs
@@ -1390,6 +1390,70 @@ namespace mRemoteNG.Properties {
this["ConDefaultUseCredSsp"] = value;
}
}
+
+
+ [global::System.Configuration.UserScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("False")]
+ public bool InhDefaultUseRestrictedAdmin
+ {
+ get
+ {
+ return ((bool)(this["InhDefaultUseRestrictedAdmin"]));
+ }
+ set
+ {
+ this["InhDefaultUseRestrictedAdmin"] = value;
+ }
+ }
+
+ [global::System.Configuration.UserScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("True")]
+ public bool ConDefaultUseRestrictedAdmin
+ {
+ get
+ {
+ return ((bool)(this["ConDefaultUseRestrictedAdmin"]));
+ }
+ set
+ {
+ this["ConDefaultUseRestrictedAdmin"] = value;
+ }
+ }
+
+
+ [global::System.Configuration.UserScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("False")]
+ public bool InhDefaultUseRCG
+ {
+ get
+ {
+ return ((bool)(this["InhDefaultUseRCG"]));
+ }
+ set
+ {
+ this["InhDefaultUseRCG"] = value;
+ }
+ }
+
+ [global::System.Configuration.UserScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("True")]
+ public bool ConDefaultUseRCG
+ {
+ get
+ {
+ return ((bool)(this["ConDefaultUseRCG"]));
+ }
+ set
+ {
+ this["ConDefaultUseRCG"] = value;
+ }
+ }
+
+
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
diff --git a/mRemoteNG/Properties/Settings.settings b/mRemoteNG/Properties/Settings.settings
index 2a3ad719..1855d9da 100644
--- a/mRemoteNG/Properties/Settings.settings
+++ b/mRemoteNG/Properties/Settings.settings
@@ -338,12 +338,27 @@
4
+
False
True
+
+
+ False
+
+
+ True
+
+
+ False
+
+
+ True
+
+
False
diff --git a/mRemoteNGTests/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsDeserializerMremotengFormatTests.cs b/mRemoteNGTests/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsDeserializerMremotengFormatTests.cs
index e3f9aeda..0de1e5d5 100644
--- a/mRemoteNGTests/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsDeserializerMremotengFormatTests.cs
+++ b/mRemoteNGTests/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsDeserializerMremotengFormatTests.cs
@@ -97,6 +97,8 @@ namespace mRemoteNGTests.Config.Serializers.ConnectionSerializers.Csv
Favorite = true,
UseConsoleSession = true,
UseCredSsp = true,
+ UseRestrictedAdmin = true,
+ UseRCG = true,
UseVmId = false,
UseEnhancedMode = false,
RenderingEngine = HTTPBase.RenderingEngine.EdgeChromium,
diff --git a/mRemoteNGTests/Connection/AbstractConnectionInfoDataTests.cs b/mRemoteNGTests/Connection/AbstractConnectionInfoDataTests.cs
index 577d4d1a..7c816cce 100644
--- a/mRemoteNGTests/Connection/AbstractConnectionInfoDataTests.cs
+++ b/mRemoteNGTests/Connection/AbstractConnectionInfoDataTests.cs
@@ -186,6 +186,24 @@ namespace mRemoteNGTests.Connection
Assert.That(wasCalled, Is.True);
}
+ [Test]
+ public void UseRestrictedAdminNotifiesOnValueChange()
+ {
+ var wasCalled = false;
+ _testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
+ _testAbstractConnectionInfoData.UseRestrictedAdmin = true;
+ Assert.That(wasCalled, Is.True);
+ }
+
+ [Test]
+ public void UseRCGNotifiesOnValueChange()
+ {
+ var wasCalled = false;
+ _testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
+ _testAbstractConnectionInfoData.UseRCG = true;
+ Assert.That(wasCalled, Is.True);
+ }
+
[Test]
public void RdGatewayUsageMethodNotifiesOnValueChange()
{
diff --git a/mRemoteNGTests/TestHelpers/SerializableConnectionInfoAllPropertiesOfType.cs b/mRemoteNGTests/TestHelpers/SerializableConnectionInfoAllPropertiesOfType.cs
index afcf04fe..7500c4e7 100644
--- a/mRemoteNGTests/TestHelpers/SerializableConnectionInfoAllPropertiesOfType.cs
+++ b/mRemoteNGTests/TestHelpers/SerializableConnectionInfoAllPropertiesOfType.cs
@@ -23,6 +23,8 @@
public TType LoadBalanceInfo { get; set; }
public TType RenderingEngine { get; set; }
public TType UseCredSsp { get; set; }
+ public TType UseRestrictedAdmin { get; set; }
+ public TType UseRCG { get; set; }
public TType RDGatewayUsageMethod { get; set; }
public TType RDGatewayHostname { get; set; }
public TType RDGatewayUseConnectionCredentials { get; set; }
diff --git a/mRemoteNGTests/UI/Window/ConfigWindowTests/ConfigWindowGeneralTests.cs b/mRemoteNGTests/UI/Window/ConfigWindowTests/ConfigWindowGeneralTests.cs
index 80fde5ff..864649c5 100644
--- a/mRemoteNGTests/UI/Window/ConfigWindowTests/ConfigWindowGeneralTests.cs
+++ b/mRemoteNGTests/UI/Window/ConfigWindowTests/ConfigWindowGeneralTests.cs
@@ -238,6 +238,8 @@ namespace mRemoteNGTests.UI.Window.ConfigWindowTests
nameof(ConnectionInfo.RDPMinutesToIdleTimeout),
nameof(ConnectionInfo.LoadBalanceInfo),
nameof(ConnectionInfo.UseCredSsp),
+ nameof(ConnectionInfo.UseRestrictedAdmin),
+ nameof(ConnectionInfo.UseRCG),
nameof(ConnectionInfo.RDGatewayUsageMethod),
nameof(ConnectionInfo.Resolution),
nameof(ConnectionInfo.Colors),