1/**
  2 * This file has no copyright assigned and is placed in the Public Domain.
  3 * This file is part of the mingw-w64 runtime package.
  4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
  5 */
  6#ifndef _INC_CLFS
  7#define _INC_CLFS
  8#if (_WIN32_WINNT >= 0x0600)
  9#ifdef __cplusplus
 10extern "C" {
 11#endif
 12
 13typedef enum  {
 14  ClfsContextNone       = 0x00,
 15  ClfsContextUndoNext,
 16  ClfsContextPrevious,
 17  ClfsContextForward 
 18} CLFS_CONTEXT_MODE, *PCLFS_CONTEXT_MODE, **PPCLFS_CONTEXT_MODE;
 19
 20typedef enum _CLFS_IOSTATS_CLASS {
 21  ClfsIoStatsDefault   = 0x0000,
 22  ClfsIoStatsMax       = 0xFFFF 
 23} CLFS_IOSTATS_CLASS, *PCLFS_IOSTATS_CLASS, **PPCLFS_IOSTATS_CLASS;
 24
 25typedef enum _CLFS_LOG_ARCHIVE_MODE {
 26  ClfsLogArchiveEnabled    = 0x01,
 27  ClfsLogArchiveDisabled   = 0x02 
 28} CLFS_LOG_ARCHIVE_MODE, *PCLFS_LOG_ARCHIVE_MODE;
 29
 30typedef enum _CLFS_RECORD_TYPE {
 31  ClfsDataRecord = 0x01,
 32  ClfsRestartRecord = 0x02,
 33  ClfsClientRecord = 0x3F 
 34} CLFS_RECORD_TYPE, *PCLFS_RECORD_TYPE;
 35
 36typedef union _CLFS_LSN {
 37  ULONGLONG Internal;
 38} CLFS_LSN, *PCLFS_LSN;
 39
 40/*http://msdn.microsoft.com/en-us/library/bb540355%28VS.85%29.aspx*/
 41typedef enum _CLFS_SCAN_MODE {
 42  CLFS_SCAN_INIT = 0x01,
 43  CLFS_SCAN_FORWARD = 0x02,
 44  CLFS_SCAN_BACKWARD = 0x04,
 45  CLFS_SCAN_CLOSE = 0x08,
 46  CLFS_SCAN_INITIALIZED = 0x10,
 47  CLFS_SCAN_BUFFERED = 0x20
 48} CLFS_SCAN_MODE;
 49
 50/* enum guessed from http://msdn.microsoft.com/en-us/library/bb540336%28VS.85%29.aspx */
 51typedef enum _CLFS_CONTAINER_STATE {
 52  ClfsContainerInitializing = 0x01,
 53  ClfsContainerInactive = 0x02,
 54  ClfsContainerActive = 0x04,
 55  ClfsContainerActivePendingDelete = 0x08,
 56  ClfsContainerPendingArchive = 0x10,
 57  ClfsContainerPendingArchiveAndDelete = 0x20
 58} CLFS_CONTAINER_STATE;
 59
 60typedef DWORD CLFS_CONTAINER_ID;
 61
 62/* Goes in wdm.h */
 63typedef struct _CLFS_CONTAINER_INFORMATION {
 64  ULONG                FileAttributes;
 65  ULONGLONG            CreationTime;
 66  ULONGLONG            LastAccessTime;
 67  ULONGLONG            LastWriteTime;
 68  LONGLONG             ContainerSize;
 69  ULONG                FileNameActualLength;
 70  ULONG                FileNameLength;
 71  WCHAR                FileName[MAX_PATH];
 72  CLFS_CONTAINER_STATE State;
 73  CLFS_CONTAINER_ID    PhysicalContainerId;
 74  CLFS_CONTAINER_ID    LogicalContainerId;
 75} CLFS_CONTAINER_INFORMATION, *PCLFS_CONTAINER_INFORMATION, **PPCLFS_CONTAINER_INFORMATION;
 76/**/
 77
 78typedef struct _CLFS_IO_STATISTICS_HEADER {
 79  UCHAR              ubMajorVersion;
 80  UCHAR              ubMinorVersion;
 81  CLFS_IOSTATS_CLASS eStatsClass;
 82  USHORT             cbLength;
 83  ULONG              coffData;
 84} CLFS_IO_STATISTICS_HEADER, *PCLFS_IO_STATISTICS_HEADER, **PPCLFS_IO_STATISTICS_HEADER;
 85
 86typedef struct _CLFS_ARCHIVE_DESCRIPTOR {
 87  ULONGLONG                  coffLow;
 88  ULONGLONG                  coffHigh;
 89  CLFS_CONTAINER_INFORMATION infoContainer;
 90} CLFS_ARCHIVE_DESCRIPTOR, *PCLFS_ARCHIVE_DESCRIPTOR, **PPCLFS_ARCHIVE_DESCRIPTOR;
 91
 92typedef struct _CLFS_INFORMATION {
 93  LONGLONG  TotalAvailable;
 94  LONGLONG  CurrentAvailable;
 95  LONGLONG  TotalReservation;
 96  ULONGLONG BaseFileSize;
 97  ULONGLONG ContainerSize;
 98  ULONG     TotalContainers;
 99  ULONG     FreeContainers;
100  ULONG     TotalClients;
101  ULONG     Attributes;
102  ULONG     FlushThreshold;
103  ULONG     SectorSize;
104  CLFS_LSN  MinArchiveTailLsn;
105  CLFS_LSN  BaseLsn;
106  CLFS_LSN  LastFlushedLsn;
107  CLFS_LSN  LastLsn;
108  CLFS_LSN  RestartLsn;
109  GUID      Identity;
110} CLFS_INFORMATION, *PCLFS_INFORMATION, **PPCLFS_INFORMATION;
111
112typedef struct _CLFS_IO_STATISTICS {
113  CLFS_IO_STATISTICS_HEADER hdrIoStats;
114  ULONGLONG                 cFlush;
115  ULONGLONG                 cbFlush;
116  ULONGLONG                 cMetaFlush;
117  ULONGLONG                 cbMetaFlush;
118} CLFS_IO_STATISTICS, *PCLFS_IO_STATISTICS, **PPCLFS_IO_STATISTICS;
119
120typedef struct _CLFS_NODE_ID {
121  ULONG cType;
122  ULONG cbNode;
123} CLFS_NODE_ID, *PCLFS_NODE_ID;
124
125typedef struct _CLFS_SCAN_CONTEXT {
126  CLFS_NODE_ID                cidNode;
127  HANDLE                      hLog;
128  ULONG                       cIndex;
129  ULONG                       cContainers;
130  ULONG                       cContainersReturned;
131  CLFS_SCAN_MODE              eScanMode;
132  PCLFS_CONTAINER_INFORMATION pinfoContainer;
133} CLFS_SCAN_CONTEXT, *PCLFS_SCAN_CONTEXT;
134
135typedef struct _CLFS_WRITE_ENTRY {
136  PVOID Buffer;
137  ULONG ByteLength;
138} CLFS_WRITE_ENTRY, *PCLFS_WRITE_ENTRY;
139
140WINBOOL WINAPI LsnEqual(
141  const CLFS_LSN *plsn1,
142  const CLFS_LSN *plsn2
143);
144
145WINBOOL WINAPI LsnGreater(
146  const CLFS_LSN *plsn1,
147  const CLFS_LSN *plsn2
148);
149
150WINBOOL WINAPI LsnLess(
151  const CLFS_LSN *plsn1,
152  const CLFS_LSN *plsn2
153);
154
155WINBOOL WINAPI LsnNull(
156  const CLFS_LSN *plsn
157);
158
159#ifdef __cplusplus
160}
161#endif
162#endif /*(_WIN32_WINNT >= 0x0600)*/
163#endif /*_INC_CLFS*/