include/wdm.h: Add CLFS definitions. Signed-off-by: Mark Harmstone <mark@harmstone.com> Signed-off-by: Liu Hao <lh_mouse@126.com>
diff --git a/mingw-w64-headers/ddk/include/ddk/wdm.h b/mingw-w64-headers/ddk/include/ddk/wdm.h index 50d4b23..2e4a628 100644 --- a/mingw-w64-headers/ddk/include/ddk/wdm.h +++ b/mingw-w64-headers/ddk/include/ddk/wdm.h
@@ -16256,6 +16256,885 @@ #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ +#ifndef _CLFS_PUBLIC_H_ +#define _CLFS_PUBLIC_H_ + +#ifndef CLFSUSER_API +#ifdef __CLFSUSER_EXPORTS__ +#define CLFSUSER_API +#else +#define CLFSUSER_API __declspec(dllimport) +#endif +#endif + +#if NTDDI_VERSION >= NTDDI_WS03SP1 || _WIN32_WINNT >= _WIN32_WINNT_WS03 + +#define FILE_ATTRIBUTE_DEDICATED FILE_ATTRIBUTE_TEMPORARY +#define EA_CONTAINER_NAME "ContainerName" +#define EA_CONTAINER_SIZE "ContainerSize" +#define CLFS_BASELOG_EXTENSION L".blf" +#define CLFS_FLAG_NO_FLAGS 0x00000000 +#define CLFS_FLAG_FORCE_APPEND 0x00000001 +#define CLFS_FLAG_FORCE_FLUSH 0x00000002 +#define CLFS_FLAG_USE_RESERVATION 0x00000004 +#define CLFS_FLAG_REENTRANT_FILE_SYSTEM 0x00000008 +#define CLFS_FLAG_NON_REENTRANT_FILTER 0x00000010 +#define CLFS_FLAG_REENTRANT_FILTER 0x00000020 +#define CLFS_FLAG_IGNORE_SHARE_ACCESS 0x00000040 +#define CLFS_FLAG_READ_IN_PROGRESS 0x00000080 +#define CLFS_FLAG_MINIFILTER_LEVEL 0x00000100 +#define CLFS_FLAG_HIDDEN_SYSTEM_LOG 0x00000200 +#define CLFS_FLAG_FILTER_INTERMEDIATE_LEVEL CLFS_FLAG_NON_REENTRANT_FILTER +#define CLFS_FLAG_FILTER_TOP_LEVEL CLFS_FLAG_REENTRANT_FILTER +#define CLFS_MARSHALLING_FLAG_NONE 0x00000000 +#define CLFS_MARSHALLING_FLAG_DISABLE_BUFF_INIT 0x00000001 + +typedef ULONG CLFS_CONTAINER_ID, *PCLFS_CONTAINER_ID, **PPCLFS_CONTAINER_ID; + +typedef struct _CLS_LSN { + ULONGLONG Internal; +} CLS_LSN, *PCLS_LSN, **PPCLS_LSN; + +typedef CLS_LSN CLFS_LSN, *PCLFS_LSN, **PPCLFS_LSN; + +extern __declspec(dllimport) const CLFS_LSN CLFS_LSN_INVALID; +extern __declspec(dllimport) const CLFS_LSN CLFS_LSN_NULL; + +#define ClfsNullRecord 0x00 +#define ClfsDataRecord 0x01 +#define ClfsRestartRecord 0x02 +#define ClfsClientRecord (ClfsDataRecord | ClfsRestartRecord) + +#define CLFS_CONTAINER_STREAM_PREFIX L"%BLF%:" +#define CLFS_CONTAINER_RELATIVE_PREFIX L"%BLF%\\" + +typedef UCHAR CLS_RECORD_TYPE, *PCLS_RECORD_TYPE, **PPCLS_RECORD_TYPE; +typedef CLS_RECORD_TYPE CLFS_RECORD_TYPE, *PCLFS_RECORD_TYPE, **PPCLFS_RECORD_TYPE; + +typedef enum _CLS_CONTEXT_MODE { + ClsContextNone, + ClsContextUndoNext, + ClsContextPrevious, + ClsContextForward +} CLS_CONTEXT_MODE, *PCLS_CONTEXT_MODE, **PPCLS_CONTEXT_MODE; + +typedef enum _CLFS_CONTEXT_MODE { + ClfsContextNone, + ClfsContextUndoNext, + ClfsContextPrevious, + ClfsContextForward +} CLFS_CONTEXT_MODE, *PCLFS_CONTEXT_MODE, **PPCLFS_CONTEXT_MODE; + +typedef struct _CLFS_NODE_ID { + ULONG cType; + ULONG cbNode; +} CLFS_NODE_ID, *PCLFS_NODE_ID; + +typedef struct _CLS_WRITE_ENTRY { + PVOID Buffer; + ULONG ByteLength; +} CLS_WRITE_ENTRY, *PCLS_WRITE_ENTRY, **PPCLS_WRITE_ENTRY; + +typedef CLS_WRITE_ENTRY CLFS_WRITE_ENTRY, *PCLFS_WRITE_ENTRY, **PPCLFS_WRITE_ENTRY; + +typedef GUID CLFS_LOG_ID; + +typedef struct _CLS_INFORMATION { + LONGLONG TotalAvailable; + LONGLONG CurrentAvailable; + LONGLONG TotalReservation; + ULONGLONG BaseFileSize; + ULONGLONG ContainerSize; + ULONG TotalContainers; + ULONG FreeContainers; + ULONG TotalClients; + ULONG Attributes; + ULONG FlushThreshold; + ULONG SectorSize; + CLS_LSN MinArchiveTailLsn; + CLS_LSN BaseLsn; + CLS_LSN LastFlushedLsn; + CLS_LSN LastLsn; + CLS_LSN RestartLsn; + GUID Identity; +} CLS_INFORMATION, *PCLS_INFORMATION, *PPCLS_INFORMATION; + +typedef CLS_INFORMATION CLFS_INFORMATION, *PCLFS_INFORMATION, *PPCLFS_INFORMATION; + +typedef struct _CLFS_LOG_NAME_INFORMATION { + USHORT NameLengthInBytes; + WCHAR Name[1]; +} CLFS_LOG_NAME_INFORMATION, *PCLFS_LOG_NAME_INFORMATION, **PPCLFS_LOG_NAME_INFORMATION; + +typedef struct _CLFS_STREAM_ID_INFORMATION { + UCHAR StreamIdentifier; +} CLFS_STREAM_ID_INFORMATION, *PCLFS_STREAM_ID_INFORMATION, **PPCLFS_STREAM_ID_INFORMATION; + +typedef UINT32 CLS_CONTAINER_STATE, *PCLS_CONTAINER_STATE, *PPCLS_CONTAINER_STATE; +typedef CLS_CONTAINER_STATE CLFS_CONTAINER_STATE, *PCLFS_CONTAINER_STATE, *PPCLFS_CONTAINER_STATE; + +#define ClsContainerInitializing 0x01 +#define ClsContainerInactive 0x02 +#define ClsContainerActive 0x04 +#define ClsContainerActivePendingDelete 0x08 +#define ClsContainerPendingArchive 0x10 +#define ClsContainerPendingArchiveAndDelete 0x20 + +#define ClfsContainerInitializing 0x01 +#define ClfsContainerInactive 0x02 +#define ClfsContainerActive 0x04 +#define ClfsContainerActivePendingDelete 0x08 +#define ClfsContainerPendingArchive 0x10 +#define ClfsContainerPendingArchiveAndDelete 0x20 + +#define CLFS_MAX_CONTAINER_INFO 256 + +typedef struct _CLS_CONTAINER_INFORMATION { + ULONG FileAttributes; + ULONGLONG CreationTime; + ULONGLONG LastAccessTime; + ULONGLONG LastWriteTime; + LONGLONG ContainerSize; + ULONG FileNameActualLength; + ULONG FileNameLength; + WCHAR FileName[CLFS_MAX_CONTAINER_INFO]; + CLFS_CONTAINER_STATE State; + CLFS_CONTAINER_ID PhysicalContainerId; + CLFS_CONTAINER_ID LogicalContainerId; +} CLS_CONTAINER_INFORMATION, *PCLS_CONTAINER_INFORMATION, **PPCLS_CONTAINER_INFORMATION; + +typedef CLS_CONTAINER_INFORMATION CLFS_CONTAINER_INFORMATION, *PCLFS_CONTAINER_INFORMATION, **PPCLFS_CONTAINER_INFORMATION; + +typedef enum _CLS_LOG_INFORMATION_CLASS { + ClfsLogBasicInformation, + ClfsLogBasicInformationPhysical, + ClfsLogPhysicalNameInformation, + ClfsLogStreamIdentifierInformation, +#if NTDDI_VERSION >= NTDDI_VISTA || _WIN32_WINNT >= _WIN32_WINNT_VISTA + ClfsLogSystemMarkingInformation, + ClfsLogPhysicalLsnInformation +#endif +} CLS_LOG_INFORMATION_CLASS, *PCLS_LOG_INFORMATION_CLASS, **PPCLS_LOG_INFORMATION_CLASS; + +typedef CLS_LOG_INFORMATION_CLASS CLFS_LOG_INFORMATION_CLASS, *PCLFS_LOG_INFORMATION_CLASS, **PPCLFS_LOG_INFORMATION_CLASS; + +typedef enum _CLS_IOSTATS_CLASS { + ClsIoStatsDefault = 0x0000, + ClsIoStatsMax = 0xffff +} CLS_IOSTATS_CLASS, *PCLS_IOSTATS_CLASS, **PPCLS_IOSTATS_CLASS; + +typedef enum _CLFS_IOSTATS_CLASS { + ClfsIoStatsDefault = 0x0000, + ClfsIoStatsMax = 0xffff +} CLFS_IOSTATS_CLASS, *PCLFS_IOSTATS_CLASS, **PPCLFS_IOSTATS_CLASS; + +typedef struct _CLS_IO_STATISTICS_HEADER { + UCHAR ubMajorVersion; + UCHAR ubMinorVersion; + CLFS_IOSTATS_CLASS eStatsClass; + USHORT cbLength; + ULONG coffData; +} CLS_IO_STATISTICS_HEADER, *PCLS_IO_STATISTICS_HEADER, **PPCLS_IO_STATISTICS_HEADER; + +typedef CLS_IO_STATISTICS_HEADER CLFS_IO_STATISTICS_HEADER, *PCLFS_IO_STATISTICS_HEADER, **PPCLFS_IO_STATISTICS_HEADER; + +typedef struct _CLS_IO_STATISTICS { + CLS_IO_STATISTICS_HEADER hdrIoStats; + ULONGLONG cFlush; + ULONGLONG cbFlush; + ULONGLONG cMetaFlush; + ULONGLONG cbMetaFlush; +} CLS_IO_STATISTICS, *PCLS_IO_STATISTICS, **PPCLS_IO_STATISTICS; + +typedef CLS_IO_STATISTICS CLFS_IO_STATISTICS, *PCLFS_IO_STATISTICS, **PPCLFS_IO_STATISTICS; + +#define CLFS_SCAN_INIT 0x01 +#define CLFS_SCAN_FORWARD 0x02 +#define CLFS_SCAN_BACKWARD 0x04 +#define CLFS_SCAN_CLOSE 0x08 +#define CLFS_SCAN_INITIALIZED 0x10 +#define CLFS_SCAN_BUFFERED 0x20 + +typedef UCHAR CLFS_SCAN_MODE, *PCLFS_SCAN_MODE; + +typedef FILE_OBJECT LOG_FILE_OBJECT, *PLOG_FILE_OBJECT, **PPLOG_FILE_OBJECT; + +typedef struct _CLS_SCAN_CONTEXT { + CLFS_NODE_ID cidNode; + PLOG_FILE_OBJECT plfoLog; + ULONG cIndex __attribute__((aligned(8))); + ULONG cContainers __attribute__((aligned(8))); + ULONG cContainersReturned __attribute__((aligned(8))); + CLFS_SCAN_MODE eScanMode __attribute__((aligned(8))); + PCLS_CONTAINER_INFORMATION pinfoContainer __attribute__((aligned(8))); +} CLS_SCAN_CONTEXT, *PCLS_SCAN_CONTEXT, **PPCLS_SCAN_CONTEXT; + +typedef CLS_SCAN_CONTEXT CLFS_SCAN_CONTEXT, *PCLFS_SCAN_CONTEXT, **PPCLFS_SCAN_CONTEXT; + +typedef struct _CLS_ARCHIVE_DESCRIPTOR { + ULONGLONG coffLow; + ULONGLONG coffHigh; + CLS_CONTAINER_INFORMATION infoContainer; +} CLS_ARCHIVE_DESCRIPTOR, *PCLS_ARCHIVE_DESCRIPTOR, **PPCLS_ARCHIVE_DESCRIPTOR; + +typedef CLS_ARCHIVE_DESCRIPTOR CLFS_ARCHIVE_DESCRIPTOR, *PCLFS_ARCHIVE_DESCRIPTOR, **PPCLFS_ARCHIVE_DESCRIPTOR; + +typedef PVOID (*CLFS_BLOCK_ALLOCATION)(ULONG cbBufferLength, PVOID pvUserContext); +typedef void (*CLFS_BLOCK_DEALLOCATION)(PVOID pvBuffer, PVOID pvUserContext); + +typedef enum _CLFS_LOG_ARCHIVE_MODE { + ClfsLogArchiveEnabled = 1, + ClfsLogArchiveDisabled = 2 +} CLFS_LOG_ARCHIVE_MODE, *PCLFS_LOG_ARCHIVE_MODE; + +CLFSUSER_API +BOOLEAN +NTAPI +ClfsLsnEqual( + const CLFS_LSN* plsn1, + const CLFS_LSN* plsn2); + +CLFSUSER_API +BOOLEAN +NTAPI +ClfsLsnLess( + const CLFS_LSN* plsn1, + const CLFS_LSN* plsn2); + +CLFSUSER_API +BOOLEAN +NTAPI +ClfsLsnGreater( + const CLFS_LSN* plsn1, + const CLFS_LSN* plsn2); + +CLFSUSER_API +BOOLEAN +NTAPI +ClfsLsnNull( + const CLFS_LSN* plsn); + +CLFSUSER_API +CLFS_CONTAINER_ID +NTAPI +ClfsLsnContainer( + const CLFS_LSN* plsn); + +CLFSUSER_API +CLFS_LSN +NTAPI +ClfsLsnCreate( + CLFS_CONTAINER_ID cidContainer, + ULONG offBlock, + ULONG cRecord); + +CLFSUSER_API +ULONG +NTAPI +ClfsLsnBlockOffset( + const CLFS_LSN* plsn); + +CLFSUSER_API +ULONG +NTAPI +ClfsLsnRecordSequence( + const CLFS_LSN* plsn); + +CLFSUSER_API +BOOLEAN +NTAPI +ClfsLsnInvalid( + const CLFS_LSN* plsn); + +CLFSUSER_API +CLFS_LSN +NTAPI +ClfsLsnIncrement( + PCLFS_LSN plsn); + +#ifdef __cplusplus +#ifdef CLFS_OPERATORS + +inline CLFS_LSN operator++(CLFS_LSN& refLsn) { + refLsn = ClfsLsnIncrement (&refLsn); + return refLsn; +} + +inline BOOLEAN operator<(const CLFS_LSN& refLsn1, const CLFS_LSN& refLsn2) { + return ClfsLsnLess(&refLsn1, &refLsn2); +} + +inline BOOLEAN operator>(const CLFS_LSN& refLsn1, const CLFS_LSN& refLsn2) { + return ClfsLsnGreater(&refLsn1, &refLsn2); +} + +inline BOOLEAN operator==(const CLFS_LSN& refLsn1, const CLFS_LSN& refLsn2) { + return ClfsLsnEqual(&refLsn1, &refLsn2); +} + +inline BOOLEAN operator!=(const CLFS_LSN& refLsn1, const CLFS_LSN& refLsn2) { + return !ClfsLsnEqual(&refLsn1, &refLsn2); +} + +inline BOOLEAN operator<=(const CLFS_LSN& refLsn1, const CLFS_LSN& refLsn2) { + return !ClfsLsnGreater(&refLsn1, &refLsn2); +} + +inline BOOLEAN operator>=(const CLFS_LSN& refLsn1, const CLFS_LSN& refLsn2) { + return !ClfsLsnLess(&refLsn1, &refLsn2); +} + +#endif +#endif +#endif + +#if NTDDI_VERSION >= NTDDI_VISTA || _WIN32_WINNT >= _WIN32_WINNT_VISTA + +#pragma pack(push,8) + +typedef struct _CLFS_PHYSICAL_LSN_INFORMATION { + UCHAR StreamIdentifier; + CLFS_LSN VirtualLsn; + CLFS_LSN PhysicalLsn; +} CLFS_PHYSICAL_LSN_INFORMATION, *PCLFS_PHYSICAL_LSN_INFORMATION; + +#pragma pack(pop) + +#endif + +#endif /* _CLFS_PUBLIC_H_ */ + +#if NTDDI_VERSION >= NTDDI_WS03SP1 || _WIN32_WINNT >= _WIN32_WINNT_WS03 + +typedef enum _CLFS_MGMT_POLICY_TYPE { + ClfsMgmtPolicyMaximumSize, + ClfsMgmtPolicyMinimumSize, + ClfsMgmtPolicyNewContainerSize, + ClfsMgmtPolicyGrowthRate, + ClfsMgmtPolicyLogTail, + ClfsMgmtPolicyAutoShrink, + ClfsMgmtPolicyAutoGrow, + ClfsMgmtPolicyNewContainerPrefix, + ClfsMgmtPolicyNewContainerSuffix, + ClfsMgmtPolicyNewContainerExtension, + ClfsMgmtPolicyInvalid +} CLFS_MGMT_POLICY_TYPE, *PCLFS_MGMT_POLICY_TYPE; + +#define CLFS_MGMT_NUM_POLICIES (ULONG)ClfsMgmtPolicyInvalid + +#define CLFS_LOG_SIZE_MINIMUM (ULONGLONG)0 +#define CLFS_LOG_SIZE_MAXIMUM (ULONGLONG)-1 + +#define CLFS_MGMT_POLICY_VERSION 1 + +#define LOG_POLICY_OVERWRITE 0x01 +#define LOG_POLICY_PERSIST 0x02 + +typedef struct _CLFS_MGMT_POLICY { + ULONG Version; + ULONG LengthInBytes; + ULONG PolicyFlags; + CLFS_MGMT_POLICY_TYPE PolicyType; + union { + struct { + ULONG Containers; + } MaximumSize; + struct { + ULONG Containers; + } MinimumSize; + struct { + ULONG SizeInBytes; + } NewContainerSize; + struct { + ULONG AbsoluteGrowthInContainers; + ULONG RelativeGrowthPercentage; + } GrowthRate; + struct { + ULONG MinimumAvailablePercentage; + ULONG MinimumAvailableContainers; + } LogTail; + struct { + ULONG Percentage; + } AutoShrink; + struct { + ULONG Enabled; + } AutoGrow; + struct { + USHORT PrefixLengthInBytes; + WCHAR PrefixString[1]; + } NewContainerPrefix; + struct { + ULONGLONG NextContainerSuffix; + } NewContainerSuffix; + struct { + USHORT ExtensionLengthInBytes; + WCHAR ExtensionString[1]; + } NewContainerExtension; + } PolicyParameters; +} CLFS_MGMT_POLICY, *PCLFS_MGMT_POLICY; + +typedef enum _CLFS_MGMT_NOTIFICATION_TYPE { + ClfsMgmtAdvanceTailNotification, + ClfsMgmtLogFullHandlerNotification, + ClfsMgmtLogUnpinnedNotification, + ClfsMgmtLogWriteNotification +} CLFS_MGMT_NOTIFICATION_TYPE, *PCLFS_MGMT_NOTIFICATION_TYPE; + +typedef struct _CLFS_MGMT_NOTIFICATION { + CLFS_MGMT_NOTIFICATION_TYPE Notification; + CLFS_LSN Lsn; + USHORT LogIsPinned; +} CLFS_MGMT_NOTIFICATION, *PCLFS_MGMT_NOTIFICATION; + +typedef NTSTATUS (*PCLFS_CLIENT_ADVANCE_TAIL_CALLBACK)( + PLOG_FILE_OBJECT LogFile, + PCLFS_LSN TargetLsn, + PVOID ClientData); + +typedef VOID (*PCLFS_CLIENT_LFF_HANDLER_COMPLETE_CALLBACK)( + PLOG_FILE_OBJECT LogFile, + NTSTATUS OperationStatus, + BOOLEAN LogIsPinned, + PVOID ClientData); + +typedef VOID (*PCLFS_CLIENT_LOG_UNPINNED_CALLBACK)( + PLOG_FILE_OBJECT LogFile, + PVOID ClientData); + +typedef VOID (*PCLFS_SET_LOG_SIZE_COMPLETE_CALLBACK)( + PLOG_FILE_OBJECT LogFile, + NTSTATUS OperationStatus, + PVOID ClientData); + +#define CLFS_MGMT_CLIENT_REGISTRATION_VERSION 1 + +typedef struct _CLFS_MGMT_CLIENT_REGISTRATION { + ULONG Version; + PCLFS_CLIENT_ADVANCE_TAIL_CALLBACK AdvanceTailCallback; + PVOID AdvanceTailCallbackData; + PCLFS_CLIENT_LFF_HANDLER_COMPLETE_CALLBACK LogGrowthCompleteCallback; + PVOID LogGrowthCompleteCallbackData; + PCLFS_CLIENT_LOG_UNPINNED_CALLBACK LogUnpinnedCallback; + PVOID LogUnpinnedCallbackData; +} CLFS_MGMT_CLIENT_REGISTRATION, *PCLFS_MGMT_CLIENT_REGISTRATION; + +typedef PVOID CLFS_MGMT_CLIENT, *PCLFS_MGMT_CLIENT; + +CLFSUSER_API +NTSTATUS +ClfsMgmtRegisterManagedClient( + PLOG_FILE_OBJECT LogFile, + PCLFS_MGMT_CLIENT_REGISTRATION RegistrationData, + PCLFS_MGMT_CLIENT ClientCookie); + +CLFSUSER_API +NTSTATUS +ClfsMgmtDeregisterManagedClient( + CLFS_MGMT_CLIENT ClientCookie); + +CLFSUSER_API +NTSTATUS +ClfsMgmtTailAdvanceFailure( + CLFS_MGMT_CLIENT Client, + NTSTATUS Reason); + +CLFSUSER_API +NTSTATUS +ClfsMgmtHandleLogFileFull( + CLFS_MGMT_CLIENT Client); + +CLFSUSER_API +NTSTATUS +ClfsMgmtInstallPolicy( + PLOG_FILE_OBJECT LogFile, + PCLFS_MGMT_POLICY Policy, + ULONG PolicyLength); + +CLFSUSER_API +NTSTATUS +ClfsMgmtQueryPolicy( + PLOG_FILE_OBJECT LogFile, + CLFS_MGMT_POLICY_TYPE PolicyType, + PCLFS_MGMT_POLICY Policy, + PULONG PolicyLength); + +CLFSUSER_API +NTSTATUS +ClfsMgmtRemovePolicy( + PLOG_FILE_OBJECT LogFile, + CLFS_MGMT_POLICY_TYPE PolicyType); + +CLFSUSER_API +NTSTATUS +ClfsMgmtSetLogFileSize( + PLOG_FILE_OBJECT LogFile, + PULONGLONG NewSizeInContainers, + PULONGLONG ResultingSizeInContainers, + PCLFS_SET_LOG_SIZE_COMPLETE_CALLBACK CompletionRoutine, + PVOID CompletionRoutineData); + +#endif + +#if NTDDI_VERSION >= NTDDI_VISTA || _WIN32_WINNT >= _WIN32_WINNT_VISTA + +CLFSUSER_API +NTSTATUS +ClfsMgmtSetLogFileSizeAsClient( + PLOG_FILE_OBJECT LogFile, + PCLFS_MGMT_CLIENT ClientCookie, + PULONGLONG NewSizeInContainers, + PULONGLONG ResultingSizeInContainers, + PCLFS_SET_LOG_SIZE_COMPLETE_CALLBACK CompletionRoutine, + PVOID CompletionRoutineData); + +#endif + +#ifndef __CLFSPROC_H__ +#define __CLFSPROC_H__ + +#if NTDDI_VERSION >= NTDDI_WS03SP1 + +CLFSUSER_API NTSTATUS ClfsInitialize(void); + +CLFSUSER_API void ClfsFinalize(void); + +CLFSUSER_API +NTSTATUS +ClfsCreateLogFile( + PPLOG_FILE_OBJECT pplfoLog, + PUNICODE_STRING puszLogFileName, + ACCESS_MASK fDesiredAccess, + ULONG dwShareMode, + PSECURITY_DESCRIPTOR psdLogFile, + ULONG fCreateDisposition, + ULONG fCreateOptions, + ULONG fFlagsAndAttributes, + ULONG fLogOptionFlag, + PVOID pvContext, + ULONG cbContext); + +CLFSUSER_API +NTSTATUS +ClfsDeleteLogByPointer( + PLOG_FILE_OBJECT plfoLog); + +CLFSUSER_API +NTSTATUS +ClfsDeleteLogFile( + PUNICODE_STRING puszLogFileName, + PVOID pvReserved, + ULONG fLogOptionFlag, + PVOID pvContext, + ULONG cbContext); + +CLFSUSER_API +NTSTATUS +ClfsAddLogContainer( + PLOG_FILE_OBJECT plfoLog, + PULONGLONG pcbContainer, + PUNICODE_STRING puszContainerPath); + +CLFSUSER_API +NTSTATUS +ClfsAddLogContainerSet( + PLOG_FILE_OBJECT plfoLog, + USHORT cContainers, + PULONGLONG pcbContainer, + PUNICODE_STRING rguszContainerPath); + +CLFSUSER_API +NTSTATUS +ClfsRemoveLogContainer( + PLOG_FILE_OBJECT plfoLog, + PUNICODE_STRING puszContainerPath, + BOOLEAN fForce); + +CLFSUSER_API +NTSTATUS +ClfsRemoveLogContainerSet( + PLOG_FILE_OBJECT plfoLog, + USHORT cContainers, + PUNICODE_STRING rgwszContainerPath, + BOOLEAN fForce); + +CLFSUSER_API +NTSTATUS +ClfsSetArchiveTail( + PLOG_FILE_OBJECT plfoLog, + PCLFS_LSN plsnArchiveTail); + +CLFSUSER_API +NTSTATUS +ClfsSetEndOfLog( + PLOG_FILE_OBJECT plfoLog, + PCLFS_LSN plsnEnd); + +CLFSUSER_API +NTSTATUS +ClfsCreateScanContext( + PLOG_FILE_OBJECT plfoLog, + ULONG cFromContainer, + ULONG cContainers, + CLFS_SCAN_MODE eScanMode, + PCLFS_SCAN_CONTEXT pcxScan); + +CLFSUSER_API +NTSTATUS +ClfsScanLogContainers( + PCLFS_SCAN_CONTEXT pcxScan, + CLFS_SCAN_MODE eScanMode); + +CLFSUSER_API +NTSTATUS +ClfsGetContainerName( + PLOG_FILE_OBJECT plfoLog, + CLFS_CONTAINER_ID cidLogicalContainer, + PUNICODE_STRING puszContainerName, + PULONG pcActualLenContainerName); + +CLFSUSER_API +NTSTATUS +ClfsGetLogFileInformation( + PLOG_FILE_OBJECT plfoLog, + PCLFS_INFORMATION pinfoBuffer, + PULONG pcbInfoBuffer); + +CLFSUSER_API +NTSTATUS +ClfsSetLogFileInformation( + PLOG_FILE_OBJECT plfoLog, + CLFS_LOG_INFORMATION_CLASS eInformationClass, + PVOID pinfoBuffer, + ULONG cbBuffer); + +CLFSUSER_API +NTSTATUS +ClfsReadRestartArea( + PVOID pvMarshalContext, + PVOID* ppvRestartBuffer, + PULONG pcbRestartBuffer, + PCLFS_LSN plsn, + PVOID* ppvReadContext); + +CLFSUSER_API +NTSTATUS +ClfsReadPreviousRestartArea( + PVOID pvReadContext, + PVOID* ppvRestartBuffer, + PULONG pcbRestartBuffer, + PCLFS_LSN plsnRestart); + +CLFSUSER_API +NTSTATUS +ClfsWriteRestartArea( + PVOID pvMarshalContext, + PVOID pvRestartBuffer, + ULONG cbRestartBuffer, + PCLFS_LSN plsnBase, + ULONG fFlags, + PULONG pcbWritten, + PCLFS_LSN plsnNext); + +CLFSUSER_API +NTSTATUS +ClfsAdvanceLogBase( + PVOID pvMarshalContext, + PCLFS_LSN plsnBase, + ULONG fFlags); + +CLFSUSER_API +NTSTATUS +ClfsCloseAndResetLogFile( + PLOG_FILE_OBJECT plfoLog); + +CLFSUSER_API +NTSTATUS +ClfsCloseLogFileObject( + PLOG_FILE_OBJECT plfoLog); + +CLFSUSER_API +NTSTATUS +ClfsCreateMarshallingArea( + PLOG_FILE_OBJECT plfoLog, + POOL_TYPE ePoolType, + PALLOCATE_FUNCTION pfnAllocBuffer, + PFREE_FUNCTION pfnFreeBuffer, + ULONG cbMarshallingBuffer, + ULONG cMaxWriteBuffers, + ULONG cMaxReadBuffers, + PVOID* ppvMarshalContext); + +CLFSUSER_API +NTSTATUS +ClfsDeleteMarshallingArea( + PVOID pvMarshalContext); + +CLFSUSER_API +NTSTATUS +ClfsReserveAndAppendLog( + PVOID pvMarshalContext, + PCLFS_WRITE_ENTRY rgWriteEntries, + ULONG cWriteEntries, + PCLFS_LSN plsnUndoNext, + PCLFS_LSN plsnPrevious, + ULONG cReserveRecords, + PLONGLONG rgcbReservation, + ULONG fFlags, + PCLFS_LSN plsn); + +CLFSUSER_API +NTSTATUS +ClfsReserveAndAppendLogAligned( + PVOID pvMarshalContext, + PCLFS_WRITE_ENTRY rgWriteEntries, + ULONG cWriteEntries, + ULONG cbEntryAlignment, + PCLFS_LSN plsnUndoNext, + PCLFS_LSN plsnPrevious, + ULONG cReserveRecords, + PLONGLONG rgcbReservation, + ULONG fFlags, + PCLFS_LSN plsn); + +CLFSUSER_API +NTSTATUS +ClfsAlignReservedLog( + PVOID pvMarshalContext, + ULONG cRecords, + LONGLONG rgcbReservation[], + PLONGLONG pcbAlignReservation); + +CLFSUSER_API +NTSTATUS +ClfsAllocReservedLog( + PVOID pvMarshalContext, + ULONG cRecords, + PLONGLONG pcbAdjustment); + +CLFSUSER_API +NTSTATUS +ClfsFreeReservedLog( + PVOID pvMarshalContext, + ULONG cRecords, + PLONGLONG pcbAdjustment); + +CLFSUSER_API +NTSTATUS +ClfsFlushBuffers( + PVOID pvMarshalContext); + +CLFSUSER_API +NTSTATUS +ClfsFlushToLsn( + PVOID pvMarshalContext, + PCLFS_LSN plsnFlush, + PCLFS_LSN plsnLastFlushed); + +CLFSUSER_API +NTSTATUS +ClfsReadLogRecord( + PVOID pvMarshalContext, + PCLFS_LSN plsnFirst, + CLFS_CONTEXT_MODE peContextMode, + PVOID* ppvReadBuffer, + PULONG pcbReadBuffer, + PCLFS_RECORD_TYPE peRecordType, + PCLFS_LSN plsnUndoNext, + PCLFS_LSN plsnPrevious, + PVOID* ppvReadContext); + +CLFSUSER_API +NTSTATUS +ClfsReadNextLogRecord( + PVOID pvReadContext, + PVOID* ppvBuffer, + PULONG pcbBuffer, + PCLFS_RECORD_TYPE peRecordType, + PCLFS_LSN plsnUser, + PCLFS_LSN plsnUndoNext, + PCLFS_LSN plsnPrevious, + PCLFS_LSN plsnRecord); + +CLFSUSER_API +NTSTATUS +ClfsTerminateReadLog( + PVOID pvCursorContext); + +CLFSUSER_API +NTSTATUS +ClfsGetLastLsn( + PLOG_FILE_OBJECT plfoLog, + PCLFS_LSN plsnLast); + +CLFSUSER_API +NTSTATUS +ClfsGetIoStatistics( + PLOG_FILE_OBJECT plfoLog, + PVOID pvStatsBuffer, + ULONG cbStatsBuffer, + CLFS_IOSTATS_CLASS eStatsClass, + PULONG pcbStatsWritten); + +CLFSUSER_API +CLFS_LSN +ClfsLaterLsn( + PCLFS_LSN plsn); + +CLFSUSER_API +CLFS_LSN +ClfsEarlierLsn( + PCLFS_LSN plsn); + +CLFSUSER_API +NTSTATUS +ClfsLsnDifference( + PCLFS_LSN plsnStart, + PCLFS_LSN plsnFinish, + ULONG cbContainer, + ULONG cbMaxBlock, + PLONGLONG pcbDifference); + +#endif + +#if NTDDI_VERSION >= NTDDI_VISTA + +CLFSUSER_API +BOOLEAN +ClfsValidTopLevelContext( + PIRP pirpTopLevelContext); + +CLFSUSER_API +NTSTATUS +ClfsQueryLogFileInformation( + PLOG_FILE_OBJECT plfoLog, + CLFS_LOG_INFORMATION_CLASS eInformationClass, + PVOID pinfoInputBuffer, + ULONG cbinfoInputBuffer, + PVOID pinfoBuffer, + PULONG pcbInfoBuffer); + +#endif + +#if NTDDI_VERSION >= NTDDI_WIN8 + +CLFSUSER_API +NTSTATUS +ClfsCreateMarshallingAreaEx( + PLOG_FILE_OBJECT plfoLog, + POOL_TYPE ePoolType, + PALLOCATE_FUNCTION pfnAllocBuffer, + PFREE_FUNCTION pfnFreeBuffer, + ULONG cbMarshallingBuffer, + ULONG cMaxWriteBuffers, + ULONG cMaxReadBuffers, + ULONG cAlignmentSize, + ULONGLONG fFlags, + PVOID* ppvMarshalContext); + +#endif + +#endif /* __CLFSPROC_H__ */ + #ifdef __cplusplus } #endif