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/* low level structure to contain registry values */ 25 26struct regval_blob { 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}; 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 40struct registry_string { 41 size_t len; 42 char *str; 43}; 44 45struct 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 61struct regval_ctr { 62 uint32 num_values; 63 struct regval_blob **values; 64 int seqnum; 65}; 66 67/* container for registry subkey names */ 68 69struct 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 129struct registry_ops { 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, struct 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, struct 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)(struct regval_ctr *values); 146}; 147 148struct registry_hook { 149 const char *keyname; /* full path to name of key */ 150 struct registry_ops *ops; /* registry function hooks */ 151}; 152 153 154/* structure to store the registry handles */ 155 156struct registry_key_handle { 157 uint32 type; 158 char *name; /* full name of registry key */ 159 uint32 access_granted; 160 struct registry_ops *ops; 161}; 162 163struct registry_key { 164 struct registry_key_handle *key; 165 struct regsubkey_ctr *subkeys; 166 struct regval_ctr *values; 167 struct nt_user_token *token; 168}; 169 170#endif /* _REG_OBJECTS_H */ 171