You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
132 lines
4.8 KiB
132 lines
4.8 KiB
/*++
|
|
|
|
(c) 1998 Seagate Software, Inc. All rights reserved.
|
|
|
|
Module Name:
|
|
|
|
RpData.h
|
|
|
|
Abstract:
|
|
|
|
Contains structure definitions for the interface between RsFilter and the Fsa
|
|
|
|
Environment:
|
|
|
|
User and Kernel mode
|
|
|
|
--*/
|
|
|
|
#if !defined (RPDATA_H)
|
|
|
|
#define RPDATA_H
|
|
|
|
/*
|
|
Reparse point information for placeholder files
|
|
|
|
The version must be changed whenever the structure of the reparse point
|
|
data has changed. Initial version is 100
|
|
*/
|
|
|
|
#define RP_VERSION 101
|
|
|
|
|
|
//
|
|
// Used to verify that the placeholder data is valid
|
|
//
|
|
#define RP_GEN_QUALIFIER(hsmData, qual) {UCHAR * __cP; ULONG __ix;\
|
|
__cP = (UCHAR *) &(hsmData)->version;\
|
|
(qual) = 0L;\
|
|
for (__ix = 0; __ix < sizeof(RP_DATA) - sizeof(ULONG) - sizeof(GUID) ; __ix++){\
|
|
qual += (ULONG) *__cP;\
|
|
__cP++;}}
|
|
|
|
|
|
//
|
|
// Bit flag defined that indicates state of data: Truncated or Premigrated
|
|
// Use macros to test the bits.
|
|
//
|
|
// The following bits are mutually exclusive - if the file is truncated then truncate on close
|
|
// or premigrate on close make no sense, and if the file is set to truncate on close it is not
|
|
// truncated now and should not be added to the premigrated list on close...
|
|
//
|
|
#define RP_FLAG_TRUNCATED 0x00000001 // File is a placeholder
|
|
#define RP_FLAG_TRUNCATE_ON_CLOSE 0x00000002 // Truncate this file when closed
|
|
#define RP_FLAG_PREMIGRATE_ON_CLOSE 0x00000004 // Add to premigrated list on close
|
|
//
|
|
// The following flag is never to be written to media. It is set by the engine after
|
|
// the CRC has been calculated and is cleared by the filter. It is used to indicate that
|
|
// it is the engine that is setting the reparse point.
|
|
//
|
|
#define RP_FLAG_ENGINE_ORIGINATED 0x80000000
|
|
|
|
#define RP_FILE_IS_TRUNCATED( bitFlag ) ( bitFlag & RP_FLAG_TRUNCATED)
|
|
#define RP_FILE_IS_PREMIGRATED( bitFlag ) ( !( bitFlag & RP_FLAG_TRUNCATED ) )
|
|
#define RP_INIT_BITFLAG( bitflag ) ( ( bitflag ) = 0 )
|
|
#define RP_SET_TRUNCATED_BIT( bitflag ) ( ( bitflag ) |= RP_FLAG_TRUNCATED)
|
|
#define RP_CLEAR_TRUNCATED_BIT( bitflag) ( ( bitflag ) &= ~RP_FLAG_TRUNCATED)
|
|
|
|
#define RP_IS_ENGINE_ORIGINATED( bitFlag ) ( ( bitFlag & RP_FLAG_ENGINE_ORIGINATED) )
|
|
#define RP_SET_ORIGINATOR_BIT( bitflag ) ( ( bitflag ) |= RP_FLAG_ENGINE_ORIGINATED)
|
|
#define RP_CLEAR_ORIGINATOR_BIT( bitflag) ( ( bitflag ) &= ~RP_FLAG_ENGINE_ORIGINATED)
|
|
|
|
#define RP_FILE_DO_TRUNCATE_ON_CLOSE( bitFlag ) ( bitFlag & RP_FLAG_TRUNCATE_ON_CLOSE)
|
|
#define RP_SET_TRUNCATE_ON_CLOSE_BIT( bitflag ) ( ( bitflag ) |= RP_FLAG_TRUNCATE_ON_CLOSE)
|
|
#define RP_CLEAR_TRUNCATE_ON_CLOSE_BIT( bitflag) ( ( bitflag ) &= ~RP_FLAG_TRUNCATE_ON_CLOSE)
|
|
|
|
#define RP_FILE_DO_PREMIGRATE_ON_CLOSE( bitFlag ) ( bitFlag & RP_FLAG_PREMIGRATE_ON_CLOSE)
|
|
#define RP_SET_PREMIGRATE_ON_CLOSE_BIT( bitflag ) ( ( bitflag ) |= RP_FLAG_PREMIGRATE_ON_CLOSE)
|
|
#define RP_CLEAR_PREMIGRATE_ON_CLOSE_BIT( bitflag) ( ( bitflag ) &= ~RP_FLAG_PREMIGRATE_ON_CLOSE)
|
|
|
|
#define RP_RESV_SIZE 52
|
|
|
|
//
|
|
// Some important shared limits
|
|
//
|
|
|
|
//
|
|
// Number of outstanding IOCTLs FSA has pending with RsFilter used
|
|
// for communication. The cost is basically thenon-paged pool that is
|
|
// sizeof(IRP) multiplied by this number
|
|
// (i.e. approx. 100 * RP_MAX_RECALL_BUFFERS is the Non-paged pool outstanding)
|
|
//
|
|
#define RP_MAX_RECALL_BUFFERS 20
|
|
#define RP_DEFAULT_RUNAWAY_RECALL_LIMIT 60
|
|
|
|
//
|
|
// Placeholder data - all versions unioned together
|
|
//
|
|
typedef struct _RP_PRIVATE_DATA {
|
|
CHAR reserved[RP_RESV_SIZE]; // Must be 0
|
|
ULONG bitFlags; // bitflags indicating status of the segment
|
|
LARGE_INTEGER migrationTime; // When migration occurred
|
|
GUID hsmId;
|
|
GUID bagId;
|
|
LARGE_INTEGER fileStart;
|
|
LARGE_INTEGER fileSize;
|
|
LARGE_INTEGER dataStart;
|
|
LARGE_INTEGER dataSize;
|
|
LARGE_INTEGER fileVersionId;
|
|
LARGE_INTEGER verificationData;
|
|
ULONG verificationType;
|
|
ULONG recallCount;
|
|
LARGE_INTEGER recallTime;
|
|
LARGE_INTEGER dataStreamStart;
|
|
LARGE_INTEGER dataStreamSize;
|
|
ULONG dataStream;
|
|
ULONG dataStreamCRCType;
|
|
LARGE_INTEGER dataStreamCRC;
|
|
} RP_PRIVATE_DATA, *PRP_PRIVATE_DATA;
|
|
|
|
|
|
|
|
typedef struct _RP_DATA {
|
|
GUID vendorId; // Unique HSM vendor ID -- This is first to match REPARSE_GUID_DATA_BUFFER
|
|
ULONG qualifier; // Used to checksum the data
|
|
ULONG version; // Version of the structure
|
|
ULONG globalBitFlags; // bitflags indicating status of the file
|
|
ULONG numPrivateData; // number of private data entries
|
|
GUID fileIdentifier; // Unique file ID
|
|
RP_PRIVATE_DATA data; // Vendor specific data
|
|
} RP_DATA, *PRP_DATA;
|
|
|
|
#endif
|