Пример #1
0
 private static void CleanKeyParents(RegistryKey baseKey, string keyPath)
 {
     using (RegistryKey registryKey1 = baseKey.OpenSubKey(keyPath, true))
     {
         if (registryKey1 != null && (registryKey1.ValueCount != 0 || registryKey1.SubKeyCount != 0))
         {
             return;
         }
         string[] strArray = keyPath.Split('\\');
         if (strArray.Length <= 2)
         {
             return;
         }
         string subkey = strArray[strArray.Length - 1];
         string str    = keyPath.Remove(keyPath.Length - subkey.Length - 1);
         if (registryKey1 != null)
         {
             using (RegistryKey registryKey2 = baseKey.OpenSubKey(str, true))
                 registryKey2.DeleteSubKey(subkey, true);
         }
         SecuritySupport.CleanKeyParents(baseKey, str);
     }
 }
Пример #2
0
        internal static void SetExecutionPolicy(
            ExecutionPolicyScope scope,
            ExecutionPolicy policy,
            string shellId)
        {
            string str = "Restricted";
            string configurationPath = Utils.GetRegistryConfigurationPath(shellId);

            switch (policy)
            {
            case ExecutionPolicy.Unrestricted:
                str = "Unrestricted";
                break;

            case ExecutionPolicy.RemoteSigned:
                str = "RemoteSigned";
                break;

            case ExecutionPolicy.AllSigned:
                str = "AllSigned";
                break;

            case ExecutionPolicy.Restricted:
                str = "Restricted";
                break;

            case ExecutionPolicy.Bypass:
                str = "Bypass";
                break;
            }
            switch (scope)
            {
            case ExecutionPolicyScope.Process:
                if (policy == ExecutionPolicy.Undefined)
                {
                    str = (string)null;
                }
                Environment.SetEnvironmentVariable("PSExecutionPolicyPreference", str);
                break;

            case ExecutionPolicyScope.CurrentUser:
                if (policy == ExecutionPolicy.Undefined)
                {
                    using (RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(configurationPath, true))
                    {
                        if (registryKey != null)
                        {
                            if (registryKey.GetValue("ExecutionPolicy") != null)
                            {
                                registryKey.DeleteValue("ExecutionPolicy");
                            }
                        }
                    }
                    SecuritySupport.CleanKeyParents(Registry.CurrentUser, configurationPath);
                    break;
                }
                using (RegistryKey subKey = Registry.CurrentUser.CreateSubKey(configurationPath))
                {
                    subKey.SetValue("ExecutionPolicy", (object)str, RegistryValueKind.String);
                    break;
                }

            case ExecutionPolicyScope.LocalMachine:
                if (policy == ExecutionPolicy.Undefined)
                {
                    using (RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(configurationPath, true))
                    {
                        if (registryKey != null)
                        {
                            if (registryKey.GetValue("ExecutionPolicy") != null)
                            {
                                registryKey.DeleteValue("ExecutionPolicy");
                            }
                        }
                    }
                    SecuritySupport.CleanKeyParents(Registry.LocalMachine, configurationPath);
                    break;
                }
                using (RegistryKey subKey = Registry.LocalMachine.CreateSubKey(configurationPath))
                {
                    subKey.SetValue("ExecutionPolicy", (object)str, RegistryValueKind.String);
                    break;
                }
            }
        }