root/source3/include/reg_objects.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* 
   2    Samba's Internal Registry objects
   3    
   4    SMB parameters and setup
   5    Copyright (C) Gerald Carter                   2002-2006.
   6    
   7    This program is free software; you can redistribute it and/or modify
   8    it under the terms of the GNU General Public License as published by
   9    the Free Software Foundation; either version 3 of the License, or
  10    (at your option) any later version.
  11    
  12    This program 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
  15    GNU General Public License for more details.
  16    
  17    You should have received a copy of the GNU General Public License
  18    along with this program.  If not, see <http://www.gnu.org/licenses/>.
  19 */
  20 
  21 #ifndef _REG_OBJECTS_H /* _REG_OBJECTS_H */
  22 #define _REG_OBJECTS_H
  23 
  24 /* structure to contain registry values */
  25 
  26 typedef struct {
  27         fstring         valuename;
  28         uint16          type;
  29         /* this should be encapsulated in an RPC_DATA_BLOB */
  30         uint32          size;   /* in bytes */
  31         uint8           *data_p;
  32 } REGISTRY_VALUE;
  33 
  34 /*
  35  * A REG_SZ string is not necessarily NULL terminated. When retrieving it from
  36  * the net, we guarantee this however. A server might want to push it without
  37  * the terminator though.
  38  */
  39 
  40 struct registry_string {
  41         size_t len;
  42         char *str;
  43 };
  44 
  45 struct registry_value {
  46         enum winreg_Type type;
  47         union {
  48                 uint32 dword;
  49                 uint64 qword;
  50                 struct registry_string sz;
  51                 struct {
  52                         uint32 num_strings;
  53                         char **strings;
  54                 } multi_sz;
  55                 DATA_BLOB binary;
  56         } v;
  57 };
  58 
  59 /* container for registry values */
  60 
  61 typedef struct {
  62         uint32          num_values;
  63         REGISTRY_VALUE  **values;
  64         int seqnum;
  65 } REGVAL_CTR;
  66 
  67 /* container for registry subkey names */
  68 
  69 struct regsubkey_ctr;
  70 
  71 /*
  72  *
  73  * Macros that used to reside in rpc_reg.h
  74  *
  75  */
  76  
  77 #define HKEY_CLASSES_ROOT       0x80000000
  78 #define HKEY_CURRENT_USER       0x80000001
  79 #define HKEY_LOCAL_MACHINE      0x80000002
  80 #define HKEY_USERS              0x80000003
  81 #define HKEY_PERFORMANCE_DATA   0x80000004
  82 
  83 #define KEY_HKLM                "HKLM"
  84 #define KEY_HKU                 "HKU"
  85 #define KEY_HKCC                "HKCC"
  86 #define KEY_HKCR                "HKCR"
  87 #define KEY_HKPD                "HKPD"
  88 #define KEY_HKPT                "HKPT"
  89 #define KEY_HKPN                "HKPN"
  90 #define KEY_HKCU                "HKCU"
  91 #define KEY_HKDD                "HKDD"
  92 #define KEY_SERVICES            "HKLM\\SYSTEM\\CurrentControlSet\\Services"
  93 #define KEY_EVENTLOG            "HKLM\\SYSTEM\\CurrentControlSet\\Services\\Eventlog"
  94 #define KEY_SHARES              "HKLM\\SYSTEM\\CurrentControlSet\\Services\\LanmanServer\\Shares"
  95 #define KEY_NETLOGON_PARAMS     "HKLM\\SYSTEM\\CurrentControlSet\\Services\\Netlogon\\Parameters"
  96 #define KEY_TCPIP_PARAMS        "HKLM\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters"
  97 #define KEY_PROD_OPTIONS        "HKLM\\SYSTEM\\CurrentControlSet\\Control\\ProductOptions"
  98 #define KEY_PRINTING            "HKLM\\SYSTEM\\CurrentControlSet\\Control\\Print"
  99 #define KEY_PRINTING_2K         "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Print\\Printers"
 100 #define KEY_PRINTING_PORTS      "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Ports"
 101 #define KEY_CURRENT_VERSION     "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"
 102 #define KEY_PERFLIB             "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Perflib"
 103 #define KEY_PERFLIB_009         "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Perflib\\009"
 104 #define KEY_GROUP_POLICY        "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Group Policy"
 105 #define KEY_WINLOGON            "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon"
 106 #define KEY_SMBCONF             "HKLM\\SOFTWARE\\Samba\\smbconf"
 107 #define KEY_SAMBA_GROUP_POLICY  "HKLM\\SOFTWARE\\Samba\\Group Policy"
 108 #define KEY_TREE_ROOT           ""
 109 
 110 #define KEY_GP_MACHINE_POLICY           "HKLM\\Software\\Policies"
 111 #define KEY_GP_MACHINE_WIN_POLICY       "HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies"
 112 #define KEY_GP_USER_POLICY              "HKCU\\Software\\Policies"
 113 #define KEY_GP_USER_WIN_POLICY          "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies"
 114 /*
 115  * Registry key types
 116  *      Most keys are going to be GENERIC -- may need a better name?
 117  *      HKPD and HKPT are used by reg_perfcount.c
 118  *              they are special keys that contain performance data
 119  */
 120 #define REG_KEY_GENERIC         0
 121 #define REG_KEY_HKPD            1
 122 #define REG_KEY_HKPT            2
 123 
 124 /* 
 125  * container for function pointers to enumeration routines
 126  * for virtual registry view 
 127  */ 
 128  
 129 typedef struct {
 130         /* functions for enumerating subkeys and values */      
 131         int     (*fetch_subkeys)( const char *key, struct regsubkey_ctr *subkeys);
 132         int     (*fetch_values) ( const char *key, REGVAL_CTR *val );
 133         bool    (*store_subkeys)( const char *key, struct regsubkey_ctr *subkeys );
 134         WERROR  (*create_subkey)(const char *key, const char *subkey);
 135         WERROR  (*delete_subkey)(const char *key, const char *subkey);
 136         bool    (*store_values)( const char *key, REGVAL_CTR *val );
 137         bool    (*reg_access_check)( const char *keyname, uint32 requested,
 138                                      uint32 *granted,
 139                                      const NT_USER_TOKEN *token );
 140         WERROR (*get_secdesc)(TALLOC_CTX *mem_ctx, const char *key,
 141                               struct security_descriptor **psecdesc);
 142         WERROR (*set_secdesc)(const char *key,
 143                               struct security_descriptor *sec_desc);
 144         bool    (*subkeys_need_update)(struct regsubkey_ctr *subkeys);
 145         bool    (*values_need_update)(REGVAL_CTR *values);
 146 } REGISTRY_OPS;
 147 
 148 typedef struct {
 149         const char      *keyname;       /* full path to name of key */
 150         REGISTRY_OPS    *ops;           /* registry function hooks */
 151 } REGISTRY_HOOK;
 152 
 153 
 154 /* structure to store the registry handles */
 155 
 156 typedef struct _RegistryKey {
 157         uint32          type;
 158         char            *name;          /* full name of registry key */
 159         uint32          access_granted;
 160         REGISTRY_OPS    *ops;
 161 } REGISTRY_KEY;
 162 
 163 struct registry_key {
 164         REGISTRY_KEY *key;
 165         struct regsubkey_ctr *subkeys;
 166         REGVAL_CTR *values;
 167         struct nt_user_token *token;
 168 };
 169 
 170 #endif /* _REG_OBJECTS_H */

/* [<][>][^][v][top][bottom][index][help] */