using System; using System.Globalization; using System.IO; namespace Microsoft.Win32 { // Token: 0x0200007B RID: 123 internal class UnixRegistryApi : IRegistryApi { // Token: 0x06000752 RID: 1874 RVA: 0x0001709C File Offset: 0x0001529C private static string ToUnix(string keyname) { if (keyname.IndexOf('\\') != -1) { keyname = keyname.Replace('\\', '/'); } return keyname.ToLower(); } // Token: 0x06000753 RID: 1875 RVA: 0x000170CC File Offset: 0x000152CC private static bool IsWellKnownKey(string parentKeyName, string keyname) { return (parentKeyName == Registry.CurrentUser.Name || parentKeyName == Registry.LocalMachine.Name) && 0 == string.Compare("software", keyname, true, CultureInfo.InvariantCulture); } // Token: 0x06000754 RID: 1876 RVA: 0x0001711C File Offset: 0x0001531C public RegistryKey CreateSubKey(RegistryKey rkey, string keyname) { return this.CreateSubKey(rkey, keyname, true); } // Token: 0x06000755 RID: 1877 RVA: 0x00017128 File Offset: 0x00015328 public RegistryKey OpenRemoteBaseKey(RegistryHive hKey, string machineName) { throw new NotImplementedException(); } // Token: 0x06000756 RID: 1878 RVA: 0x00017130 File Offset: 0x00015330 public RegistryKey OpenSubKey(RegistryKey rkey, string keyname, bool writable) { KeyHandler keyHandler = KeyHandler.Lookup(rkey, true); if (keyHandler == null) { return null; } RegistryKey registryKey = keyHandler.Probe(rkey, UnixRegistryApi.ToUnix(keyname), writable); if (registryKey == null && UnixRegistryApi.IsWellKnownKey(rkey.Name, keyname)) { registryKey = this.CreateSubKey(rkey, keyname, writable); } return registryKey; } // Token: 0x06000757 RID: 1879 RVA: 0x00017180 File Offset: 0x00015380 public void Flush(RegistryKey rkey) { KeyHandler keyHandler = KeyHandler.Lookup(rkey, false); if (keyHandler == null) { return; } keyHandler.Flush(); } // Token: 0x06000758 RID: 1880 RVA: 0x000171A4 File Offset: 0x000153A4 public void Close(RegistryKey rkey) { KeyHandler.Drop(rkey); } // Token: 0x06000759 RID: 1881 RVA: 0x000171AC File Offset: 0x000153AC public object GetValue(RegistryKey rkey, string name, object default_value, RegistryValueOptions options) { KeyHandler keyHandler = KeyHandler.Lookup(rkey, true); if (keyHandler == null) { return default_value; } if (keyHandler.ValueExists(name)) { return keyHandler.GetValue(name, options); } return default_value; } // Token: 0x0600075A RID: 1882 RVA: 0x000171E0 File Offset: 0x000153E0 public void SetValue(RegistryKey rkey, string name, object value) { KeyHandler keyHandler = KeyHandler.Lookup(rkey, true); if (keyHandler == null) { throw RegistryKey.CreateMarkedForDeletionException(); } keyHandler.SetValue(name, value); } // Token: 0x0600075B RID: 1883 RVA: 0x0001720C File Offset: 0x0001540C public void SetValue(RegistryKey rkey, string name, object value, RegistryValueKind valueKind) { KeyHandler keyHandler = KeyHandler.Lookup(rkey, true); if (keyHandler == null) { throw RegistryKey.CreateMarkedForDeletionException(); } keyHandler.SetValue(name, value, valueKind); } // Token: 0x0600075C RID: 1884 RVA: 0x00017238 File Offset: 0x00015438 public int SubKeyCount(RegistryKey rkey) { KeyHandler keyHandler = KeyHandler.Lookup(rkey, true); if (keyHandler == null) { throw RegistryKey.CreateMarkedForDeletionException(); } return Directory.GetDirectories(keyHandler.Dir).Length; } // Token: 0x0600075D RID: 1885 RVA: 0x00017268 File Offset: 0x00015468 public int ValueCount(RegistryKey rkey) { KeyHandler keyHandler = KeyHandler.Lookup(rkey, true); if (keyHandler == null) { throw RegistryKey.CreateMarkedForDeletionException(); } return keyHandler.ValueCount; } // Token: 0x0600075E RID: 1886 RVA: 0x00017290 File Offset: 0x00015490 public void DeleteValue(RegistryKey rkey, string name, bool throw_if_missing) { KeyHandler keyHandler = KeyHandler.Lookup(rkey, true); if (keyHandler == null) { return; } if (throw_if_missing && !keyHandler.ValueExists(name)) { throw new ArgumentException("the given value does not exist"); } keyHandler.RemoveValue(name); } // Token: 0x0600075F RID: 1887 RVA: 0x000172D0 File Offset: 0x000154D0 public void DeleteKey(RegistryKey rkey, string keyname, bool throw_if_missing) { KeyHandler keyHandler = KeyHandler.Lookup(rkey, true); if (keyHandler != null) { string text = Path.Combine(keyHandler.Dir, UnixRegistryApi.ToUnix(keyname)); if (Directory.Exists(text)) { Directory.Delete(text, true); KeyHandler.Drop(text); } else if (throw_if_missing) { throw new ArgumentException("the given value does not exist"); } return; } if (!throw_if_missing) { return; } throw new ArgumentException("the given value does not exist"); } // Token: 0x06000760 RID: 1888 RVA: 0x00017340 File Offset: 0x00015540 public string[] GetSubKeyNames(RegistryKey rkey) { KeyHandler keyHandler = KeyHandler.Lookup(rkey, true); DirectoryInfo directoryInfo = new DirectoryInfo(keyHandler.Dir); DirectoryInfo[] directories = directoryInfo.GetDirectories(); string[] array = new string[directories.Length]; for (int i = 0; i < directories.Length; i++) { DirectoryInfo directoryInfo2 = directories[i]; array[i] = directoryInfo2.Name; } return array; } // Token: 0x06000761 RID: 1889 RVA: 0x0001739C File Offset: 0x0001559C public string[] GetValueNames(RegistryKey rkey) { KeyHandler keyHandler = KeyHandler.Lookup(rkey, true); if (keyHandler == null) { throw RegistryKey.CreateMarkedForDeletionException(); } return keyHandler.GetValueNames(); } // Token: 0x06000762 RID: 1890 RVA: 0x000173C4 File Offset: 0x000155C4 public string ToString(RegistryKey rkey) { return rkey.Name; } // Token: 0x06000763 RID: 1891 RVA: 0x000173CC File Offset: 0x000155CC private RegistryKey CreateSubKey(RegistryKey rkey, string keyname, bool writable) { KeyHandler keyHandler = KeyHandler.Lookup(rkey, true); if (keyHandler == null) { throw RegistryKey.CreateMarkedForDeletionException(); } return keyHandler.Ensure(rkey, UnixRegistryApi.ToUnix(keyname), writable); } } }