상속: IRegistryApi
        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));
        }
        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);
        }
        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");
        }