#ifndef _RPC_REG_H
#define _RPC_REG_H
#define REG_OPEN_HKCR 0x00
#define REG_OPEN_HKLM 0x02
#define REG_OPEN_HKPD 0x03
#define REG_OPEN_HKU 0x04
#define REG_CLOSE 0x05
#define REG_CREATE_KEY_EX 0x06
#define REG_DELETE_KEY 0x07
#define REG_DELETE_VALUE 0x08
#define REG_ENUM_KEY 0x09
#define REG_ENUM_VALUE 0x0a
#define REG_FLUSH_KEY 0x0b
#define REG_GET_KEY_SEC 0x0c
#define REG_OPEN_ENTRY 0x0f
#define REG_QUERY_KEY 0x10
#define REG_QUERY_VALUE 0x11
#define REG_RESTORE_KEY 0x13
#define REG_SAVE_KEY 0x14
#define REG_SET_KEY_SEC 0x15
#define REG_SET_VALUE 0x16
#define REG_SHUTDOWN 0x18
#define REG_ABORT_SHUTDOWN 0x19
#define REG_OPEN_HKPT 0x20
#define REG_GETVERSION 0x1a
#define REG_SHUTDOWN_EX 0x1e
#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 KEY_HKLM "HKLM"
#define KEY_HKU "HKU"
#define KEY_HKCR "HKCR"
#define KEY_HKPD "HKPD"
#define KEY_HKPT "HKPT"
#define KEY_SERVICES "HKLM\\SYSTEM\\CurrentControlSet\\Services"
#define KEY_PRINTING "HKLM\\SYSTEM\\CurrentControlSet\\Control\\Print"
#define KEY_PRINTING_2K "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Print\\Printers"
#define KEY_PRINTING_PORTS "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Ports"
#define KEY_EVENTLOG "HKLM\\SYSTEM\\CurrentControlSet\\Services\\Eventlog"
#define KEY_SHARES "HKLM\\SYSTEM\\CurrentControlSet\\Services\\LanmanServer\\Shares"
#define KEY_TREE_ROOT ""
#define REG_NONE 0
#define REG_SZ 1
#define REG_EXPAND_SZ 2
#define REG_BINARY 3
#define REG_DWORD 4
#define REG_DWORD_LE 4
#define REG_DWORD_BE 5
#define REG_LINK 6
#define REG_MULTI_SZ 7
#define REG_RESOURCE_LIST 8
#define REG_FULL_RESOURCE_DESCRIPTOR 9
#define REG_RESOURCE_REQUIREMENTS_LIST 10
#define REG_KEY_GENERIC 0
#define REG_KEY_HKPD 1
#define REG_KEY_HKPT 2
typedef struct {
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 );
BOOL (*reg_access_check)( const char *keyname, uint32 requested, uint32 *granted, NT_USER_TOKEN *token );
} REGISTRY_OPS;
typedef struct {
const char *keyname;
REGISTRY_OPS *ops;
} REGISTRY_HOOK;
typedef struct _RegistryKey {
uint32 type;
char *name;
uint32 access_granted;
REGISTRY_HOOK *hook;
} REGISTRY_KEY;
typedef struct {
uint16 *server;
uint32 access;
} REG_Q_OPEN_HIVE;
typedef struct {
POLICY_HND pol;
WERROR status;
} REG_R_OPEN_HIVE;
typedef struct {
POLICY_HND pol;
} REG_Q_FLUSH_KEY;
typedef struct {
WERROR status;
} REG_R_FLUSH_KEY;
typedef struct {
POLICY_HND handle;
uint32 sec_info;
uint32 ptr;
BUFHDR hdr_sec;
SEC_DESC_BUF *data;
} REG_Q_SET_KEY_SEC;
typedef struct {
WERROR status;
} REG_R_SET_KEY_SEC;
typedef struct {
POLICY_HND handle;
uint32 sec_info;
uint32 ptr;
BUFHDR hdr_sec;
SEC_DESC_BUF *data;
} REG_Q_GET_KEY_SEC;
typedef struct {
uint32 sec_info;
uint32 ptr;
BUFHDR hdr_sec;
SEC_DESC_BUF *data;
WERROR status;
} REG_R_GET_KEY_SEC;
typedef struct {
POLICY_HND handle;
UNISTR4 name;
uint32 type;
RPC_DATA_BLOB value;
uint32 size;
} REG_Q_SET_VALUE;
typedef struct {
WERROR status;
} REG_R_SET_VALUE;
typedef struct {
POLICY_HND pol;
uint32 val_index;
UNISTR4 name;
uint32 *type;
REGVAL_BUFFER *value;
uint32 *buffer_len;
uint32 *name_len;
} REG_Q_ENUM_VALUE;
typedef struct {
UNISTR4 name;
uint32 *type;
REGVAL_BUFFER *value;
uint32 *buffer_len1;
uint32 *buffer_len2;
WERROR status;
} REG_R_ENUM_VALUE;
typedef struct {
POLICY_HND handle;
UNISTR4 name;
UNISTR4 key_class;
uint32 options;
uint32 access;
uint32 *sec_info;
uint32 ptr2;
BUFHDR hdr_sec;
uint32 ptr3;
SEC_DESC_BUF *data;
uint32 *disposition;
} REG_Q_CREATE_KEY_EX;
typedef struct {
POLICY_HND handle;
uint32 disposition;
WERROR status;
} REG_R_CREATE_KEY_EX;
typedef struct {
POLICY_HND handle;
UNISTR4 name;
} REG_Q_DELETE_KEY;
typedef struct {
WERROR status;
} REG_R_DELETE_KEY;
typedef struct {
POLICY_HND handle;
UNISTR4 name;
} REG_Q_DELETE_VALUE;
typedef struct {
WERROR status;
} REG_R_DELETE_VALUE;
typedef struct {
POLICY_HND pol;
UNISTR4 key_class;
} REG_Q_QUERY_KEY;
typedef struct {
UNISTR4 key_class;
uint32 num_subkeys;
uint32 max_subkeylen;
uint32 reserved;
uint32 num_values;
uint32 max_valnamelen;
uint32 max_valbufsize;
uint32 sec_desc;
NTTIME mod_time;
WERROR status;
} REG_R_QUERY_KEY;
typedef struct {
POLICY_HND pol;
} REG_Q_GETVERSION;
typedef struct {
uint32 win_version;
WERROR status;
} REG_R_GETVERSION;
typedef struct {
POLICY_HND pol;
UNISTR4 filename;
uint32 flags;
} REG_Q_RESTORE_KEY;
typedef struct {
WERROR status;
} REG_R_RESTORE_KEY;
typedef struct {
uint32 max_len;
uint32 len;
SEC_DESC *secdesc;
} REG_SEC_DESC_BUF;
typedef struct {
uint32 size;
REG_SEC_DESC_BUF secdesc;
uint8 inherit;
} SECURITY_ATTRIBUTE;
typedef struct {
POLICY_HND pol;
UNISTR4 filename;
SECURITY_ATTRIBUTE *sec_attr;
} REG_Q_SAVE_KEY;
typedef struct {
WERROR status;
} REG_R_SAVE_KEY;
typedef struct {
POLICY_HND pol;
} REG_Q_CLOSE;
typedef struct {
POLICY_HND pol;
WERROR status;
} REG_R_CLOSE;
typedef struct {
POLICY_HND pol;
uint32 key_index;
uint16 key_name_len;
uint16 unknown_1;
uint32 ptr1;
uint32 unknown_2;
uint8 pad1[8];
uint32 ptr2;
uint8 pad2[8];
uint32 ptr3;
NTTIME time;
} REG_Q_ENUM_KEY;
typedef struct {
UNISTR4 keyname;
UNISTR4 *classname;
NTTIME *time;
WERROR status;
} REG_R_ENUM_KEY;
typedef struct {
POLICY_HND pol;
UNISTR4 name;
uint32 ptr_reserved;
uint32 ptr_buf;
uint32 ptr_bufsize;
uint32 bufsize;
uint32 buf_unk;
uint32 unk1;
uint32 ptr_buflen;
uint32 buflen;
uint32 ptr_buflen2;
uint32 buflen2;
} REG_Q_QUERY_VALUE;
typedef struct {
uint32 *type;
REGVAL_BUFFER *value;
uint32 *buf_max_len;
uint32 *buf_len;
WERROR status;
} REG_R_QUERY_VALUE;
typedef struct {
POLICY_HND pol;
UNISTR4 name;
uint32 unknown_0;
uint32 access;
} REG_Q_OPEN_ENTRY;
typedef struct {
POLICY_HND handle;
WERROR status;
} REG_R_OPEN_ENTRY;
typedef struct {
uint16 *server;
UNISTR4 *message;
uint32 timeout;
uint8 force;
uint8 reboot;
} REG_Q_SHUTDOWN;
typedef struct {
WERROR status;
} REG_R_SHUTDOWN;
typedef struct {
uint16 *server;
UNISTR4 *message;
uint32 timeout;
uint8 force;
uint8 reboot;
uint32 reason;
} REG_Q_SHUTDOWN_EX;
typedef struct {
WERROR status;
} REG_R_SHUTDOWN_EX;
typedef struct {
uint16 *server;
} REG_Q_ABORT_SHUTDOWN;
typedef struct {
WERROR status;
} REG_R_ABORT_SHUTDOWN;
#endif