(root)/
glib-2.79.0/
gio/
gwin32registrykey.h
       1  /* GIO - GLib Input, Output and Streaming Library
       2   *
       3   * Copyright (C) 2014 Руслан Ижбулатов <lrn1986@gmail.com>
       4   *
       5   * SPDX-License-Identifier: LGPL-2.1-or-later
       6   *
       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.
      11   *
      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.
      16   *
      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/>.
      19   *
      20   */
      21  #ifndef __G_WIN32_REGISTRY_KEY_H__
      22  #define __G_WIN32_REGISTRY_KEY_H__
      23  
      24  #include <gio/gio.h>
      25  
      26  #ifdef G_PLATFORM_WIN32
      27  
      28  G_BEGIN_DECLS
      29  
      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))
      36  
      37  typedef enum {
      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,
      44  #else
      45    G_WIN32_REGISTRY_VALUE_UINT32 = G_WIN32_REGISTRY_VALUE_UINT32LE,
      46  #endif
      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,
      53  #endif
      54    G_WIN32_REGISTRY_VALUE_STR = 8
      55  } GWin32RegistryValueType;
      56  
      57  typedef enum {
      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;
      63  
      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;
      69  
      70  struct _GWin32RegistryKey {
      71    GObject parent_instance;
      72  
      73    /*< private >*/
      74    GWin32RegistryKeyPrivate *priv;
      75  };
      76  
      77  struct _GWin32RegistryKeyClass {
      78    GObjectClass parent_class;
      79  };
      80  
      81  /**
      82   * GWin32RegistryKeyWatchCallbackFunc:
      83   * @key: A #GWin32RegistryKey that was watched.
      84   * @user_data: The @user_data #gpointer passed to g_win32_registry_key_watch().
      85   *
      86   * The type of the callback passed to g_win32_registry_key_watch().
      87   *
      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.
      91   *
      92   * Since: 2.42
      93   */
      94  typedef void (*GWin32RegistryKeyWatchCallbackFunc) (GWin32RegistryKey  *key,
      95                                                      gpointer            user_data);
      96  
      97  #define G_TYPE_WIN32_REGISTRY_SUBKEY_ITER (g_win32_registry_subkey_iter_get_type ())
      98  
      99  struct _GWin32RegistrySubkeyIter {
     100    /*< private >*/
     101    GWin32RegistryKey *key;
     102    gint               counter;
     103    gint               subkey_count;
     104  
     105    gunichar2         *subkey_name;
     106    gsize              subkey_name_size;
     107    gsize              subkey_name_len;
     108  
     109    gchar             *subkey_name_u8;
     110  };
     111  
     112  #define G_TYPE_WIN32_REGISTRY_VALUE_ITER (g_win32_registry_value_iter_get_type ())
     113  
     114  struct _GWin32RegistryValueIter {
     115    /*< private >*/
     116    GWin32RegistryKey       *key;
     117    gint                     counter;
     118    gint                     value_count;
     119  
     120    gunichar2               *value_name;
     121    gsize                    value_name_size;
     122    gsize                    value_name_len;
     123    GWin32RegistryValueType  value_type;
     124    guint8                  *value_data;
     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;
     130  
     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;
     137  };
     138  
     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;
     148  
     149  
     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;
     159  
     160  
     161  GIO_AVAILABLE_IN_2_46
     162  GType              g_win32_registry_key_get_type             (void);
     163  
     164  GIO_AVAILABLE_IN_2_46
     165  GWin32RegistryKey *g_win32_registry_key_new                  (const gchar                    *path,
     166                                                                GError                        **error);
     167  
     168  GIO_AVAILABLE_IN_2_46
     169  GWin32RegistryKey *g_win32_registry_key_new_w                (const gunichar2                *path,
     170                                                                GError                        **error);
     171  
     172  GIO_AVAILABLE_IN_2_46
     173  GWin32RegistryKey *g_win32_registry_key_get_child            (GWin32RegistryKey              *key,
     174                                                                const gchar                    *subkey,
     175                                                                GError                        **error);
     176  
     177  GIO_AVAILABLE_IN_2_46
     178  GWin32RegistryKey *g_win32_registry_key_get_child_w          (GWin32RegistryKey              *key,
     179                                                                const gunichar2                *subkey,
     180                                                                GError                        **error);
     181  
     182  GIO_AVAILABLE_IN_2_46
     183  gboolean         g_win32_registry_subkey_iter_init           (GWin32RegistrySubkeyIter       *iter,
     184                                                                GWin32RegistryKey              *key,
     185                                                                GError                        **error);
     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,
     193                                                                GError                        **error);
     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,
     198                                                                GError                         **error);
     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,
     203                                                                GError                         **error);
     204  
     205  GIO_AVAILABLE_IN_2_46
     206  gboolean         g_win32_registry_value_iter_init            (GWin32RegistryValueIter         *iter,
     207                                                                GWin32RegistryKey               *key,
     208                                                                GError                         **error);
     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,
     216                                                                GError                         **error);
     217  GIO_AVAILABLE_IN_2_46
     218  gboolean         g_win32_registry_value_iter_get_value_type  (GWin32RegistryValueIter         *iter,
     219                                                                GWin32RegistryValueType         *value_type,
     220                                                                GError                         **error);
     221  GIO_AVAILABLE_IN_2_46
     222  gboolean         g_win32_registry_value_iter_get_name        (GWin32RegistryValueIter         *iter,
     223                                                                gchar                          **value_name,
     224                                                                gsize                           *value_name_len,
     225                                                                GError                         **error);
     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,
     230                                                                GError                         **error);
     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,
     236                                                                GError                         **error);
     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,
     242                                                                GError                         **error);
     243  
     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,
     252                                                                GError                         **error);
     253  
     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,
     262                                                                GError                         **error);
     263  
     264  GIO_AVAILABLE_IN_2_46
     265  const gchar     *g_win32_registry_key_get_path               (GWin32RegistryKey               *key);
     266  
     267  GIO_AVAILABLE_IN_2_46
     268  const gunichar2 *g_win32_registry_key_get_path_w             (GWin32RegistryKey               *key);
     269  
     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,
     275                                                                gpointer                         user_data,
     276                                                                GError                         **error);
     277  GIO_AVAILABLE_IN_2_46
     278  gboolean         g_win32_registry_key_has_changed            (GWin32RegistryKey               *key);
     279  
     280  GIO_AVAILABLE_IN_2_46
     281  void             g_win32_registry_key_erase_change_indicator (GWin32RegistryKey               *key);
     282  
     283  GIO_AVAILABLE_IN_2_66
     284  const gunichar2 * const *g_win32_registry_get_os_dirs_w (void);
     285  
     286  GIO_AVAILABLE_IN_2_66
     287  const gchar * const     *g_win32_registry_get_os_dirs   (void);
     288  
     289  G_END_DECLS
     290  
     291  #endif /* G_PLATFORM_WIN32 */
     292  
     293  #endif /* __G_WIN32_REGISTRY_KEY_H__ */