#ifndef _REG_OBJECTS_H /* _REG_OBJECTS_H */
#define _REG_OBJECTS_H
-/* structure to contain registry values */
+/* low level structure to contain registry values */
-typedef struct {
+struct regval_blob {
fstring valuename;
uint16 type;
/* this should be encapsulated in an RPC_DATA_BLOB */
uint32 size; /* in bytes */
uint8 *data_p;
-} REGISTRY_VALUE;
+};
/*
* A REG_SZ string is not necessarily NULL terminated. When retrieving it from
/* container for registry values */
-typedef struct {
+struct regval_ctr {
uint32 num_values;
- REGISTRY_VALUE **values;
+ struct regval_blob **values;
int seqnum;
-} REGVAL_CTR;
+};
/* container for registry subkey names */
-typedef struct {
- uint32 num_subkeys;
- char **subkeys;
- int seqnum;
-} REGSUBKEY_CTR;
+struct regsubkey_ctr;
/*
*
#define KEY_CURRENT_VERSION "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"
#define KEY_PERFLIB "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Perflib"
#define KEY_PERFLIB_009 "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Perflib\\009"
+#define KEY_GROUP_POLICY "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Group Policy"
+#define KEY_WINLOGON "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon"
#define KEY_SMBCONF "HKLM\\SOFTWARE\\Samba\\smbconf"
+#define KEY_SAMBA_GROUP_POLICY "HKLM\\SOFTWARE\\Samba\\Group Policy"
#define KEY_TREE_ROOT ""
+#define KEY_GP_MACHINE_POLICY "HKLM\\Software\\Policies"
+#define KEY_GP_MACHINE_WIN_POLICY "HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies"
+#define KEY_GP_USER_POLICY "HKCU\\Software\\Policies"
+#define KEY_GP_USER_WIN_POLICY "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies"
/*
* Registry key types
* Most keys are going to be GENERIC -- may need a better name?
* for virtual registry view
*/
-typedef struct {
+struct registry_ops {
/* functions for enumerating subkeys and values */
- int (*fetch_subkeys)( const char *key, REGSUBKEY_CTR *subkeys);
- int (*fetch_values) ( const char *key, REGVAL_CTR *val );
- bool (*store_subkeys)( const char *key, REGSUBKEY_CTR *subkeys );
- bool (*store_values)( const char *key, REGVAL_CTR *val );
+ int (*fetch_subkeys)( const char *key, struct regsubkey_ctr *subkeys);
+ int (*fetch_values) ( const char *key, struct regval_ctr *val );
+ bool (*store_subkeys)( const char *key, struct regsubkey_ctr *subkeys );
+ WERROR (*create_subkey)(const char *key, const char *subkey);
+ WERROR (*delete_subkey)(const char *key, const char *subkey);
+ bool (*store_values)( const char *key, struct regval_ctr *val );
bool (*reg_access_check)( const char *keyname, uint32 requested,
uint32 *granted,
const NT_USER_TOKEN *token );
struct security_descriptor **psecdesc);
WERROR (*set_secdesc)(const char *key,
struct security_descriptor *sec_desc);
- bool (*subkeys_need_update)(REGSUBKEY_CTR *subkeys);
- bool (*values_need_update)(REGVAL_CTR *values);
-} REGISTRY_OPS;
+ bool (*subkeys_need_update)(struct regsubkey_ctr *subkeys);
+ bool (*values_need_update)(struct regval_ctr *values);
+};
-typedef struct {
+struct registry_hook {
const char *keyname; /* full path to name of key */
- REGISTRY_OPS *ops; /* registry function hooks */
-} REGISTRY_HOOK;
+ struct registry_ops *ops; /* registry function hooks */
+};
/* structure to store the registry handles */
-typedef struct _RegistryKey {
+struct registry_key_handle {
uint32 type;
char *name; /* full name of registry key */
uint32 access_granted;
- REGISTRY_HOOK *hook;
-} REGISTRY_KEY;
+ struct registry_ops *ops;
+};
struct registry_key {
- REGISTRY_KEY *key;
- REGSUBKEY_CTR *subkeys;
- REGVAL_CTR *values;
+ struct registry_key_handle *key;
+ struct regsubkey_ctr *subkeys;
+ struct regval_ctr *values;
struct nt_user_token *token;
};