214 lines
6.3 KiB
C#
214 lines
6.3 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|