
/* Do not include this before Windows.h */

/* ASM
; DO NOT INCLUDE THIS BEFORE WINDOWS.INC
*/

#define Dereference(x)  x=x;

/*XLATOFF*/
#pragma warning (disable:4209)      // turn off redefinition warning (with vmm.h)
/*XLATON*/

#ifndef _WINREG_
//  WINREG.H uses DECLARE_HANDLE(HKEY) giving incompatible types.
typedef DWORD       HKEY;
#endif

/*XLATOFF*/
#pragma warning (default:4209)      // turn on redefinition warning (with vmm.h)
/*XLATON*/

#define MAXKEYNAME      256
        // Max length of a key name string
#define MAXVALUENAME_LENGTH MAXKEYNAME
        // Max length of a value name string

//  When we need to increase the buffer to add one character, increase it by
//  (1/4)K so that we won't have to repeatly allocate for every new key stroke.
#define ALLOCATION_INCR                 256

// These file types are in the same order as the filer list in regedit.rc
// The list must start at 1
#define FILE_TYPE_REGEDIT5  1
#define FILE_TYPE_REGEDT32  2
#define FILE_TYPE_TEXT      3
#define FILE_TYPE_REGEDIT4  4

#ifndef REG_SZ
#define REG_SZ      0x0001
#endif

#ifndef REG_BINARY
#define REG_BINARY  0x0003
#endif

#ifndef REG_DWORD
#define REG_DWORD       0x0004
#endif

#ifndef FALSE
#define FALSE   0
#endif
#ifndef TRUE
#define TRUE    ~FALSE
#endif

/* following equates are also defined in Windows.h. To avoid warnings
 *  we should make these equates  conditional
 */


#ifndef ERROR_SUCCESS           
#define ERROR_SUCCESS           0L
#endif

#ifndef ERROR_FILE_NOT_FOUND
#define ERROR_FILE_NOT_FOUND        2L
#endif

#ifndef ERROR_ACCESS_DENIED
#define ERROR_ACCESS_DENIED              5L
#endif

#ifndef ERROR_BADDB
#define ERROR_BADDB                      1009L
#endif

#ifndef ERROR_MORE_DATA
#define ERROR_MORE_DATA                  234L
#endif

#ifndef ERROR_BADKEY
#define ERROR_BADKEY             1010L
#endif

#ifndef ERROR_CANTOPEN
#define ERROR_CANTOPEN                   1011L
#endif

#ifndef ERROR_CANTREAD
#define ERROR_CANTREAD                   1012L
#define ERROR_CANTWRITE                  1013L
#endif

#ifndef ERROR_REGISTRY_CORRUPT
#define ERROR_REGISTRY_CORRUPT           1015L
#define ERROR_REGISTRY_IO_FAILED         1016L
#endif

#ifndef ERROR_KEY_DELETED
#define ERROR_KEY_DELETED                1018L
#endif

#ifndef ERROR_OUTOFMEMORY
#define ERROR_OUTOFMEMORY          14L
#endif

#ifndef ERROR_INVALID_PARAMETER
#define ERROR_INVALID_PARAMETER        87L
#endif

#ifndef ERROR_LOCK_FAILED
#define ERROR_LOCK_FAILED                167L
#endif

#ifndef ERROR_NO_MORE_ITEMS
#define ERROR_NO_MORE_ITEMS       259L
#endif  

// INTERNAL

#ifndef ERROR_CANTOPEN16_FILENOTFOUND32
#define ERROR_CANTOPEN16_FILENOTFOUND32 0xffff0000
#define ERROR_CANTREAD16_FILENOTFOUND32 0xffff0001
#endif

#ifndef HKEY_CLASSES_ROOT
#define HKEY_CLASSES_ROOT          ((HKEY)0x80000000)
#endif

#ifndef HKEY_CURRENT_USER
#define HKEY_CURRENT_USER              ((HKEY)0x80000001)
#endif

#ifndef HKEY_LOCAL_MACHINE
#define HKEY_LOCAL_MACHINE             ((HKEY)0x80000002)
#endif

#ifndef HKEY_USERS
#define HKEY_USERS                     ((HKEY)0x80000003)
#endif

#ifndef HKEY_PERFORMANCE_DATA
#define HKEY_PERFORMANCE_DATA          ((HKEY)0x80000004)
#endif

#ifndef HKEY_CURRENT_CONFIG
#define HKEY_CURRENT_CONFIG            ((HKEY)0x80000005)
#endif

#ifndef HKEY_DYN_DATA
#define HKEY_DYN_DATA                  ((HKEY)0x80000006)
#endif

// INTERNAL

#ifndef HKEY_PREDEF_KEYS
#define HKEY_PREDEF_KEYS    7
#endif

#define MAXREGFILES     HKEY_PREDEF_KEYS    

// sub function indices for Registry services in VMM for 16 bit callers

#define RegOpenKey_Idx      0x100
#define RegCreateKey_Idx    0x101
#define RegCloseKey_Idx     0x102
#define RegDeleteKey_Idx    0x103
#define RegSetValue_Idx     0x104
#define RegQueryValue_Idx   0x105
#define RegEnumKey_Idx      0x106
#define RegDeleteValue_Idx  0x107
#define RegEnumValue_Idx    0x108
#define RegQueryValueEx_Idx 0x109
#define RegSetValueEx_Idx   0x10A
#define RegFlushKey_Idx     0x10B
#define RegLoadKey_Idx      0x10C
#define RegUnLoadKey_Idx    0x10D
#define RegSaveKey_Idx      0x10E
#define RegRestore_Idx      0x10F
#define RegRemapPreDefKey_Idx   0x110

// Data structure passed to SYSDM.CPL DMRegistryError function
//  After UI, the function is to call
//  RegRestore(DWORD iLevel, LPREGQRSTR lpRgRstr)
//

struct Reg_Query_Restore_s {
DWORD   dwRQR_Err;      // Error code
DWORD   hRQR_RootKey;       // Root key for file
DWORD   dwRQR_Reference;    // Reference data for RegRestore
TCHAR   szRQR_SubKey[MAXKEYNAME]; // Subkey (for hives) or NULL string
TCHAR   szRQR_FileName[MAX_PATH]; // File name of bad file
};
typedef struct Reg_Query_Restore_s REGQRSTR;
typedef REGQRSTR FAR * LPREGQRSTR;


// END INTERNAL
