1 /* GIO - GLib Input, Output and Streaming Library
3 * Copyright (C) 2014 Руслан Ижбулатов <lrn1986@gmail.com>
5 * SPDX-License-Identifier: LGPL-2.1-or-later
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General
18 * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
21 #ifndef __G_WIN32_REGISTRY_KEY_H__
22 #define __G_WIN32_REGISTRY_KEY_H__
26 #ifdef G_PLATFORM_WIN32
30 #define G_TYPE_WIN32_REGISTRY_KEY (g_win32_registry_key_get_type ())
31 #define G_WIN32_REGISTRY_KEY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_WIN32_REGISTRY_KEY, GWin32RegistryKey))
32 #define G_WIN32_REGISTRY_KEY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), G_TYPE_WIN32_REGISTRY_KEY, GWin32RegistryKeyClass))
33 #define G_IS_WIN32_REGISTRY_KEY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_WIN32_REGISTRY_KEY))
34 #define G_IS_WIN32_REGISTRY_KEY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), G_TYPE_WIN32_REGISTRY_KEY))
35 #define G_WIN32_REGISTRY_KEY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_WIN32_REGISTRY_KEY, GWin32RegistryKeyClass))
38 G_WIN32_REGISTRY_VALUE_NONE = 0,
39 G_WIN32_REGISTRY_VALUE_BINARY = 1,
40 G_WIN32_REGISTRY_VALUE_UINT32LE = 2,
41 G_WIN32_REGISTRY_VALUE_UINT32BE = 3,
42 #if G_BYTE_ORDER == G_BIG_ENDIAN
43 G_WIN32_REGISTRY_VALUE_UINT32 = G_WIN32_REGISTRY_VALUE_UINT32BE,
45 G_WIN32_REGISTRY_VALUE_UINT32 = G_WIN32_REGISTRY_VALUE_UINT32LE,
47 G_WIN32_REGISTRY_VALUE_EXPAND_STR = 4,
48 G_WIN32_REGISTRY_VALUE_LINK = 5,
49 G_WIN32_REGISTRY_VALUE_MULTI_STR = 6,
50 G_WIN32_REGISTRY_VALUE_UINT64LE = 7,
51 #if G_BYTE_ORDER == G_LITTLE_ENDIAN
52 G_WIN32_REGISTRY_VALUE_UINT64 = G_WIN32_REGISTRY_VALUE_UINT64LE,
54 G_WIN32_REGISTRY_VALUE_STR = 8
55 } GWin32RegistryValueType;
58 G_WIN32_REGISTRY_WATCH_NAME = 1 << 0,
59 G_WIN32_REGISTRY_WATCH_ATTRIBUTES = 1 << 1,
60 G_WIN32_REGISTRY_WATCH_VALUES = 1 << 2,
61 G_WIN32_REGISTRY_WATCH_SECURITY = 1 << 3,
62 } GWin32RegistryKeyWatcherFlags;
64 typedef struct _GWin32RegistryKey GWin32RegistryKey;
65 typedef struct _GWin32RegistryKeyClass GWin32RegistryKeyClass;
66 typedef struct _GWin32RegistryKeyPrivate GWin32RegistryKeyPrivate;
67 typedef struct _GWin32RegistrySubkeyIter GWin32RegistrySubkeyIter;
68 typedef struct _GWin32RegistryValueIter GWin32RegistryValueIter;
70 struct _GWin32RegistryKey {
71 GObject parent_instance;
74 GWin32RegistryKeyPrivate *priv;
77 struct _GWin32RegistryKeyClass {
78 GObjectClass parent_class;
82 * GWin32RegistryKeyWatchCallbackFunc:
83 * @key: A #GWin32RegistryKey that was watched.
84 * @user_data: The @user_data #gpointer passed to g_win32_registry_key_watch().
86 * The type of the callback passed to g_win32_registry_key_watch().
88 * The callback is invoked after a change matching the watch flags and arguments
89 * occurs. If the children of the key were watched also, there is no way to know
90 * which one of them triggered the callback.
94 typedef void (*GWin32RegistryKeyWatchCallbackFunc) (GWin32RegistryKey *key,
97 #define G_TYPE_WIN32_REGISTRY_SUBKEY_ITER (g_win32_registry_subkey_iter_get_type ())
99 struct _GWin32RegistrySubkeyIter {
101 GWin32RegistryKey *key;
105 gunichar2 *subkey_name;
106 gsize subkey_name_size;
107 gsize subkey_name_len;
109 gchar *subkey_name_u8;
112 #define G_TYPE_WIN32_REGISTRY_VALUE_ITER (g_win32_registry_value_iter_get_type ())
114 struct _GWin32RegistryValueIter {
116 GWin32RegistryKey *key;
120 gunichar2 *value_name;
121 gsize value_name_size;
122 gsize value_name_len;
123 GWin32RegistryValueType value_type;
125 gsize value_data_size;
126 gsize value_actual_data_size;
127 GWin32RegistryValueType value_expanded_type;
128 gunichar2 *value_data_expanded;
129 gsize value_data_expanded_charsize;
131 gchar *value_name_u8;
132 gsize value_name_u8_len;
133 gchar *value_data_u8;
134 gsize value_data_u8_size;
135 gchar *value_data_expanded_u8;
136 gsize value_data_expanded_u8_size;
139 GIO_AVAILABLE_IN_2_46
140 GWin32RegistrySubkeyIter *g_win32_registry_subkey_iter_copy (const GWin32RegistrySubkeyIter *iter);
141 GIO_AVAILABLE_IN_2_46
142 void g_win32_registry_subkey_iter_free (GWin32RegistrySubkeyIter *iter);
143 GIO_AVAILABLE_IN_2_46
144 void g_win32_registry_subkey_iter_assign (GWin32RegistrySubkeyIter *iter,
145 const GWin32RegistrySubkeyIter *other);
146 GIO_AVAILABLE_IN_2_46
147 GType g_win32_registry_subkey_iter_get_type (void) G_GNUC_CONST;
150 GIO_AVAILABLE_IN_2_46
151 GWin32RegistryValueIter *g_win32_registry_value_iter_copy (const GWin32RegistryValueIter *iter);
152 GIO_AVAILABLE_IN_2_46
153 void g_win32_registry_value_iter_free (GWin32RegistryValueIter *iter);
154 GIO_AVAILABLE_IN_2_46
155 void g_win32_registry_value_iter_assign (GWin32RegistryValueIter *iter,
156 const GWin32RegistryValueIter *other);
157 GIO_AVAILABLE_IN_2_46
158 GType g_win32_registry_value_iter_get_type (void) G_GNUC_CONST;
161 GIO_AVAILABLE_IN_2_46
162 GType g_win32_registry_key_get_type (void);
164 GIO_AVAILABLE_IN_2_46
165 GWin32RegistryKey *g_win32_registry_key_new (const gchar *path,
168 GIO_AVAILABLE_IN_2_46
169 GWin32RegistryKey *g_win32_registry_key_new_w (const gunichar2 *path,
172 GIO_AVAILABLE_IN_2_46
173 GWin32RegistryKey *g_win32_registry_key_get_child (GWin32RegistryKey *key,
177 GIO_AVAILABLE_IN_2_46
178 GWin32RegistryKey *g_win32_registry_key_get_child_w (GWin32RegistryKey *key,
179 const gunichar2 *subkey,
182 GIO_AVAILABLE_IN_2_46
183 gboolean g_win32_registry_subkey_iter_init (GWin32RegistrySubkeyIter *iter,
184 GWin32RegistryKey *key,
186 GIO_AVAILABLE_IN_2_46
187 void g_win32_registry_subkey_iter_clear (GWin32RegistrySubkeyIter *iter);
188 GIO_AVAILABLE_IN_2_46
189 gsize g_win32_registry_subkey_iter_n_subkeys (GWin32RegistrySubkeyIter *iter);
190 GIO_AVAILABLE_IN_2_46
191 gboolean g_win32_registry_subkey_iter_next (GWin32RegistrySubkeyIter *iter,
192 gboolean skip_errors,
194 GIO_AVAILABLE_IN_2_46
195 gboolean g_win32_registry_subkey_iter_get_name (GWin32RegistrySubkeyIter *iter,
196 const gchar **subkey_name,
197 gsize *subkey_name_len,
199 GIO_AVAILABLE_IN_2_46
200 gboolean g_win32_registry_subkey_iter_get_name_w (GWin32RegistrySubkeyIter *iter,
201 const gunichar2 **subkey_name,
202 gsize *subkey_name_len,
205 GIO_AVAILABLE_IN_2_46
206 gboolean g_win32_registry_value_iter_init (GWin32RegistryValueIter *iter,
207 GWin32RegistryKey *key,
209 GIO_AVAILABLE_IN_2_46
210 void g_win32_registry_value_iter_clear (GWin32RegistryValueIter *iter);
211 GIO_AVAILABLE_IN_2_46
212 gsize g_win32_registry_value_iter_n_values (GWin32RegistryValueIter *iter);
213 GIO_AVAILABLE_IN_2_46
214 gboolean g_win32_registry_value_iter_next (GWin32RegistryValueIter *iter,
215 gboolean skip_errors,
217 GIO_AVAILABLE_IN_2_46
218 gboolean g_win32_registry_value_iter_get_value_type (GWin32RegistryValueIter *iter,
219 GWin32RegistryValueType *value_type,
221 GIO_AVAILABLE_IN_2_46
222 gboolean g_win32_registry_value_iter_get_name (GWin32RegistryValueIter *iter,
224 gsize *value_name_len,
226 GIO_AVAILABLE_IN_2_46
227 gboolean g_win32_registry_value_iter_get_name_w (GWin32RegistryValueIter *iter,
228 gunichar2 **value_name,
229 gsize *value_name_len,
231 GIO_AVAILABLE_IN_2_46
232 gboolean g_win32_registry_value_iter_get_data (GWin32RegistryValueIter *iter,
233 gboolean auto_expand,
234 gpointer *value_data,
235 gsize *value_data_size,
237 GIO_AVAILABLE_IN_2_46
238 gboolean g_win32_registry_value_iter_get_data_w (GWin32RegistryValueIter *iter,
239 gboolean auto_expand,
240 gpointer *value_data,
241 gsize *value_data_size,
244 GIO_AVAILABLE_IN_2_66
245 gboolean g_win32_registry_key_get_value (GWin32RegistryKey *key,
246 const gchar * const *mui_dll_dirs,
247 gboolean auto_expand,
248 const gchar *value_name,
249 GWin32RegistryValueType *value_type,
250 gpointer *value_data,
251 gsize *value_data_size,
254 GIO_AVAILABLE_IN_2_66
255 gboolean g_win32_registry_key_get_value_w (GWin32RegistryKey *key,
256 const gunichar2 * const *mui_dll_dirs,
257 gboolean auto_expand,
258 const gunichar2 *value_name,
259 GWin32RegistryValueType *value_type,
260 gpointer *value_data,
261 gsize *value_data_size,
264 GIO_AVAILABLE_IN_2_46
265 const gchar *g_win32_registry_key_get_path (GWin32RegistryKey *key);
267 GIO_AVAILABLE_IN_2_46
268 const gunichar2 *g_win32_registry_key_get_path_w (GWin32RegistryKey *key);
270 GIO_AVAILABLE_IN_2_46
271 gboolean g_win32_registry_key_watch (GWin32RegistryKey *key,
272 gboolean watch_children,
273 GWin32RegistryKeyWatcherFlags watch_flags,
274 GWin32RegistryKeyWatchCallbackFunc callback,
277 GIO_AVAILABLE_IN_2_46
278 gboolean g_win32_registry_key_has_changed (GWin32RegistryKey *key);
280 GIO_AVAILABLE_IN_2_46
281 void g_win32_registry_key_erase_change_indicator (GWin32RegistryKey *key);
283 GIO_AVAILABLE_IN_2_66
284 const gunichar2 * const *g_win32_registry_get_os_dirs_w (void);
286 GIO_AVAILABLE_IN_2_66
287 const gchar * const *g_win32_registry_get_os_dirs (void);
291 #endif /* G_PLATFORM_WIN32 */
293 #endif /* __G_WIN32_REGISTRY_KEY_H__ */