/**
 * 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.PD within this package.
 */
#ifndef _INC_CLFS
#define _INC_CLFS
#if (_WIN32_WINNT >= 0x0600)
#ifdef __cplusplus
extern "C" {
#endif

typedef enum  {
  ClfsContextNone       = 0x00,
  ClfsContextUndoNext,
  ClfsContextPrevious,
  ClfsContextForward 
} CLFS_CONTEXT_MODE, *PCLFS_CONTEXT_MODE, **PPCLFS_CONTEXT_MODE;

typedef enum _CLFS_IOSTATS_CLASS {
  ClfsIoStatsDefault   = 0x0000,
  ClfsIoStatsMax       = 0xFFFF 
} CLFS_IOSTATS_CLASS, *PCLFS_IOSTATS_CLASS, **PPCLFS_IOSTATS_CLASS;

typedef enum _CLFS_LOG_ARCHIVE_MODE {
  ClfsLogArchiveEnabled    = 0x01,
  ClfsLogArchiveDisabled   = 0x02 
} CLFS_LOG_ARCHIVE_MODE, *PCLFS_LOG_ARCHIVE_MODE;

typedef enum _CLFS_RECORD_TYPE {
  ClfsDataRecord = 0x01,
  ClfsRestartRecord = 0x02,
  ClfsClientRecord = 0x3F 
} CLFS_RECORD_TYPE, *PCLFS_RECORD_TYPE;

typedef union _CLFS_LSN {
  ULONGLONG Internal;
} CLFS_LSN, *PCLFS_LSN;

/*http://msdn.microsoft.com/en-us/library/bb540355%28VS.85%29.aspx*/
typedef enum _CLFS_SCAN_MODE {
  CLFS_SCAN_INIT = 0x01,
  CLFS_SCAN_FORWARD = 0x02,
  CLFS_SCAN_BACKWARD = 0x04,
  CLFS_SCAN_CLOSE = 0x08,
  CLFS_SCAN_INITIALIZED = 0x10,
  CLFS_SCAN_BUFFERED = 0x20
} CLFS_SCAN_MODE;

/* enum guessed from http://msdn.microsoft.com/en-us/library/bb540336%28VS.85%29.aspx */
typedef enum _CLFS_CONTAINER_STATE {
  ClfsContainerInitializing,
  ClfsContainerInactive,
  ClfsContainerActive,
  ClfsContainerActivePendingDelete,
  ClfsContainerPendingArchive,
  ClfsContainerPendingArchiveAndDelete
} CLFS_CONTAINER_STATE;
typedef DWORD CLFS_CONTAINER_ID;

/* Goes in wdm.h */
typedef struct _CLFS_CONTAINER_INFORMATION {
  ULONG                FileAttributes;
  ULONGLONG            CreationTime;
  ULONGLONG            LastAccessTime;
  ULONGLONG            LastWriteTime;
  LONGLONG             ContainerSize;
  ULONG                FileNameActualLength;
  ULONG                FileNameLength;
  WCHAR                FileName[MAX_PATH];
  CLFS_CONTAINER_STATE State;
  CLFS_CONTAINER_ID    PhysicalContainerId;
  CLFS_CONTAINER_ID    LogicalContainerId;
} CLFS_CONTAINER_INFORMATION, *PCLFS_CONTAINER_INFORMATION, **PPCLFS_CONTAINER_INFORMATION;
/**/

typedef struct _CLFS_IO_STATISTICS_HEADER {
  UCHAR              ubMajorVersion;
  UCHAR              ubMinorVersion;
  CLFS_IOSTATS_CLASS eStatsClass;
  USHORT             cbLength;
  ULONG              coffData;
} CLFS_IO_STATISTICS_HEADER, *PCLFS_IO_STATISTICS_HEADER, **PPCLFS_IO_STATISTICS_HEADER;

typedef struct _CLFS_ARCHIVE_DESCRIPTOR {
  ULONGLONG                  coffLow;
  ULONGLONG                  coffHigh;
  CLFS_CONTAINER_INFORMATION infoContainer;
} CLFS_ARCHIVE_DESCRIPTOR, *PCLFS_ARCHIVE_DESCRIPTOR, **PPCLFS_ARCHIVE_DESCRIPTOR;

typedef struct _CLFS_INFORMATION {
  LONGLONG  TotalAvailable;
  LONGLONG  CurrentAvailable;
  LONGLONG  TotalReservation;
  ULONGLONG BaseFileSize;
  ULONGLONG ContainerSize;
  ULONG     TotalContainers;
  ULONG     FreeContainers;
  ULONG     TotalClients;
  ULONG     Attributes;
  ULONG     FlushThreshold;
  ULONG     SectorSize;
  CLFS_LSN  MinArchiveTailLsn;
  CLFS_LSN  BaseLsn;
  CLFS_LSN  LastFlushedLsn;
  CLFS_LSN  LastLsn;
  CLFS_LSN  RestartLsn;
  GUID      Identity;
} CLFS_INFORMATION, *PCLFS_INFORMATION, **PPCLFS_INFORMATION;

typedef struct _CLFS_IO_STATISTICS {
  CLFS_IO_STATISTICS_HEADER hdrIoStats;
  ULONGLONG                 cFlush;
  ULONGLONG                 cbFlush;
  ULONGLONG                 cMetaFlush;
  ULONGLONG                 cbMetaFlush;
} CLFS_IO_STATISTICS, *PCLFS_IO_STATISTICS, **PPCLFS_IO_STATISTICS;

typedef struct _CLFS_NODE_ID {
  ULONG cType;
  ULONG cbNode;
} CLFS_NODE_ID, *PCLFS_NODE_ID;

typedef struct _CLFS_SCAN_CONTEXT {
  CLFS_NODE_ID                cidNode;
  HANDLE                      hLog;
  ULONG                       cIndex;
  ULONG                       cContainers;
  ULONG                       cContainersReturned;
  CLFS_SCAN_MODE              eScanMode;
  PCLFS_CONTAINER_INFORMATION pinfoContainer;
} CLFS_SCAN_CONTEXT, *PCLFS_SCAN_CONTEXT;

typedef struct _CLFS_WRITE_ENTRY {
  PVOID Buffer;
  ULONG ByteLength;
} CLFS_WRITE_ENTRY, *PCLFS_WRITE_ENTRY;

WINBOOL WINAPI LsnEqual(
  const CLFS_LSN *plsn1,
  const CLFS_LSN *plsn2
);

WINBOOL WINAPI LsnGreater(
  const CLFS_LSN *plsn1,
  const CLFS_LSN *plsn2
);

WINBOOL WINAPI LsnLess(
  const CLFS_LSN *plsn1,
  const CLFS_LSN *plsn2
);

WINBOOL WINAPI LsnNull(
  const CLFS_LSN *plsn
);

#ifdef __cplusplus
}
#endif
#endif /*(_WIN32_WINNT >= 0x0600)*/
#endif /*_INC_CLFS*/
