2004-04-04 16:24:08 +00:00
/*
Unix SMB / CIFS implementation .
Registry interface
Copyright ( C ) Gerald Carter 2002.
2007-08-26 15:16:40 +00:00
Copyright ( C ) Jelmer Vernooij 2003 - 2007.
2004-04-04 16:24:08 +00:00
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
2007-07-10 02:07:03 +00:00
the Free Software Foundation ; either version 3 of the License , or
2004-04-04 16:24:08 +00:00
( 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
2007-07-10 02:07:03 +00:00
along with this program . If not , see < http : //www.gnu.org/licenses/>.
2004-04-04 16:24:08 +00:00
*/
# ifndef _REGISTRY_H /* _REGISTRY_H */
# define _REGISTRY_H
2007-08-26 15:16:40 +00:00
struct registry_context ;
2007-08-30 23:15:12 +00:00
# include <talloc.h>
2006-03-18 15:42:57 +00:00
# include "librpc/gen_ndr/security.h"
2007-08-26 15:16:40 +00:00
# include "lib/registry/hive.h"
2007-09-23 21:35:03 +00:00
# include "libcli/util/ntstatus.h"
2006-03-18 15:42:57 +00:00
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
2007-08-26 15:16:40 +00:00
# define HKEY_FIRST HKEY_CLASSES_ROOT
# define HKEY_LAST HKEY_PERFORMANCE_NLSTEXT
2006-04-30 16:09:00 +00:00
struct reg_predefined_key {
uint32_t handle ;
const char * name ;
} ;
extern const struct reg_predefined_key reg_predefined_keys [ ] ;
2006-04-24 16:16:43 +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
2007-08-26 15:16:40 +00:00
struct reg_key_operations ;
2004-09-22 12:32:31 +00:00
/* structure to store the registry handles */
2005-09-13 17:28:18 +00:00
struct registry_key
{
2007-08-26 15:16:40 +00:00
struct registry_context * context ;
2004-09-22 12:32:31 +00:00
} ;
2007-08-26 15:16:40 +00:00
# include "lib/registry/patchfile.h"
2005-09-13 17:28:18 +00:00
struct registry_value
{
2006-08-22 18:50:03 +00:00
const 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
2006-11-07 00:48:36 +00:00
struct cli_credentials ;
2007-08-26 15:16:40 +00:00
struct registry_context ;
2006-11-07 00:48:36 +00:00
2007-08-26 15:16:40 +00:00
struct registry_operations {
2006-08-22 18:50:03 +00:00
const char * name ;
2005-09-29 11:51:06 +00:00
2007-08-26 15:16:40 +00:00
WERROR ( * get_key_info ) ( TALLOC_CTX * mem_ctx ,
const struct registry_key * key ,
const char * * classname ,
uint32_t * numsubkeys ,
uint32_t * numvalues ,
NTTIME * last_change_time ) ;
WERROR ( * flush_key ) ( struct registry_key * key ) ;
WERROR ( * get_predefined_key ) ( const struct registry_context * ctx ,
uint32_t key_id ,
struct registry_key * * key ) ;
WERROR ( * open_key ) ( TALLOC_CTX * mem_ctx ,
struct registry_key * parent ,
const char * path ,
struct registry_key * * key ) ;
WERROR ( * create_key ) ( TALLOC_CTX * mem_ctx ,
struct registry_key * parent ,
const char * name ,
const char * key_class ,
struct security_descriptor * security ,
struct registry_key * * key ) ;
WERROR ( * delete_key ) ( struct registry_key * key , const char * name ) ;
WERROR ( * delete_value ) ( struct registry_key * key , const char * name ) ;
WERROR ( * enum_key ) ( TALLOC_CTX * mem_ctx ,
const struct registry_key * key , uint32_t idx ,
const char * * name ,
const char * * keyclass ,
NTTIME * last_changed_time ) ;
WERROR ( * enum_value ) ( TALLOC_CTX * mem_ctx ,
const struct registry_key * key , uint32_t idx ,
const char * * name ,
uint32_t * type ,
DATA_BLOB * data ) ;
WERROR ( * get_security ) ( TALLOC_CTX * mem_ctx ,
const struct registry_key * key ,
struct security_descriptor * * security ) ;
WERROR ( * set_security ) ( struct registry_key * key ,
const struct security_descriptor * security ) ;
WERROR ( * load_key ) ( struct registry_key * key ,
const char * key_name ,
const char * path ) ;
WERROR ( * unload_key ) ( struct registry_key * key , const char * name ) ;
WERROR ( * notify_value_change ) ( struct registry_key * key ,
reg_value_notification_function fn ) ;
WERROR ( * get_value ) ( TALLOC_CTX * mem_ctx ,
const struct registry_key * key ,
const char * name ,
uint32_t * type ,
DATA_BLOB * data ) ;
WERROR ( * set_value ) ( struct registry_key * key ,
const char * name ,
uint32_t type ,
const DATA_BLOB data ) ;
} ;
/**
* Handle to a full registry
* contains zero or more hives
*/
struct registry_context {
const struct registry_operations * ops ;
2005-09-29 11:51:06 +00:00
} ;
2006-03-21 01:30:22 +00:00
struct auth_session_info ;
2006-04-27 19:50:13 +00:00
struct event_context ;
2006-03-21 01:30:22 +00:00
2007-08-26 15:16:40 +00:00
/**
* Open the locally defined registry .
*/
2007-08-27 21:17:29 +00:00
WERROR reg_open_local ( TALLOC_CTX * mem_ctx ,
2007-03-13 20:08:44 +00:00
struct registry_context * * ctx ,
struct auth_session_info * session_info ,
struct cli_credentials * credentials ) ;
2007-08-27 21:17:29 +00:00
WERROR reg_open_samba ( TALLOC_CTX * mem_ctx ,
2007-08-26 15:16:40 +00:00
struct registry_context * * ctx ,
struct auth_session_info * session_info ,
struct cli_credentials * credentials ) ;
/**
* Open the registry on a remote machine .
*/
2007-08-27 21:17:29 +00:00
WERROR reg_open_remote ( struct registry_context * * ctx ,
2007-03-13 20:44:14 +00:00
struct auth_session_info * session_info ,
struct cli_credentials * credentials ,
const char * location , struct event_context * ev ) ;
2007-08-27 21:17:29 +00:00
WERROR reg_open_wine ( struct registry_context * * ctx , const char * path ) ;
2007-08-26 15:16:40 +00:00
2007-08-27 21:17:29 +00:00
const char * reg_get_predef_name ( uint32_t hkey ) ;
WERROR reg_get_predefined_key_by_name ( struct registry_context * ctx ,
2007-08-26 15:16:40 +00:00
const char * name ,
struct registry_key * * key ) ;
2007-08-27 21:17:29 +00:00
WERROR reg_get_predefined_key ( const struct registry_context * ctx ,
2007-08-26 15:16:40 +00:00
uint32_t hkey ,
struct registry_key * * key ) ;
2007-08-27 21:17:29 +00:00
WERROR reg_open_key ( TALLOC_CTX * mem_ctx , struct registry_key * parent ,
2007-08-26 15:16:40 +00:00
const char * name , struct registry_key * * result ) ;
2007-08-27 21:17:29 +00:00
WERROR reg_key_get_value_by_index ( TALLOC_CTX * mem_ctx ,
2007-08-26 15:16:40 +00:00
const struct registry_key * key , uint32_t idx ,
const char * * name ,
uint32_t * type ,
DATA_BLOB * data ) ;
2007-08-27 21:17:29 +00:00
WERROR reg_key_get_info ( TALLOC_CTX * mem_ctx ,
2007-08-26 15:16:40 +00:00
const struct registry_key * key ,
const char * * class_name ,
uint32_t * num_subkeys ,
uint32_t * num_values ,
NTTIME * last_change_time ) ;
2007-08-27 21:17:29 +00:00
WERROR reg_key_get_subkey_by_index ( TALLOC_CTX * mem_ctx ,
2007-08-26 15:16:40 +00:00
const struct registry_key * key ,
int idx ,
const char * * name ,
const char * * classname ,
NTTIME * last_mod_time ) ;
WERROR reg_key_get_subkey_by_name ( TALLOC_CTX * mem_ctx ,
const struct registry_key * key ,
const char * name ,
struct registry_key * * subkey ) ;
2007-08-27 21:17:29 +00:00
WERROR reg_key_get_value_by_name ( TALLOC_CTX * mem_ctx ,
2007-08-26 15:16:40 +00:00
const struct registry_key * key ,
const char * name ,
uint32_t * type ,
DATA_BLOB * data ) ;
2007-08-27 21:17:29 +00:00
WERROR reg_key_del ( struct registry_key * parent , const char * name ) ;
WERROR reg_key_add_name ( TALLOC_CTX * mem_ctx ,
2007-08-26 15:16:40 +00:00
struct registry_key * parent , const char * name ,
const char * classname ,
struct security_descriptor * desc ,
struct registry_key * * newkey ) ;
2007-08-27 21:17:29 +00:00
WERROR reg_val_set ( struct registry_key * key , const char * value ,
2007-08-26 15:16:40 +00:00
uint32_t type , DATA_BLOB data ) ;
2007-08-27 21:17:29 +00:00
WERROR reg_get_sec_desc ( TALLOC_CTX * ctx , const struct registry_key * key , struct security_descriptor * * secdesc ) ;
WERROR reg_del_value ( struct registry_key * key , const char * valname ) ;
WERROR reg_key_flush ( struct registry_key * key ) ;
2007-08-26 15:16:40 +00:00
WERROR reg_create_key ( TALLOC_CTX * mem_ctx ,
struct registry_key * parent ,
2007-03-13 20:08:44 +00:00
2007-08-26 15:16:40 +00:00
const char * name ,
const char * key_class ,
struct security_descriptor * security ,
struct registry_key * * key ) ;
2007-03-13 20:08:44 +00:00
2007-08-26 15:16:40 +00:00
/* Utility functions */
2007-08-27 21:17:29 +00:00
const char * str_regtype ( int type ) ;
char * reg_val_data_string ( TALLOC_CTX * mem_ctx , uint32_t type ,
2007-08-26 15:16:40 +00:00
const DATA_BLOB data ) ;
2007-08-27 21:17:29 +00:00
char * reg_val_description ( TALLOC_CTX * mem_ctx , const char * name ,
2007-08-26 15:16:40 +00:00
uint32_t type , const DATA_BLOB data ) ;
2007-08-27 21:17:29 +00:00
bool reg_string_to_val ( TALLOC_CTX * mem_ctx , const char * type_str , const char * data_str , uint32_t * type , DATA_BLOB * data ) ;
2007-03-13 20:08:44 +00:00
WERROR reg_open_key_abs ( TALLOC_CTX * mem_ctx , struct registry_context * handle , const char * name , struct registry_key * * result ) ;
WERROR reg_key_del_abs ( struct registry_context * ctx , const char * path ) ;
WERROR reg_key_add_abs ( TALLOC_CTX * mem_ctx , struct registry_context * ctx , const char * path , uint32_t access_mask , struct security_descriptor * sec_desc , struct registry_key * * result ) ;
2007-08-26 15:16:40 +00:00
WERROR reg_load_key ( struct registry_context * ctx , struct registry_key * key ,
const char * name , const char * filename ) ;
2007-03-13 20:08:44 +00:00
2007-08-26 15:16:40 +00:00
WERROR reg_mount_hive ( struct registry_context * rctx ,
struct hive_key * hive_key ,
uint32_t key_id ,
const char * * elements ) ;
2007-03-13 20:08:44 +00:00
2007-08-26 15:16:40 +00:00
struct registry_key * reg_import_hive_key ( struct registry_context * ctx ,
struct hive_key * hive ,
uint32_t predef_key ,
const char * * elements ) ;
2007-08-27 22:01:58 +00:00
WERROR reg_get_security ( TALLOC_CTX * mem_ctx ,
const struct registry_key * key ,
struct security_descriptor * * security ) ;
WERROR reg_set_security ( struct registry_key * key ,
struct security_descriptor * security ) ;
2005-12-27 21:11:09 +00:00
2007-03-13 20:44:14 +00:00
2004-04-04 16:24:08 +00:00
# endif /* _REGISTRY_H */