typedef enum _EXPCMDSTATE {
  ECS_ENABLED,
  ECS_DISABLED,
  ECS_HIDDEN,
  ECS_CHECKBOX,
  ECS_CHECKED,
  ECS_RADIOCHECK
} EXPCMDSTATE;


typedef enum _EXPCMDFLAGS {
    ECF_DEFAULT = 0,
    ECF_HASSUBCOMMANDS  = 0x1,
    ECF_HASSPLITBUTTON  = 0x2,
    ECF_HIDELABEL   = 0x4,
    ECF_ISSEPARATOR = 0x8,
    ECF_HASLUASHIELD    = 0x10,
    ECF_SEPARATORBEFORE = 0x20,
    ECF_SEPARATORAFTER  = 0x40,
    ECF_ISDROPDOWN  = 0x80,
    ECF_TOGGLEABLE  = 0x100,
    ECF_AUTOMENUICONS   = 0x200
} EXPCMDFLAGS;

enum _SIGDN
{
    SIGDN_NORMALDISPLAY = 0,
    SIGDN_PARENTRELATIVEPARSING = 0x80018001,
    SIGDN_DESKTOPABSOLUTEPARSING    = 0x80028000,
    SIGDN_PARENTRELATIVEEDITING = 0x80031001,
    SIGDN_DESKTOPABSOLUTEEDITING    = 0x8004c000,
    SIGDN_FILESYSPATH   = 0x80058000,
    SIGDN_URL   = 0x80068000,
    SIGDN_PARENTRELATIVEFORADDRESSBAR   = 0x8007c001,
    SIGDN_PARENTRELATIVE    = 0x80080001,
    SIGDN_PARENTRELATIVEFORUI   = 0x80094001
}   SIGDN;

enum SICHINTF
{
    SICHINT_DISPLAY = 0,
    SICHINT_ALLFIELDS   = 0x80000000,
    SICHINT_CANONICAL   = 0x10000000,
    SICHINT_TEST_FILESYSPATH_IF_NOT_EQUAL   = 0x20000000
} ;

enum GETPROPERTYSTOREFLAGS
{
    GPS_DEFAULT = 0,
    GPS_HANDLERPROPERTIESONLY   = 0x1,
    GPS_READWRITE   = 0x2,
    GPS_TEMPORARY   = 0x4,
    GPS_FASTPROPERTIESONLY  = 0x8,
    GPS_OPENSLOWITEM    = 0x10,
    GPS_DELAYCREATION   = 0x20,
    GPS_BESTEFFORT  = 0x40,
    GPS_NO_OPLOCK   = 0x80,
    GPS_PREFERQUERYPROPERTIES   = 0x100,
    GPS_EXTRINSICPROPERTIES = 0x200,
    GPS_EXTRINSICPROPERTIESONLY = 0x400,
    GPS_MASK_VALID  = 0x7ff
}   GETPROPERTYSTOREFLAGS;

enum SIATTRIBFLAGS
{
    SIATTRIBFLAGS_AND   = 0x1,
    SIATTRIBFLAGS_OR    = 0x2,
    SIATTRIBFLAGS_APPCOMPAT = 0x3,
    SIATTRIBFLAGS_MASK  = 0x3,
    SIATTRIBFLAGS_ALLITEMS  = 0x4000
};


typedef struct tagBIND_OPTS {
  DWORD cbStruct;
  DWORD grfFlags;
  DWORD grfMode;
  DWORD dwTickCountDeadline;
} BIND_OPTS, *LPBIND_OPTS;



typedef struct _tagpropertykey
{
  GUID fmtid;
  DWORD pid;
}PROPERTYKEY, *REFPROPERTYKEY;


typedef struct tagSTATSTG
{
  LPOLESTR pwcsName;
  DWORD type;
  ULARGE_INTEGER cbSize;
  FILETIME mtime;
  FILETIME ctime;
  FILETIME atime;
  DWORD grfMode;
  DWORD grfLocksSupported;
  CLSID clsid;
  DWORD grfStateBits;
  DWORD reserved;
}STATSTG;