public RegistryKey OpenSubKey (RegistryKey rkey, string keyName, bool writable)
{
int access = OpenRegKeyRead;
if (writable) access |= OpenRegKeyWrite;
IntPtr handle = GetHandle (rkey);
IntPtr subKeyHandle;
int result = RegOpenKeyEx (handle, keyName, IntPtr.Zero, access, out subKeyHandle);
if (result == Win32ResultCode.FileNotFound || result == Win32ResultCode.MarkedForDeletion)
return null;
if (result != Win32ResultCode.Success)
GenerateException (result);
return new RegistryKey (subKeyHandle, CombineName (rkey, keyName), writable);
}