/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the mingw-w64 runtime package.
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 */
#ifndef _INC_NDATTRIB
#define _INC_NDATTRIB

#if (_WIN32_WINNT >= 0x0600)

/* In ndhelper.idl
typedef struct tagDIAG_SOCKADDR {
  USHORT family;
  CHAR   data[126];
} DIAG_SOCKADDR, *PDIAG_SOCKADDR;
*/

#ifdef __cplusplus
extern "C" {
#endif

typedef struct tagDIAG_SOCKADDR DIAG_SOCKADDR;

typedef enum tagATTRIBUTE_TYPE {
  AT_INVALID        = 0,
  AT_BOOLEAN,
  AT_INT8,
  AT_UINT8,
  AT_INT16,
  AT_UINT16,
  AT_INT32,
  AT_UINT32,
  AT_INT64,
  AT_UINT64,
  AT_STRING,
  AT_GUID,
  AT_LIFE_TIME,
  AT_SOCKADDR,
  AT_OCTET_STRING
} ATTRIBUTE_TYPE;

typedef enum tagREPAIR_SCOPE {
  RS_SYSTEM        = 0,
  RS_USER          = 1,
  RS_APPLICATION   = 2,
  RS_PROCESS       = 3
} REPAIR_SCOPE;

typedef enum tagREPAIR_RISK {
  RR_NOROLLBACK   = 0,
  RR_ROLLBACK     = 1,
  RR_NORISK       = 2
} REPAIR_RISK;

typedef enum tagUI_INFO_TYPE {
  UIT_NONE            = 0,
  UIT_SHELL_COMMAND,
  UIT_HELP_PANE,
  UIT_DUI
} UI_INFO_TYPE;

typedef enum tagPROBLEM_TYPE {
  PT_LOW_HEALTH              = 1,
  PT_LOWER_HEALTH            = 2,
  PT_DOWN_STREAM_HEALTH      = 4,
  PT_HIGH_UTILIZATION        = 8,
  PT_HIGHER_UTILIZATION      = 16,
  PT_UP_STREAM_UTILIZATION   = 32
} PROBLEM_TYPE;

typedef enum tagREPAIR_STATUS {
  RS_NOT_IMPLEMENTED   = 0,
  RS_REPAIRED          = 1,
  RS_UNREPAIRED        = 2,
  RS_DEFERRED          = 3,
  RS_USER_ACTION       = 4
} REPAIR_STATUS;

typedef struct tagLIFE_TIME {
  FILETIME startTime;
  FILETIME endTime;
} LIFE_TIME, *PLIFE_TIME;

typedef struct tagOCTET_STRING {
  DWORD dwLength;
  BYTE  *lpValue;
} OCTET_STRING, *POCTET_STRING;

typedef struct tagUiInfo {
  UI_INFO_TYPE type;
  __C89_NAMELESS union {
    LPWSTR pwzNull;
    ShellCommandInfo ShellInfo;
    LPWSTR pwzHelpURL;
    LPWSTR pwzDui;
  };
} UiInfo, *PUiInfo;

typedef struct tagRepairInfo {
  GUID            guid;
  LPWSTR          pwszClassName;
  LPWSTR          pwszDescription;
  DWORD           sidType;
  __LONG32            cost;
  ULONG           flags;
  REPAIR_SCOPE    scope;
  REPAIR_RISK     risk;
  UiInfo          UiInfo;
} RepairInfo, *PRepairInfo;

typedef struct tagShellCommandInfo {
  LPWSTR pwszOperation;
  LPWSTR pwszFile;
  LPWSTR pwszParameters;
  LPWSTR pwszDirectory;
  ULONG  nShowCmd;
} ShellCommandInfo, *PShellCommandInfo;

typedef struct tagHELPER_ATTRIBUTE {
  LPWSTR pwszName;
  ATTRIBUTE_TYPE  type;
  __C89_NAMELESS union {
    WINBOOL Boolean;
    char Char;
    byte Byte;
    short Short;
    WORD Word;
    int Int;
    DWORD DWord;
    LONGLONG Int64;
    ULONGLONG UInt64;
    LPWSTR PWStr;
    GUID Guid;
    LIFE_TYPE LifeTime;
    DIAG_SOCKADDR Address;
    OCTET_STRING OctetString;
  };
} HELPER_ATTRIBUTE;

#ifdef __cplusplus
}
#endif


#if (_WIN32_WINNT >= 0x0601)

#ifdef __cplusplus
extern "C" {
#endif

#define RCF_ISLEAF 0x1
#define RCF_ISCONFIRMED 0x2
#define RCF_ISTHIRDPARTY 0x4

typedef struct tagRepairInfoEx {
  RepairInfo repair;
  USHORT     repairRank;
} RepairInfoEx, *PRepairInfoEx;

typedef struct tagRootCauseInfo {
  LPWSTR       pwszDescription;
  GUID         rootCauseID;
  DWORD        rootCauseFlags;
  GUID         networkInterfaceID;
  RepairInfoEx *pRepairs;
  USHORT       repairCount;
} RootCauseInfo;

#ifdef __cplusplus
}
#endif

#endif /*(_WIN32_WINNT >= 0x0601)*/


#endif /*(_WIN32_WINNT >= 0x0600)*/

#endif /*_INC_NDATTRIB*/