/**
Copyright(c) Maynard Electronics, Inc. 1984-89
Name: ems_fs.h
Description: This file contains the prototypes for the NTFS
file system functions.
$Log: M:/LOGFILES/NTFS_FS.H_V $
**/
#include "fsys.h"
#include "queues.h"
//EMS String Aray
extern CHAR_PTR gszEmsStringList[] ;
#define EMS_String( id ) gszEmsStringList[id]
#define MDB_Bricked 0
#define MDB_Monolithic 1
#define DSA 2
#define Mailboxes 3
#define Public_Folders 4
typedef struct _EMS_FSYS_RESERVED {
UINT16 file_scan_mode ;
CHAR_PTR work_buf ;
UINT16 work_buf_size ;
BOOLEAN work_buf_in_use ;
XCHANGE_PATHS paths;
CHAR CheckpointFilePath[256];
CHAR LogPath[256];
CHAR jet_rstmap[256 * 3 * 2];
INT map_size ;
CHAR BackupLogPath[256];
ULONG low_log;
ULONG high_log;
VOID_PTR service_restart_list ;
INT service_restart_list_size ;
BOOLEAN attach_failed ;
PVOID restore_context ;
} EMS_FSYS_RESERVED, *EMS_FSYS_RESERVED_PTR ;
#define REG_SUBKEY_MDB_PRIVATE TEXT("SYSTEM\\CurrentControlSet\\Services\\MSExchangeIS\\ParametersPrivate")
#define REG_SUBKEY_MDB_BASE TEXT("SYSTEM\\CurrentControlSet\\Services\\MSExchangeIS")
#define REG_SUBKEY_MDB_RIP TEXT("SYSTEM\\CurrentControlSet\\Services\\MSExchangeIS\\Restore in Progress")
#define REG_VALUE_MDB_PRIVATE TEXT("DB Path")
#define REG_SUBKEY_MDB_PUBLIC TEXT("SYSTEM\\CurrentControlSet\\Services\\MSExchangeIS\\ParametersPublic")
#define REG_VALUE_MDB_PUBLIC TEXT("DB Path")
#define REG_SUBKEY_MDB_SYSTEM TEXT("SYSTEM\\CurrentControlSet\\Services\\MSExchangeIS\\ParametersSystem")
#define REG_VALUE_MDB_SYSTEM TEXT("DB System Path")
#define REG_VALUE_MDB_LOGDIR TEXT("DB Log Path")
#define REG_VALUE_DISSALOW TEXT("Disallow diff/inc backup")
#define REG_VALUE_CIRCULAR TEXT("Circular Logging")
#define REG_SUBKEY_DSA TEXT("SYSTEM\\CurrentControlSet\\Services\\MSExchangeDS\\Parameters")
#define REG_SUBKEY_DSA_BASE TEXT("SYSTEM\\CurrentControlSet\\Services\\MSExchangeDS")
#define REG_SUBKEY_DSA_RIP TEXT("SYSTEM\\CurrentControlSet\\Services\\MSExchangeDS\\Restore in Progress")
#define REG_SUBKEY_RIP TEXT("Restore in Progress")
#define REG_VALUE_DB_PATH TEXT("DSA Database file")
#define REG_VALUE_DSA_LOGDIR TEXT("Database log files path")
#define REG_VALUE_DSA_SYSTEM TEXT("EDB system file")
#define REG_VALUE_RIP_CPFILE TEXT("CheckpointFilePath")
#define REG_VALUE_RIP_LOG_PATH TEXT("LogPath")
#define REG_VALUE_RIP_RSTMAP TEXT("JET_RstMap")
#define REG_VALUE_RIP_MAPSIZE TEXT("JET_RstMap Size")
#define REG_VALUE_RIP_BKUPLOG TEXT("BackupLogPath")
#define REG_VALUE_RIP_LOGLOW TEXT("LowLog Number")
#define REG_VALUE_RIP_LOGHIGH TEXT("HighLog Number")
#define SERVICE_MESSAGE_DB TEXT("MSExchangeIS")
#define SERVICE_MAD TEXT("MSExchangeSA")
#define SERVICE_DIRECTORY_SYNC TEXT("MSExchangeDXA")
#define SERVICE_MESSAGE_TRANS TEXT("MSExchangeMTA")
#define SERVICE_DIRECTORY TEXT("MSExchangeDS")
CHAR_PTR EMS_BuildMungedName( FSYS_HAND fsh, CHAR_PTR new_path, CHAR_PTR fname ) ;
INT16 EMS_ConvertJetError( INT status ) ;
INT16 EMS_LoadRIP( CHAR_PTR server_name,
INT type,
CHAR_PTR CheckpointFilePath,
CHAR_PTR LogPath,
CHAR_PTR jet_rstmap,
INT_PTR map_size,
CHAR_PTR BackupLogPath,
INT_PTR low_log,
INT_PTR high_log ) ;
INT16 EMS_SaveRIP( CHAR_PTR server_name,
INT type,
CHAR_PTR CheckpointFilePath,
CHAR_PTR LogPath,
CHAR_PTR jet_rstmap,
INT_PTR map_size,
CHAR_PTR BackupLogPath,
INT_PTR low_log,
INT_PTR high_log ) ;
INT16 EMS_DeleteRIP( CHAR_PTR server_name,
INT type ) ;
INT EMS_GetValFromReg(
CHAR_PTR machine,
CHAR_PTR key_name,
CHAR_PTR value_name,
CHAR_PTR buffer,
INT buf_size ) ;
INT EMS_SetValFromReg(
CHAR_PTR machine,
CHAR_PTR key_name,
CHAR_PTR value_name,
CHAR_PTR buffer );
BOOLEAN EMS_IsServiceRunning( CHAR_PTR server_name, CHAR_PTR servic_name ) ;
VOID EMS_ZeroCheckSum( FILE_HAND hand ) ;
VOID EMS_CalcCheckSum( FILE_HAND hand, BYTE_PTR buf, INT size ) ;
INT16 EMS_LoadNameList( FSYS_HAND fsh, FILE_HAND hand, INT list_type );
INT16 EMS_AttachToDLE( FSYS_HAND fsh, /* I - File system handle */
GENERIC_DLE_PTR dle, /*I/O- drive to attach to. list element expanded */
CHAR_PTR u_name, /* I - user name NOT USED */
CHAR_PTR pswd); /* I - passowrd NOT USED */
INT16 EMS_DetachDLE( FSYS_HAND fsh ); /* I - */
INT32 EMS_EndOperationOnDLE( FSYS_HAND fsh ); /* I - */
INT16 EMS_CreateObj( FSYS_HAND fsh, /* I - File system to create object one */
DBLK_PTR dblk); /* I - Describes object to create */
INT16 EMS_OpenObj( FSYS_HAND fsh, /* I - file system that the file is opened on */
FILE_HAND *hand, /* O - allocated handle */
DBLK_PTR dblk, /*I/O- describes the file to be opened */
OPEN_MODE mode); /* I - open mode */
INT16 EMS_ReadObj( FILE_HAND hand, /* I - handle of object to read from */
BYTE_PTR buf, /* O - buffer to place data into */
UINT16 *size, /*I/O- Entry: size of buf; Exit: number of bytes read */
UINT16 *blk_size, /* O - Block size needed for next read */
STREAM_INFO_PTR s_info); /* O - Stream information for the data returned */
INT16 EMS_WriteObj( FILE_HAND hand, /* I - handle of object to read from */
BYTE_PTR buf, /* O - buffer to place data into */
UINT16 *size, /*I/O- Entry: size of buf; Exit: number of bytes read */
UINT16 *blk_size, /* O - Block size need for next read */
STREAM_INFO_PTR s_info); /* I - Stream information for the data passed in */
INT16 EMS_VerObj( FILE_HAND hand, /* I - file handle to verify data with */
BYTE_PTR buf, /* I - buffer needed to perform verify */
BYTE_PTR data, /* I - data to verify against */
UINT16 *size, /*I/O- size of buffers / amount verified */
UINT16 *blk_size, /* O - minum size of block for next call */
STREAM_INFO_PTR s_info); /* I - Stream information for the data passed in */
INT16 EMS_CloseObj( FILE_HAND hand ); /* I - handle of object to close */
INT16 EMS_DeleteObj( FSYS_HAND fsh,
DBLK_PTR dblk );
INT16 EMS_FindFirst( FSYS_HAND fsh, /* I - file system handle */
DBLK_PTR dblk, /* O - pointer to place to put the dblk data */
CHAR_PTR sname, /* I - search name */
UINT16 obj_type); /* I - object type (all objs, dirs, etc.) */
INT16 EMS_FindNext( FSYS_HAND fsh, /* I - File system handle */
DBLK_PTR dblk ); /* O - Discriptor block */
INT16 EMS_GetObjInfo( FSYS_HAND fsh, /* I - File system handle */
DBLK_PTR dblk ); /*I/O- On entry it is minimal on exit Complete */
INT16 EMS_VerObjInfo( FSYS_HAND fsh, /* I - File system handle */
DBLK_PTR dblk ); /* I - DBLK to compare OS against */
INT16 EMS_ChangeDir( FSYS_HAND fsh, /* I - file system to changing directories on */
CHAR_PTR path, /* I - describes the path of the new directory */
INT16 psize); /* I - specifies the length of the path */
INT16 EMS_UpDir( FSYS_HAND fsh ); /* I - file system to change directories in */
INT16 EMS_GetCurrentPath( FSYS_HAND fsh, /* I - file system to get current path from */
CHAR_PTR path, /* O - buffer to place this path */
INT16 *size); /*I/O- size of buffer on entry & on exit */
INT16 EMS_SeekObj( FILE_HAND hand, /* I - Opened object to seek into */
UINT32 *offset ); /*I/O- Offset to seek; Number of bytes actualy seeked */
INT16 EMS_GetMaxSizeDBLK( FSYS_HAND fsh /* not used */ );
INT16 EMS_GetCurrentDDB( FSYS_HAND fsh, /* I - file system to get DDB from */
DBLK_PTR dblk ); /* O - place to put the DDB data */
INT16 EMS_SetObjInfo( FSYS_HAND fsh, /* I - file system handle */
DBLK_PTR dblk); /* I - data to write to disk */
INT16 EMS_ModFnameFDB( FSYS_HAND fsh, /* I - File system handle */
BOOLEAN set_it, /* I - TRUE if setting file name, FALSE if getting */
DBLK_PTR dblk, /* I - Descriptor block to get file name from */
CHAR_PTR buf, /*I/O- file name to read (or to write) */
INT16 *size ) ; /*I/O- size buffer on entry and exit */
INT16 EMS_ModPathDDB( FSYS_HAND fsh, /* I - File system handle */
BOOLEAN set_it , /* I - TRUE if setting path, FALSE if getting */
DBLK_PTR dblk, /* I - Descriptor block to get path from */
CHAR_PTR buf, /*I/O- path to read (or to write) */
INT16 *size ); /*I/O- size of buffer on entry and exit */
INT16 EMS_GetOSFnameFDB( DBLK_PTR dblk , /* I - Descriptor block to get path from */
CHAR_PTR buf ); /*I/O- path to read (or to write) */
INT16 EMS_GetOSPathDDB(
FSYS_HAND fsh, /* I - File System handle */
DBLK_PTR dblk , /* I - Descriptor block to get path from */
CHAR_PTR buf ); /*I/O- path to read (or to write) */
INT16 EMS_GetFileVerFDB( DBLK_PTR dblk ,
UINT32 *version ) ;
INT16 EMS_GetCdateDBLK( DBLK_PTR dblk , /* I - Descriptor block to get creation date */
DATE_TIME_PTR buf ); /*I/O- createion date to read (or to write) */
INT16 EMS_GetMdateDBLK( DBLK_PTR dblk , /* I - Descriptor block to get creation date */
DATE_TIME_PTR buf ) ; /* O - modify date to write */
INT16 EMS_ModBdateDBLK( BOOLEAN set_it , /* I - TRUE if setting creation date, FALSE if getting */
DBLK_PTR dblk , /* I - Descriptor block to get creation date */
DATE_TIME_PTR buf ) ; /*I/O- createion date to read (or to write) */
INT16 EMS_ModAdateDBLK( BOOLEAN set_it , /* I - TRUE if setting creation date, FALSE if getting */
DBLK_PTR dblk , /* I - Descriptor block to get creation date */
DATE_TIME_PTR buf ) ; /*I/O- createion date to read (or to write) */
UINT64 EMS_GetDisplaySizeDBLK( FSYS_HAND fsh, /* I - File system handle */
DBLK_PTR dblk ) ; /* I - Descriptor block to get generic data size for */
INT16 EMS_GetOS_InfoDBLK( DBLK_PTR dblk, /* I - DBLK to get the info from */
BYTE_PTR os_info, /* O - Buffer to place data */
INT16 *size ); /*I/O- Buffer size / data length */
INT16 EMS_ModAttribDBLK( BOOLEAN set_it ,
DBLK_PTR dblk ,
UINT32_PTR attr );
INT16 EMS_GetObjTypeDBLK( DBLK_PTR dblk,
OBJECT_TYPE *type );
INT16 EMS_GetActualSizeDBLK( FSYS_HAND fsh,
DBLK_PTR dblk ) ;
INT16 EMS_SizeofFname( FSYS_HAND fsh, /* I - file system in use */
DBLK_PTR fdb ); /* I - dblk to get fname from */
INT16 EMS_SizeofOSFname( FSYS_HAND fsh, /* I - file system in use */
DBLK_PTR fdb ) ; /* I - dblk to get fname from */
INT16 EMS_SizeofPath( FSYS_HAND fsh, /* I - File system handle */
DBLK_PTR ddb ) ; /* I - DBLK to get path size from */
INT16 EMS_SizeofOSPath( FSYS_HAND fsh, /* I - File system handle */
DBLK_PTR ddb ) ; /* I - DBLK to get path size from */
INT16 EMS_SizeofOSInfo( FSYS_HAND fsh, /* I - File system handle */
DBLK_PTR dblk ); /* I - DBLK to get size of OS info for */
INT16 EMS_PushMinDDB( FSYS_HAND fsh,
DBLK_PTR dblk );
INT16 EMS_PopMinDDB( FSYS_HAND fsh ,
DBLK_PTR dblk );
INT16 EMS_CreateFDB( FSYS_HAND fsh,
GEN_FDB_DATA_PTR dat ) ;
INT16 EMS_CreateDDB( FSYS_HAND fsh,
GEN_DDB_DATA_PTR dat ) ;
INT16 EMS_CreateIDB( FSYS_HAND fsh,
GEN_IDB_DATA_PTR dat ) ;
VOID EMS_SetOwnerId( FSYS_HAND fsh, DBLK_PTR dblk, UINT32 id ) ;
BOOLEAN EMS_ProcessDDB( FSYS_HAND fsh, DBLK_PTR ddb ) ;
INT16 EMS_ChangeIntoDDB( FSYS_HAND fsh, DBLK_PTR ddb ) ;
INT16 EMS_FindClose( FSYS_HAND fsh,
DBLK_PTR dblk ) ;
INT16 EMS_GetSpecDBLKS(
FSYS_HAND fsh,
DBLK_PTR dblk,
INT32 *index );
INT16 EMS_DeviceDispName(
GENERIC_DLE_PTR dle,
CHAR_PTR dev_name,
INT16 size,
INT16 type ) ;
INT16 EMS_FindDrives( DLE_HAND hand, BE_CFG_PTR cfg, UINT32 fsys_mask );
VOID EMS_RemoveDLE( GENERIC_DLE_PTR dle ) ;
VOID EMS_GetVolName( GENERIC_DLE_PTR dle, CHAR_PTR buffer ) ;
INT16 EMS_SizeofVolName( GENERIC_DLE_PTR dle ) ;
VOID EMS_EmptyFindHandQ( FSYS_HAND fsh ) ;
INT16 EMS_EnumSpecFiles(
GENERIC_DLE_PTR dle,
UINT16 *index,
CHAR_PTR *path,
INT16 *psize,
CHAR_PTR *fname ) ;
INT16 EMS_GetSpecDBLKS(
FSYS_HAND fsh,
DBLK_PTR dblk,
INT32 *index );
VOID EMS_InitMakeData( FSYS_HAND fsh, INT16 blk_type, CREATE_DBLK_PTR data ) ;
BOOLEAN EMS_IsBlkComplete( FSYS_HAND fsh, DBLK_PTR dblk ) ;
INT16 EMS_CompleteBlk( FSYS_HAND fsh, DBLK_PTR dblk, BYTE_PTR buffer, UINT16 *size, STREAM_INFO *sinfo ) ;
VOID EMS_ReleaseBlk( FSYS_HAND fsh, DBLK_PTR dblk ) ;
INT16 EMS_DupBlk( FSYS_HAND fsh, DBLK_PTR db_org, DBLK_PTR db_dup );
INT16 EMS_SpecExcludeObj( FSYS_HAND fsh, /* I - File system handle */
DBLK_PTR ddb, /* I - Descriptor block of ddb */
DBLK_PTR fdb ) ; /* I - Descriptor block of fdb */
INT16 EMS_SetupPathInDDB(
FSYS_HAND fsh,
DBLK_PTR ddblk,
CHAR_PTR cur_dir,
CHAR_PTR sub_dir_name,
UINT16 buf_req_size ) ;
INT16 EMS_SetupFileNameInFDB( FSYS_HAND fsh,
DBLK_PTR dblk,
CHAR_PTR fname,
UINT16 bufMinSize );
INT16 EMS_SetupWorkPath(
FSYS_HAND fsh,
CHAR_PTR cur_dir,
CHAR_PTR sname,
CHAR_PTR *path_string ) ;
VOID EMS_ReleaseWorkPath( FSYS_HAND fsh ) ;
VOID EMS_FixPath( CHAR_PTR path, INT16_PTR size, INT16 fname_size ) ;
//
// Private Registry API functions
//
// Call backup for backup operations and both for restore operations.
INT REG_AssertBackupPrivilege( VOID );
INT REG_AssertRestorePrivilege( VOID );
// Given a drive, path, and file name I'll tell you if it
// is an active registry file.
INT REG_IsRegistryFile(
GENERIC_DLE_PTR dle,
CHAR_PTR FileSpec );
INT REG_IsEventFile(
GENERIC_DLE_PTR dle,
CHAR_PTR FileSpec,
CHAR_PTR buffer );
// Called by the file system to determine if/where the
// registry is for each drive.
// Everyone else can get the info from the DLE's.
INT REG_GetRegistryPath(
CHAR *Machine,
CHAR Drive,
CHAR_PTR Path,
INT *PathSize );
// Try to backup up an active registry file.
INT REG_BackupRegistryFile(
GENERIC_DLE_PTR dle,
CHAR_PTR RegFileSpec,
CHAR_PTR TempFileSpec );
// Most dangerous of all. Try to restore an active registry file.
INT REG_RestoreRegistryFile(
GENERIC_DLE_PTR dle,
CHAR_PTR RegFileSpec,
CHAR_PTR NewFileSpec,
CHAR_PTR OldFileSpec );
INT REG_IsCurDirRegistryPath(
IN FSYS_HAND fsh ) ;
VOID REG_MoveActiveRenameKey(
GENERIC_DLE_PTR dle,
CHAR_PTR RegFileSpec ) ;
#define EMS_GetRegistryPath( dle ) ((dle)->info.ntfs->registry_path )
#define EMS_GetRegistryPathSize( dle ) ((dle)->info.ntfs->registry_path_size )
UINT32 EMS_MSoftToMayn( UINT32 msoftID );
UINT32 EMS_MaynToMSoft( UINT32 maynID );
INT16 EMS_FillOutDBLK( FSYS_HAND fsh,
DBLK_PTR dblk,
WIN32_FIND_DATA *find_data );
CHAR_PTR EMS_MakeTempName( CHAR_PTR path,
CHAR_PTR prefix) ;
INT16 EMS_TranslateBackupError( DWORD backupError );
/*
* Init/Deinit for one-time work in TINITFS.C
*/
INT16 EMS_InitFileSys( DLE_HAND hand, BE_CFG_PTR cfg, UINT32 fsys_mask );
VOID EMS_DeInitFileSys( DLE_HAND hand );
/*
* Operations on temporary file names (for active restores)
*/
VOID EMS_InitTemp( VOID );
VOID EMS_DeinitTemp( VOID );
BOOLEAN EMS_SaveTempName( CHAR_PTR tapeName, CHAR_PTR diskName );
CHAR_PTR EMS_GetTempName( CHAR_PTR tapeName );
/*
* Utility and debug functions
*/
#if defined( FS_DEBUG )
#define EMS_DebugPrint EMS_DebugPrintFunction
#else
#define EMS_DebugPrint
#endif
VOID EMS_DebugPrintFunction( CHAR *fmt, ... );
CHAR_PTR EMS_DuplicateString( CHAR_PTR src );