twain3.0/3rdparty/ddk/clfslsn.h

89 lines
2.5 KiB
C

/*=============================================================================
Copyright (c) 1998 Microsoft Corporation
Module Name:
clfslsn.h
Abstract:
Header file containing the private definition for the common log
file system's log sequence number structure.
Author:
Dexter Bradshaw [DexterB] 09-Dec-1998
Revision History:
=============================================================================*/
#ifndef _CLFS_LSN_H_
#define _CLFS_LSN_H_
#if (NTDDI_VERSION >= NTDDI_WS03SP1) || (_WIN32_WINNT >= _WIN32_WINNT_WS03)
//
// CLFS_RECORD_INDEX
//
// Log record offset on container file. The log record offset consists of a block
// offset in the container and a bucket identifier indexing the records in the block.
// Declared up here because including clfs_x.h will try to define the LSN, which needs
// this.
//
typedef UINT32 CLFS_RECORD_INDEX;
#endif /* NTDDI_VERSION || _WIN32_WINNT */
#if (NTDDI_VERSION >= NTDDI_WS03SP1) || (_WIN32_WINNT >= _WIN32_WINNT_WS03)
//
// CLS_LSN
//
// The log sequence number (LSN) is a valid log file address. The LSN consists of
// three (3) parts: (a) a log identifier to identify which physical log the log record
// belongs to, (b) a container index identifying the log container where the log record
// lies, and (c) a record offset identified by the offset of the block in the container
// and an ordinal number for the record within the container.
//
//
// The structure of the LSN poses some inherent limitations of the number of logs,
// the number of containers, the size of a container, and the number of log records in
// a log block.
//
// Maximum number of physical log files is 64K.
// Maximum number of container identifiers is 4G.
// Maximum size of a container is 4G.
// Maximum number of sector-aligned log blocks is 8M
// Maximum number of record buckets in a log block is 512
//
typedef union _CLS_LSN
{
//
// Container identifier
//
struct
{
CLFS_RECORD_INDEX idxRecord; // Record offset on container.
CLFS_CONTAINER_ID cidContainer; // Container identifier.
} offset;
__volatile ULONGLONG ullOffset; // Sequence number within physical log.
} CLS_LSN, *PCLS_LSN, **PPCLS_LSN;
//
// Alias CLS prefixed types with CLFS prefixes.
//
typedef CLS_LSN CLFS_LSN;
typedef CLFS_LSN *PCLFS_LSN, **PPCLFS_LSN;
#endif /* NTDDI_VERSION || _WIN32_WINNT */
#endif