public unsafe bool GetValue(bool auto_expand, string value_name, out GLib.Win32RegistryValueType value_type, IntPtr value_data, out ulong value_data_size)
        {
            IntPtr  native_value_name = GLib.Marshaller.StringToPtrGStrdup(value_name);
            int     native_value_type;
            UIntPtr native_value_data_size;
            IntPtr  error   = IntPtr.Zero;
            bool    raw_ret = g_win32_registry_key_get_value(Handle, auto_expand, native_value_name, out native_value_type, value_data, out native_value_data_size, out error);
            bool    ret     = raw_ret;

            GLib.Marshaller.Free(native_value_name);
            value_type      = (GLib.Win32RegistryValueType)native_value_type;
            value_data_size = (ulong)native_value_data_size;
            if (error != IntPtr.Zero)
            {
                throw new GLib.GException(error);
            }
            return(ret);
        }
        public unsafe bool GetValueType(out GLib.Win32RegistryValueType value_type)
        {
            IntPtr this_as_native = System.Runtime.InteropServices.Marshal.AllocHGlobal(System.Runtime.InteropServices.Marshal.SizeOf(this));

            System.Runtime.InteropServices.Marshal.StructureToPtr(this, this_as_native, false);
            int    native_value_type;
            IntPtr error   = IntPtr.Zero;
            bool   raw_ret = g_win32_registry_value_iter_get_value_type(this_as_native, out native_value_type, out error);
            bool   ret     = raw_ret;

            ReadNative(this_as_native, ref this);
            System.Runtime.InteropServices.Marshal.FreeHGlobal(this_as_native);
            value_type = (GLib.Win32RegistryValueType)native_value_type;
            if (error != IntPtr.Zero)
            {
                throw new GLib.GException(error);
            }
            return(ret);
        }