#ifndef _RPC_REG_H /* _RPC_REG_H */
#define _RPC_REG_H
-#include "reg_objects.h"
-
/* RPC opnum */
#define REG_OPEN_HKCR 0x00
#define REG_OPEN_HKPD 0x03
#define REG_OPEN_HKU 0x04
#define REG_CLOSE 0x05
-#define REG_CREATE_KEY 0x06
+#define REG_CREATE_KEY_EX 0x06
#define REG_DELETE_KEY 0x07
#define REG_DELETE_VALUE 0x08
#define REG_ENUM_KEY 0x09
#define REG_GET_KEY_SEC 0x0c
#define REG_OPEN_ENTRY 0x0f
#define REG_QUERY_KEY 0x10
-#define REG_INFO 0x11
+#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 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"
+#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 REG_FULL_RESOURCE_DESCRIPTOR 9
#define REG_RESOURCE_REQUIREMENTS_LIST 10
+/*
+ * Registry key types
+ * Most keys are going to be GENERIC -- may need a better name?
+ * HKPD and HKPT are used by reg_perfcount.c
+ * they are special keys that contain performance data
+ */
+#define REG_KEY_GENERIC 0
+#define REG_KEY_HKPD 1
+#define REG_KEY_HKPT 2
+
/*
* container for function pointers to enumeration routines
- * for vitural registry view
+ * for virtual registry view
*/
typedef struct {
/* functions for enumerating subkeys and values */
- int (*subkey_fn)( char *key, REGSUBKEY_CTR *subkeys);
- int (*value_fn) ( char *key, REGVAL_CTR *val );
- BOOL (*store_subkeys_fn)( char *key, REGSUBKEY_CTR *subkeys );
- BOOL (*store_values_fn)( char *key, REGVAL_CTR *val );
+ 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 {
/* structure to store the registry handles */
typedef struct _RegistryKey {
-
- struct _RegistryKey *prev, *next;
-
- /* POLICY_HND hnd; */
- pstring name; /* full name of registry key */
- REGISTRY_HOOK *hook;
-
+ uint32 type;
+ char *name; /* full name of registry key */
+ uint32 access_granted;
+ REGISTRY_HOOK *hook;
} REGISTRY_KEY;
/*
/***********************************************/
typedef struct {
- POLICY_HND pol;
+ POLICY_HND handle;
uint32 sec_info;
uint32 ptr;
BUFHDR hdr_sec;
/***********************************************/
typedef struct {
- POLICY_HND pol;
+ POLICY_HND handle;
uint32 sec_info;
uint32 ptr;
BUFHDR hdr_sec;
/***********************************************/
typedef struct {
- POLICY_HND pol;
+ POLICY_HND handle;
UNISTR4 name;
uint32 type;
RPC_DATA_BLOB value;
/***********************************************/
typedef struct {
- POLICY_HND pnt_pol;
+ POLICY_HND handle;
UNISTR4 name;
- UNISTR4 class;
- uint32 reserved;
+ UNISTR4 key_class;
+ uint32 options;
uint32 access;
+
+ /* FIXME! collapse all this into one structure */
uint32 *sec_info;
uint32 ptr2;
BUFHDR hdr_sec;
uint32 ptr3;
SEC_DESC_BUF *data;
- uint32 unknown_2; /* 0x0000 0000 */
-} REG_Q_CREATE_KEY;
+
+ uint32 *disposition;
+} REG_Q_CREATE_KEY_EX;
typedef struct {
- POLICY_HND key_pol;
- uint32 unknown;
+ POLICY_HND handle;
+ uint32 disposition;
WERROR status;
-} REG_R_CREATE_KEY;
+} REG_R_CREATE_KEY_EX;
/***********************************************/
typedef struct {
- POLICY_HND pnt_pol;
+ POLICY_HND handle;
UNISTR4 name;
} REG_Q_DELETE_KEY;
typedef struct {
- POLICY_HND key_pol;
WERROR status;
} REG_R_DELETE_KEY;
/***********************************************/
typedef struct {
- POLICY_HND pnt_pol;
+ POLICY_HND handle;
UNISTR4 name;
} REG_Q_DELETE_VALUE;
typedef struct {
- POLICY_HND key_pol;
WERROR status;
} REG_R_DELETE_VALUE;
typedef struct {
POLICY_HND pol;
- UNISTR4 class;
+ UNISTR4 key_class;
} REG_Q_QUERY_KEY;
typedef struct {
- UNISTR4 class;
+ UNISTR4 key_class;
uint32 num_subkeys;
uint32 max_subkeylen;
uint32 reserved; /* 0x0000 0000 - according to MSDN (max_subkeysize?) */
/***********************************************/
typedef struct {
- POLICY_HND pol; /* policy handle */
+ POLICY_HND pol;
} REG_Q_GETVERSION;
typedef struct {
- uint32 unknown; /* 0x0500 0000 */
- WERROR status; /* return status */
+ uint32 win_version;
+ WERROR status;
} REG_R_GETVERSION;
uint32 ptr_buflen2;
uint32 buflen2;
-} REG_Q_INFO;
+} REG_Q_QUERY_VALUE;
typedef struct {
uint32 *type;
uint32 *buf_max_len;
uint32 *buf_len;
WERROR status; /* return status */
-} REG_R_INFO;
+} REG_R_QUERY_VALUE;
/***********************************************/
} REG_Q_OPEN_ENTRY;
typedef struct {
- POLICY_HND pol;
+ POLICY_HND handle;
WERROR status;
} REG_R_OPEN_ENTRY;