summaryrefslogtreecommitdiff
path: root/src/System.Private.CoreLib/shared/Microsoft
diff options
context:
space:
mode:
authorJan Kotas <jkotas@microsoft.com>2018-09-20 14:14:48 -0700
committerGitHub <noreply@github.com>2018-09-20 14:14:48 -0700
commit4ca5cd260a1c04f74961faccfad3200fe865a249 (patch)
tree539038626f286075d6942d3ca75a7d887c2b2456 /src/System.Private.CoreLib/shared/Microsoft
parent0f4ecd9ccc1c7bad32d7ec8eb8bb335f67cfd432 (diff)
downloadcoreclr-4ca5cd260a1c04f74961faccfad3200fe865a249.tar.gz
coreclr-4ca5cd260a1c04f74961faccfad3200fe865a249.tar.bz2
coreclr-4ca5cd260a1c04f74961faccfad3200fe865a249.zip
Move RegistryKey to shared CoreLib partition (#20067)
* Move RegistryKey to shared CoreLib partition - Cut down RegistryKey to just what CoreLib needs. I went back and forth on whether to share the corefx implementation with ifdefs or not. I have choosen to duplicate it at the end. The ifdefs were either too complex or there was too much cruft left behind that the IL linker was not able to remove. - Move the internal CoreLib implementation of Registry to Internal.Win32 namespace to ensure that it is not confused with the public standlone one Fixes #10741 and #17899
Diffstat (limited to 'src/System.Private.CoreLib/shared/Microsoft')
-rw-r--r--src/System.Private.CoreLib/shared/Microsoft/Win32/Registry.cs106
-rw-r--r--src/System.Private.CoreLib/shared/Microsoft/Win32/RegistryHive.cs24
-rw-r--r--src/System.Private.CoreLib/shared/Microsoft/Win32/RegistryOptions.cs20
-rw-r--r--src/System.Private.CoreLib/shared/Microsoft/Win32/RegistryValueKind.cs23
-rw-r--r--src/System.Private.CoreLib/shared/Microsoft/Win32/RegistryValueOptions.cs20
-rw-r--r--src/System.Private.CoreLib/shared/Microsoft/Win32/RegistryView.cs20
-rw-r--r--src/System.Private.CoreLib/shared/Microsoft/Win32/SafeHandles/SafeRegistryHandle.Windows.cs5
-rw-r--r--src/System.Private.CoreLib/shared/Microsoft/Win32/SafeHandles/SafeRegistryHandle.cs5
8 files changed, 10 insertions, 213 deletions
diff --git a/src/System.Private.CoreLib/shared/Microsoft/Win32/Registry.cs b/src/System.Private.CoreLib/shared/Microsoft/Win32/Registry.cs
deleted file mode 100644
index d9b1d9dd08..0000000000
--- a/src/System.Private.CoreLib/shared/Microsoft/Win32/Registry.cs
+++ /dev/null
@@ -1,106 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System;
-using System.Diagnostics;
-
-namespace Microsoft.Win32
-{
- /// <summary>Registry encapsulation. Contains members representing all top level system keys.</summary>
-#if REGISTRY_ASSEMBLY
- public
-#else
- internal
-#endif
- static class Registry
- {
- /// <summary>Current User Key. This key should be used as the root for all user specific settings.</summary>
- public static readonly RegistryKey CurrentUser = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Default);
-
- /// <summary>Local Machine key. This key should be used as the root for all machine specific settings.</summary>
- public static readonly RegistryKey LocalMachine = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Default);
-
-#if REGISTRY_ASSEMBLY
- /// <summary>Classes Root Key. This is the root key of class information.</summary>
- public static readonly RegistryKey ClassesRoot = RegistryKey.OpenBaseKey(RegistryHive.ClassesRoot, RegistryView.Default);
-
- /// <summary>Users Root Key. This is the root of users.</summary>
- public static readonly RegistryKey Users = RegistryKey.OpenBaseKey(RegistryHive.Users, RegistryView.Default);
-
- /// <summary>Performance Root Key. This is where dynamic performance data is stored on NT.</summary>
- public static readonly RegistryKey PerformanceData = RegistryKey.OpenBaseKey(RegistryHive.PerformanceData, RegistryView.Default);
-
- /// <summary>Current Config Root Key. This is where current configuration information is stored.</summary>
- public static readonly RegistryKey CurrentConfig = RegistryKey.OpenBaseKey(RegistryHive.CurrentConfig, RegistryView.Default);
-
- /// <summary>
- /// Parse a keyName and returns the basekey for it.
- /// It will also store the subkey name in the out parameter.
- /// If the keyName is not valid, we will throw ArgumentException.
- /// The return value shouldn't be null.
- /// </summary>
- private static RegistryKey GetBaseKeyFromKeyName(string keyName, out string subKeyName)
- {
- if (keyName == null)
- {
- throw new ArgumentNullException(nameof(keyName));
- }
-
- int i = keyName.IndexOf('\\');
- int length = i != -1 ? i : keyName.Length;
-
- // Determine the potential base key from the length.
- RegistryKey baseKey = null;
- switch (length)
- {
- case 10: baseKey = Users; break; // HKEY_USERS
- case 17: baseKey = char.ToUpperInvariant(keyName[6]) == 'L' ? ClassesRoot : CurrentUser; break; // HKEY_C[L]ASSES_ROOT, otherwise HKEY_CURRENT_USER
- case 18: baseKey = LocalMachine; break; // HKEY_LOCAL_MACHINE
- case 19: baseKey = CurrentConfig; break; // HKEY_CURRENT_CONFIG
- case 21: baseKey = PerformanceData; break; // HKEY_PERFORMANCE_DATA
- }
-
- // If a potential base key was found, see if keyName actually starts with the potential base key's name.
- if (baseKey != null && keyName.StartsWith(baseKey.Name, StringComparison.OrdinalIgnoreCase))
- {
- subKeyName = (i == -1 || i == keyName.Length) ?
- string.Empty :
- keyName.Substring(i + 1, keyName.Length - i - 1);
-
- return baseKey;
- }
-
- throw new ArgumentException(SR.Format(SR.Arg_RegInvalidKeyName, nameof(keyName)), nameof(keyName));
- }
-
- public static object GetValue(string keyName, string valueName, object defaultValue)
- {
- string subKeyName;
- RegistryKey basekey = GetBaseKeyFromKeyName(keyName, out subKeyName);
-
- using (RegistryKey key = basekey.OpenSubKey(subKeyName))
- {
- return key?.GetValue(valueName, defaultValue);
- }
- }
-
- public static void SetValue(string keyName, string valueName, object value)
- {
- SetValue(keyName, valueName, value, RegistryValueKind.Unknown);
- }
-
- public static void SetValue(string keyName, string valueName, object value, RegistryValueKind valueKind)
- {
- string subKeyName;
- RegistryKey basekey = GetBaseKeyFromKeyName(keyName, out subKeyName);
-
- using (RegistryKey key = basekey.CreateSubKey(subKeyName))
- {
- Debug.Assert(key != null, "An exception should be thrown if failed!");
- key.SetValue(valueName, value, valueKind);
- }
- }
-#endif
- }
-}
diff --git a/src/System.Private.CoreLib/shared/Microsoft/Win32/RegistryHive.cs b/src/System.Private.CoreLib/shared/Microsoft/Win32/RegistryHive.cs
deleted file mode 100644
index 0f1e9541c8..0000000000
--- a/src/System.Private.CoreLib/shared/Microsoft/Win32/RegistryHive.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace Microsoft.Win32
-{
- /**
- * Registry hive values. Useful only for GetRemoteBaseKey
- */
-#if REGISTRY_ASSEMBLY
- public
-#else
- internal
-#endif
- enum RegistryHive
- {
- ClassesRoot = unchecked((int)0x80000000),
- CurrentUser = unchecked((int)0x80000001),
- LocalMachine = unchecked((int)0x80000002),
- Users = unchecked((int)0x80000003),
- PerformanceData = unchecked((int)0x80000004),
- CurrentConfig = unchecked((int)0x80000005),
- }
-} \ No newline at end of file
diff --git a/src/System.Private.CoreLib/shared/Microsoft/Win32/RegistryOptions.cs b/src/System.Private.CoreLib/shared/Microsoft/Win32/RegistryOptions.cs
deleted file mode 100644
index 201a6df0ec..0000000000
--- a/src/System.Private.CoreLib/shared/Microsoft/Win32/RegistryOptions.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System;
-
-namespace Microsoft.Win32
-{
- [Flags]
-#if REGISTRY_ASSEMBLY
- public
-#else
- internal
-#endif
- enum RegistryOptions
- {
- None = Interop.Advapi32.RegistryOptions.REG_OPTION_NON_VOLATILE, // 0x0000
- Volatile = Interop.Advapi32.RegistryOptions.REG_OPTION_VOLATILE, // 0x0001
- };
-}
diff --git a/src/System.Private.CoreLib/shared/Microsoft/Win32/RegistryValueKind.cs b/src/System.Private.CoreLib/shared/Microsoft/Win32/RegistryValueKind.cs
deleted file mode 100644
index bc6efcc06f..0000000000
--- a/src/System.Private.CoreLib/shared/Microsoft/Win32/RegistryValueKind.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace Microsoft.Win32
-{
-#if REGISTRY_ASSEMBLY
- public
-#else
- internal
-#endif
- enum RegistryValueKind
- {
- String = Interop.Advapi32.RegistryValues.REG_SZ,
- ExpandString = Interop.Advapi32.RegistryValues.REG_EXPAND_SZ,
- Binary = Interop.Advapi32.RegistryValues.REG_BINARY,
- DWord = Interop.Advapi32.RegistryValues.REG_DWORD,
- MultiString = Interop.Advapi32.RegistryValues.REG_MULTI_SZ,
- QWord = Interop.Advapi32.RegistryValues.REG_QWORD,
- Unknown = 0, // REG_NONE is defined as zero but BCL
- None = unchecked((int)0xFFFFFFFF), // mistakenly overrode this value.
- } // Now instead of using Interop.Kernel32.RegistryValues.REG_NONE we use "-1".
-}
diff --git a/src/System.Private.CoreLib/shared/Microsoft/Win32/RegistryValueOptions.cs b/src/System.Private.CoreLib/shared/Microsoft/Win32/RegistryValueOptions.cs
deleted file mode 100644
index 7d9b6c403b..0000000000
--- a/src/System.Private.CoreLib/shared/Microsoft/Win32/RegistryValueOptions.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System;
-
-namespace Microsoft.Win32
-{
- [Flags]
-#if REGISTRY_ASSEMBLY
- public
-#else
- internal
-#endif
- enum RegistryValueOptions
- {
- None = 0,
- DoNotExpandEnvironmentNames = 1
- }
-}
diff --git a/src/System.Private.CoreLib/shared/Microsoft/Win32/RegistryView.cs b/src/System.Private.CoreLib/shared/Microsoft/Win32/RegistryView.cs
deleted file mode 100644
index 0d6b3038e8..0000000000
--- a/src/System.Private.CoreLib/shared/Microsoft/Win32/RegistryView.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System;
-
-namespace Microsoft.Win32
-{
-#if REGISTRY_ASSEMBLY
- public
-#else
- internal
-#endif
- enum RegistryView
- {
- Default = 0, // 0x0000 operate on the default registry view
- Registry64 = Interop.Advapi32.RegistryView.KEY_WOW64_64KEY, // 0x0100 operate on the 64-bit registry view
- Registry32 = Interop.Advapi32.RegistryView.KEY_WOW64_32KEY, // 0x0200 operate on the 32-bit registry view
- };
-}
diff --git a/src/System.Private.CoreLib/shared/Microsoft/Win32/SafeHandles/SafeRegistryHandle.Windows.cs b/src/System.Private.CoreLib/shared/Microsoft/Win32/SafeHandles/SafeRegistryHandle.Windows.cs
index 9b668047a9..249f5e9f7c 100644
--- a/src/System.Private.CoreLib/shared/Microsoft/Win32/SafeHandles/SafeRegistryHandle.Windows.cs
+++ b/src/System.Private.CoreLib/shared/Microsoft/Win32/SafeHandles/SafeRegistryHandle.Windows.cs
@@ -2,9 +2,14 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
+using Microsoft.Win32.SafeHandles;
using System.Runtime.InteropServices;
+#if REGISTRY_ASSEMBLY
namespace Microsoft.Win32.SafeHandles
+#else
+namespace Internal.Win32.SafeHandles
+#endif
{
#if REGISTRY_ASSEMBLY
public
diff --git a/src/System.Private.CoreLib/shared/Microsoft/Win32/SafeHandles/SafeRegistryHandle.cs b/src/System.Private.CoreLib/shared/Microsoft/Win32/SafeHandles/SafeRegistryHandle.cs
index ae35b03d54..37e350031b 100644
--- a/src/System.Private.CoreLib/shared/Microsoft/Win32/SafeHandles/SafeRegistryHandle.cs
+++ b/src/System.Private.CoreLib/shared/Microsoft/Win32/SafeHandles/SafeRegistryHandle.cs
@@ -2,9 +2,14 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
+using Microsoft.Win32.SafeHandles;
using System;
+#if REGISTRY_ASSEMBLY
namespace Microsoft.Win32.SafeHandles
+#else
+namespace Internal.Win32.SafeHandles
+#endif
{
#if REGISTRY_ASSEMBLY
public