/*
 * 				Shell Library definitions
 */
#include "wintypes.h"

#ifndef __WINE_WINREG_H
#define __WINE_WINREG_H

#include "windows.h"

/* FIXME: should be in security.h or whereever */
#ifndef READ_CONTROL
#define READ_CONTROL		0x00020000
#endif
#ifndef STANDARD_RIGHTS_READ
#define STANDARD_RIGHTS_READ	READ_CONTROL
#endif
#ifndef STANDARD_RIGHTS_WRITE
#define STANDARD_RIGHTS_WRITE	READ_CONTROL	/* FIXME: hmm? */
#endif
#ifndef STANDARD_RIGHTS_ALL
#define STANDARD_RIGHTS_ALL	0x001f0000
#endif
/* ... */


#define SHELL_ERROR_SUCCESS           0L
#define SHELL_ERROR_BADDB             1L
#define SHELL_ERROR_BADKEY            2L
#define SHELL_ERROR_CANTOPEN          3L
#define SHELL_ERROR_CANTREAD          4L
#define SHELL_ERROR_CANTWRITE         5L
#define SHELL_ERROR_OUTOFMEMORY       6L
#define SHELL_ERROR_INVALID_PARAMETER 7L
#define SHELL_ERROR_ACCESS_DENIED     8L

#define REG_NONE		0	/* no type */
#define REG_SZ                  1	/* string type (ASCII) */
#define REG_EXPAND_SZ		2	/* string, includes %ENVVAR% (expanded by caller) (ASCII) */
#define REG_BINARY		3	/* binary format, callerspecific */
/* YES, REG_DWORD == REG_DWORD_LITTLE_ENDIAN */
#define REG_DWORD		4	/* DWORD in little endian format */
#define REG_DWORD_LITTLE_ENDIAN	4	/* DWORD in little endian format */
#define REG_DWORD_BIG_ENDIAN	5	/* DWORD in big endian format  */
#define REG_LINK		6	/* symbolic link (UNICODE) */
#define REG_MULTI_SZ		7	/* multiple strings, delimited by \0, terminated by \0\0 (ASCII) */
#define REG_RESOURCE_LIST	8	/* resource list? huh? */
#define REG_FULL_RESOURCE_DESCRIPTOR	9	/* full resource descriptor? huh? */

#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	REG_OPTION_RESERVED	0x00000000
#define	REG_OPTION_NON_VOLATILE	0x00000000
#define	REG_OPTION_VOLATILE	0x00000001
#define	REG_OPTION_CREATE_LINK	0x00000002

#define REG_CREATED_NEW_KEY	0x00000001
#define REG_OPENED_EXISTING_KEY	0x00000002

#define KEY_QUERY_VALUE         0x00000001
#define KEY_SET_VALUE           0x00000002
#define KEY_CREATE_SUB_KEY      0x00000004
#define KEY_ENUMERATE_SUB_KEYS  0x00000008
#define KEY_NOTIFY              0x00000010
#define KEY_CREATE_LINK         0x00000020

#define KEY_READ                (STANDARD_RIGHTS_READ|	\
				 KEY_QUERY_VALUE|	\
				 KEY_ENUMERATE_SUB_KEYS|\
				 KEY_NOTIFY		\
				)
#define KEY_WRITE               (STANDARD_RIGHTS_WRITE|	\
				 KEY_SET_VALUE|		\
				 KEY_CREATE_SUB_KEY	\
				)
#define KEY_EXECUTE             KEY_READ
#define KEY_ALL_ACCESS          (STANDARD_RIGHTS_ALL|	\
				 KEY_READ|KEY_WRITE|	\
				 KEY_CREATE_LINK	\
				)
/* one value of a key */
typedef struct tagKEYVALUE {
	LPWSTR	name;	/* name of value (UNICODE) or NULL for win31 */
	DWORD	type;	/* type of value */
	DWORD	len;	/* length of data */
	DWORD	lastmodified; /* time of seconds since 1.1.1970 */
	LPBYTE	data;	/* content, may be strings, binaries, etc. */
} KEYVALUE,*LPKEYVALUE;

/* a registry key */
typedef struct tagKEYSTRUCT {
	LPWSTR			keyname;	/* name of THIS key (UNICODE) */
	DWORD			flags;		/* flags. */
	LPWSTR			class;
	/* values */
	DWORD			nrofvalues;	/* nr of values in THIS key */
	LPKEYVALUE		values;		/* values in THIS key */
	/* key management pointers */
	struct tagKEYSTRUCT	*next;		/* next key on same hierarchy */
	struct tagKEYSTRUCT	*nextsub;	/* keys that hang below THIS key */
} KEYSTRUCT, *LPKEYSTRUCT;

void SHELL_Init();
void SHELL_SaveRegistry();
void SHELL_LoadRegistry();
#endif  /* __WINE_WINREG_H */
