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

#include "rpc.h"
#include "rpcndr.h"

#ifndef __RPCNDR_H_VERSION__
#error This stub requires an updated version of <rpcndr.h>
#endif

#ifndef __mddefw_h__
#define __mddefw_h__

#include "unknwn.h"

#ifdef __cplusplus
extern "C" {
#endif

  void *__RPC_API MIDL_user_allocate(size_t);
  void __RPC_API MIDL_user_free(void *);

#ifndef _MD_DEFW_
#define _MD_DEFW_
#include <mdmsg.h>
#include <mdcommsg.h>

#define METADATA_MAX_NAME_LEN 256

#define METADATA_PERMISSION_READ 0x00000001
#define METADATA_PERMISSION_WRITE 0x00000002

  enum METADATATYPES {
    ALL_METADATA = 0,DWORD_METADATA = ALL_METADATA + 1,STRING_METADATA = DWORD_METADATA + 1,BINARY_METADATA = STRING_METADATA + 1,
    EXPANDSZ_METADATA = BINARY_METADATA + 1,MULTISZ_METADATA = EXPANDSZ_METADATA + 1,INVALID_END_METADATA = MULTISZ_METADATA + 1
  };

#define METADATA_NO_ATTRIBUTES 0
#define METADATA_INHERIT 0x00000001
#define METADATA_PARTIAL_PATH 0x00000002
#define METADATA_SECURE 0x00000004
#define METADATA_REFERENCE 0x00000008
#define METADATA_VOLATILE 0x00000010
#define METADATA_ISINHERITED 0x00000020
#define METADATA_INSERT_PATH 0x00000040
#define METADATA_LOCAL_MACHINE_ONLY 0x00000080
#define METADATA_NON_SECURE_ONLY 0x00000100

#define MD_BACKUP_OVERWRITE 0x00000001
#define MD_BACKUP_SAVE_FIRST 0x00000002
#define MD_BACKUP_FORCE_BACKUP 0x00000004

#define MD_BACKUP_NEXT_VERSION 0xffffffff
#define MD_BACKUP_HIGHEST_VERSION 0xfffffffe
#define MD_BACKUP_MAX_VERSION 9999
#define MD_BACKUP_MAX_LEN (100)

#define MD_DEFAULT_BACKUP_LOCATION TEXT("MDBackUp")

#define MD_HISTORY_LATEST 0x00000001

#define MD_EXPORT_INHERITED 0x00000001
#define MD_EXPORT_NODE_ONLY 0x00000002

#define MD_IMPORT_INHERITED 0x00000001
#define MD_IMPORT_NODE_ONLY 0x00000002
#define MD_IMPORT_MERGE 0x00000004

#define MD_INSERT_PATH_STRINGA "<%INSERT_PATH%>"
#define MD_INSERT_PATH_STRINGW L##"<%INSERT_PATH%>"
#define MD_INSERT_PATH_STRING TEXT("<%INSERT_PATH%>")

#define METADATA_MASTER_ROOT_HANDLE 0

  typedef struct _METADATA_RECORD {
    DWORD dwMDIdentifier;
    DWORD dwMDAttributes;
    DWORD dwMDUserType;
    DWORD dwMDDataType;
    DWORD dwMDDataLen;
    unsigned char *pbMDData;
    DWORD dwMDDataTag;
  } METADATA_RECORD;

  typedef struct _METADATA_RECORD *PMETADATA_RECORD;

  typedef struct _METADATA_GETALL_RECORD {
    DWORD dwMDIdentifier;
    DWORD dwMDAttributes;
    DWORD dwMDUserType;
    DWORD dwMDDataType;
    DWORD dwMDDataLen;
    DWORD dwMDDataOffset;
    DWORD dwMDDataTag;
  } METADATA_GETALL_RECORD;

  typedef struct _METADATA_GETALL_RECORD *PMETADATA_GETALL_RECORD;

  typedef struct _METADATA_GETALL_INTERNAL_RECORD {
    DWORD dwMDIdentifier;
    DWORD dwMDAttributes;
    DWORD dwMDUserType;
    DWORD dwMDDataType;
    DWORD dwMDDataLen;
    union {
      DWORD_PTR dwMDDataOffset;
      unsigned char *pbMDData;
    };
    DWORD dwMDDataTag;
  } METADATA_GETALL_INTERNAL_RECORD;

  typedef struct _METADATA_GETALL_INTERNAL_RECORD *PMETADATA_GETALL_INTERNAL_RECORD;
  typedef DWORD METADATA_HANDLE;
  typedef DWORD *PMETADATA_HANDLE;

  typedef struct _METADATA_HANDLE_INFO {
    DWORD dwMDPermissions;
    DWORD dwMDSystemChangeNumber;
  } METADATA_HANDLE_INFO;

  typedef struct _METADATA_HANDLE_INFO *PMETADATA_HANDLE_INFO;

#define MD_CHANGE_OBJECT MD_CHANGE_OBJECT_W
#define PMD_CHANGE_OBJECT PMD_CHANGE_OBJECT_W
  typedef struct _MD_CHANGE_OBJECT_W {
    LPWSTR pszMDPath;
    DWORD dwMDChangeType;
    DWORD dwMDNumDataIDs;
    DWORD *pdwMDDataIDs;
  } MD_CHANGE_OBJECT_W;

  typedef struct _MD_CHANGE_OBJECT_W *PMD_CHANGE_OBJECT_W;

#define MD_CHANGE_TYPE_DELETE_OBJECT 0x00000001
#define MD_CHANGE_TYPE_ADD_OBJECT 0x00000002
#define MD_CHANGE_TYPE_SET_DATA 0x00000004
#define MD_CHANGE_TYPE_DELETE_DATA 0x00000008
#define MD_CHANGE_TYPE_RENAME_OBJECT 0x00000010

#define MD_MAX_CHANGE_ENTRIES 100
#endif

  extern RPC_IF_HANDLE __MIDL_itf_mddefw_0000_v0_0_c_ifspec;
  extern RPC_IF_HANDLE __MIDL_itf_mddefw_0000_v0_0_s_ifspec;

#ifdef __cplusplus
}
#endif
#endif
