/*
 * Registry Association Management
 *
 * HTREGMNG.H
 *
 * Copyright (c) 1995 Microsoft Inc.
 *
 */

#ifndef HTREGMNG_H
#define HTREGMNG_H

#ifdef __cplusplus
extern "C" {
#endif

/*
 * Registry Management Structures
 *
 * We need a way to specify a set of registry entries to
 * represent an association.   We can then test and
 * set the registry appropriately to restore associations
 * as needed
 *
 */

typedef enum 
{ 
    RC_ADD, 
    RC_RUNDLL,
    RC_DEL,              // Remove key
    RC_CALLBACK
} REGCMD;


// Flags for RegEntry

#define REF_NORMAL      0x00000000      // Required and forcefully set
#define REF_NOTNEEDED   0x00000001      // Ignored during checks
#define REF_IFEMPTY     0x00000002      // Set only if value/key is empty
#define REF_DONTINTRUDE 0x00000004      // Don't intrude at setup time
#define REF_NUKE        0x00000008      // Remove a key, regardless of the subkeys/values
#define REF_PRUNE       0x00000010      // Walk up this path and remove empty keys
#define REF_EDITFLAGS   0x00000020      // Remove edit flags only if the rest of the tree is empty


// NOTE: these structures are deliberately CHAR, not TCHAR, so we don't
// have to mess with the TEXT macro in all the tables.

typedef struct _RegEntry {
    REGCMD  regcmd;         // Special Handling
    DWORD   dwFlags;        // REF_* 
    HKEY    hkeyRoot;       // Root key
    LPCSTR  pszKey;         // Key Name
    LPCSTR  pszValName;     // Value Name
    DWORD   dwType;         // Value Type
    union 
    {
        LPARAM  lParam;     // lParam
        DWORD   dwSize;     // Value Size (in bytes)
    }DUMMYUNIONNAME;
    VOID const * pvValue;   // Value
} RegEntry;

typedef RegEntry RegList[];

typedef struct _RegSet {
    DWORD       cre;       // Count of entries
    const RegEntry * pre;
} RegSet;


#define IEA_NORMAL          0x00000001 // Only install IE assoc. if IE is currently owner.
#define IEA_FORCEIE         0x00000002 // Force IE to take over associations

HRESULT InstallIEAssociations(DWORD dwFlags);   // IEA_* flags

HRESULT UninstallPlatformRegItems(BOOL bIntegrated);
void    UninstallCurrentPlatformRegItems();
BOOL    IsCheckAssociationsOn();
void    SetCheckAssociations( BOOL );
BOOL    GetIEPath(LPSTR szPath, DWORD cch);
BOOL    IsIEDefaultBrowser(void);
BOOL IsIEDefaultBrowserQuick(void);
HRESULT ResetWebSettings(HWND hwnd, BOOL *pfChangedHomePage);

extern const TCHAR c_szCLSID[];

#ifdef __cplusplus
};
#endif

#endif /* HTREGMNG_H */