2004-04-04 16:24:08 +00:00
/*
Unix SMB / CIFS implementation .
Registry interface
Copyright ( C ) Gerald Carter 2002.
Copyright ( C ) Jelmer Vernooij 2003 - 2004.
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation ; either version 2 of the License , or
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
along with this program ; if not , write to the Free Software
Foundation , Inc . , 675 Mass Ave , Cambridge , MA 0213 9 , USA .
*/
# ifndef _REGISTRY_H /* _REGISTRY_H */
# define _REGISTRY_H
2004-12-11 17:12:16 +00:00
/* Handles for the predefined keys */
2005-06-03 20:44:46 +00:00
# define HKEY_CLASSES_ROOT 0x80000000
# define HKEY_CURRENT_USER 0x80000001
# define HKEY_LOCAL_MACHINE 0x80000002
# define HKEY_USERS 0x80000003
# define HKEY_PERFORMANCE_DATA 0x80000004
# define HKEY_CURRENT_CONFIG 0x80000005
# define HKEY_DYN_DATA 0x80000006
# define HKEY_PERFORMANCE_TEXT 0x80000050
# define HKEY_PERFORMANCE_NLSTEXT 0x80000060
2004-04-04 16:24:08 +00:00
2004-12-10 20:07:04 +00:00
# define REG_DELETE -1
2004-04-04 16:24:08 +00:00
2004-09-22 12:32:31 +00:00
/*
* The general idea here is that every backend provides a ' hive ' . Combining
* various hives gives you a complete registry like windows has
*/
# define REGISTRY_INTERFACE_VERSION 1
/* structure to store the registry handles */
2005-09-13 17:28:18 +00:00
struct registry_key
{
char * name ;
const char * path ;
char * class_name ;
NTTIME last_mod ;
2004-09-22 12:32:31 +00:00
struct registry_hive * hive ;
void * backend_data ;
} ;
2005-09-13 17:28:18 +00:00
struct registry_value
{
2004-09-22 12:32:31 +00:00
char * name ;
2004-10-29 13:38:37 +00:00
unsigned int data_type ;
2005-09-03 17:17:30 +00:00
DATA_BLOB data ;
2004-09-22 12:32:31 +00:00
} ;
/* FIXME */
2005-09-13 17:28:18 +00:00
typedef void ( * reg_key_notification_function ) ( void ) ;
typedef void ( * reg_value_notification_function ) ( void ) ;
2004-09-22 12:32:31 +00:00
/*
* Container for function pointers to enumeration routines
* for virtual registry view
*
* Backends can provide :
* - just one hive ( example : nt4 , w95 )
2004-12-10 20:07:04 +00:00
* - several hives ( example : rpc ) .
2004-09-22 12:32:31 +00:00
*
2004-12-29 12:28:35 +00:00
* Backends should always do case - insensitive compares
* ( everything is case - insensitive but case - preserving ,
* just like the FS )
2005-09-04 17:26:23 +00:00
*
* There is no save function as all operations are expected to
* be atomic .
2004-09-22 12:32:31 +00:00
*/
2004-12-10 20:07:04 +00:00
struct hive_operations {
2004-09-22 12:32:31 +00:00
const char * name ;
/* Implement this one */
2004-12-10 20:07:04 +00:00
WERROR ( * open_hive ) ( struct registry_hive * , struct registry_key * * ) ;
2004-09-22 12:32:31 +00:00
/* Or this one */
2005-09-13 17:28:18 +00:00
WERROR ( * open_key ) ( TALLOC_CTX * , const struct registry_key * , const char * name , struct registry_key * * ) ;
2004-09-22 12:32:31 +00:00
2005-09-13 17:28:18 +00:00
WERROR ( * num_subkeys ) ( const struct registry_key * , uint32_t * count ) ;
WERROR ( * num_values ) ( const struct registry_key * , uint32_t * count ) ;
WERROR ( * get_subkey_by_index ) ( TALLOC_CTX * , const struct registry_key * , int idx , struct registry_key * * ) ;
2004-09-22 12:32:31 +00:00
/* Can not contain more then one level */
2005-09-13 17:28:18 +00:00
WERROR ( * get_subkey_by_name ) ( TALLOC_CTX * , const struct registry_key * , const char * name , struct registry_key * * ) ;
WERROR ( * get_value_by_index ) ( TALLOC_CTX * , const struct registry_key * , int idx , struct registry_value * * ) ;
2004-09-22 12:32:31 +00:00
/* Can not contain more then one level */
2005-09-13 17:28:18 +00:00
WERROR ( * get_value_by_name ) ( TALLOC_CTX * , const struct registry_key * , const char * name , struct registry_value * * ) ;
2004-09-22 12:32:31 +00:00
/* Security control */
2005-09-13 17:28:18 +00:00
WERROR ( * key_get_sec_desc ) ( TALLOC_CTX * , const struct registry_key * , struct security_descriptor * * ) ;
WERROR ( * key_set_sec_desc ) ( const struct registry_key * , const struct security_descriptor * ) ;
2004-09-22 12:32:31 +00:00
/* Notification */
2005-09-13 17:28:18 +00:00
WERROR ( * request_key_change_notify ) ( const struct registry_key * , reg_key_notification_function ) ;
WERROR ( * request_value_change_notify ) ( const struct registry_value * , reg_value_notification_function ) ;
2004-09-22 12:32:31 +00:00
/* Key management */
2005-09-13 17:28:18 +00:00
WERROR ( * add_key ) ( TALLOC_CTX * , const struct registry_key * , const char * name , uint32_t access_mask , struct security_descriptor * , struct registry_key * * ) ;
WERROR ( * del_key ) ( const struct registry_key * , const char * name ) ;
WERROR ( * flush_key ) ( const struct registry_key * ) ;
2004-09-22 12:32:31 +00:00
/* Value management */
2005-09-13 17:28:18 +00:00
WERROR ( * set_value ) ( const struct registry_key * , const char * name , uint32_t type , const DATA_BLOB data ) ;
WERROR ( * del_value ) ( const struct registry_key * , const char * valname ) ;
2004-09-22 12:32:31 +00:00
} ;
2005-09-13 17:28:18 +00:00
struct registry_hive
{
2004-12-10 20:07:04 +00:00
const struct hive_operations * functions ;
2004-09-22 12:32:31 +00:00
struct registry_key * root ;
2004-12-10 22:57:43 +00:00
void * backend_data ;
const char * location ;
2004-09-22 12:32:31 +00:00
} ;
/* Handle to a full registry
* contains zero or more hives */
struct registry_context {
2004-12-10 20:07:04 +00:00
void * backend_data ;
2005-01-31 15:58:54 +00:00
WERROR ( * get_predefined_key ) ( struct registry_context * , uint32_t hkey , struct registry_key * * ) ;
2004-09-22 12:32:31 +00:00
} ;
struct reg_init_function_entry {
2004-12-10 20:07:04 +00:00
const struct hive_operations * hive_functions ;
2004-09-22 12:32:31 +00:00
struct reg_init_function_entry * prev , * next ;
} ;
2005-09-29 11:51:06 +00:00
struct reg_diff_value
{
char * name ;
enum { REG_DIFF_DEL_VAL , REG_DIFF_SET_VAL } changetype ;
uint32_t type ;
DATA_BLOB data ;
} ;
struct reg_diff_key
{
char * name ;
enum { REG_DIFF_CHANGE_KEY , REG_DIFF_DEL_KEY } changetype ;
uint32_t numvalues ;
struct reg_diff_value * values ;
} ;
struct reg_diff
{
char * format ;
uint32_t numkeys ;
struct reg_diff_key * keys ;
} ;
2005-12-27 21:11:09 +00:00
# include "registry_proto.h"
2004-04-04 16:24:08 +00:00
# endif /* _REGISTRY_H */