Windows NT 4.0 source code leak
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.
 
 
 
 
 
 

495 lines
16 KiB

/**
Copyright(c) Maynard Electronics, Inc. 1984-89
Name: ntfs_fs.h
Description: This file contains the prototypes for the NTFS
file system functions.
$Log: M:/LOGFILES/NTFS_FS.H_V $
Rev 1.30.1.2 23 Jan 1994 14:26:02 BARRY
Added debug and utility functions
Rev 1.30.1.1 19 Jan 1994 12:51:40 BARRY
Supress warnings
Rev 1.30.1.0 04 Jan 1994 10:59:24 BARRY
Added init entry points and temp-name function prototypes
Rev 1.30 30 Jul 1993 13:20:38 STEVEN
if dir too deep make new one
Rev 1.29 26 Jul 1993 17:05:26 STEVEN
fixe restore active file with registry
Rev 1.28 15 Jun 1993 09:18:32 MIKEP
warning fixes
Rev 1.27 11 Mar 1993 12:10:42 BARRY
Changes to stream structures for alternate data streams.
Rev 1.26 18 Jan 1993 13:17:18 BARRY
Added proto for error translation function.
Rev 1.25 07 Dec 1992 16:30:42 STEVEN
fixes from microsoft
Rev 1.24 23 Nov 1992 09:33:20 STEVEN
fix support for event log
Rev 1.23 09 Nov 1992 17:41:22 BARRY
Add stream ID vector to reserved info (for use in Verify).
Rev 1.22 22 Oct 1992 13:35:52 STEVEN
added excludeSpecial
Rev 1.21 21 Oct 1992 19:38:52 BARRY
Added queue of linked files to NTFS reserved area.
Added protos for NTFS linked file queue functions.
Rev 1.20 19 Oct 1992 15:10:50 MIKEP
fix REG_Restore
Rev 1.19 16 Oct 1992 14:59:06 STEVEN
added support for backing up registry
Rev 1.18 15 Oct 1992 10:38:46 BARRY
Got rid of my stupid struct on a windows pointer.
Rev 1.17 07 Oct 1992 14:47:46 STEVEN
fix typo in macro
Rev 1.16 07 Oct 1992 14:39:42 BARRY
Added NTFS_FillOutDBLK proto; got rid of IN specifiers.
Rev 1.15 06 Oct 1992 10:53:00 BARRY
Added stream header ID translation functions.
Rev 1.14 05 Oct 1992 13:36:10 STEVEN
added registry stuff
Rev 1.13 23 Sep 1992 10:35:54 BARRY
Added NTFS_SetupFileNameInFDB.
Rev 1.12 22 Sep 1992 15:35:50 BARRY
Got rid of GetTotalSizeDBLK.
Rev 1.11 21 Sep 1992 16:49:14 BARRY
Updated NTFS_CompleteBlk prototype.
Rev 1.10 04 Sep 1992 17:15:56 STEVEN
fix warnings
Rev 1.9 03 Sep 1992 17:07:28 STEVEN
add support for volume name
Rev 1.7 29 Jul 1992 15:34:52 STEVEN
fix warnings
Rev 1.6 22 May 1992 16:28:58 STEVEN
Rev 1.5 21 May 1992 13:38:46 STEVEN
added more long path support
Rev 1.4 04 May 1992 09:39:22 LORIB
Changes for variable length paths and fixes for prototype definitions.
Rev 1.3 03 Mar 1992 16:17:56 STEVEN
added functions for long paths
Rev 1.2 28 Feb 1992 13:04:38 STEVEN
step one for varible length paths
Rev 1.1 23 Jan 1992 13:18:14 STEVEN
Rev 1.0 17 Jan 1992 17:51:06 STEVEN
Initial revision.
**/
#include "fsys.h"
#include "queues.h"
#include "ntfsdblk.h"
#define REG_FNAME "<REGISTRY>"
typedef struct _NTFS_STREAM_ID {
UINT32 streamID;
UINT32 nameLength;
UINT8 name[ NT_MAX_STREAM_NAME_LENG ];
} NTFS_STREAM_ID;
typedef struct _NTFS_FSYS_RESERVED {
UINT16 file_scan_mode ;
Q_HEADER scan_q;
Q_HEADER linkq; /* q of linked files */
CHAR_PTR work_buf ;
UINT16 work_buf_size ;
BOOLEAN work_buf_in_use ;
NTFS_STREAM_ID *streamIDs; /* Vector of visited stream IDs */
UINT16 streamIDBufferSize;
INT16 streamIDCount;
} NTFS_FSYS_RESERVED, *NTFS_FSYS_RESERVED_PTR ;
INT16 NTFS_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 NTFS_DetachDLE( FSYS_HAND fsh ); /* I - */
INT32 NTFS_EndOperationOnDLE( FSYS_HAND fsh ); /* I - */
INT16 NTFS_CreateObj( FSYS_HAND fsh, /* I - File system to create object one */
DBLK_PTR dblk); /* I - Describes object to create */
INT16 NTFS_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 NTFS_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 NTFS_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 NTFS_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 NTFS_CloseObj( FILE_HAND hand ); /* I - handle of object to close */
INT16 NTFS_DeleteObj( FSYS_HAND fsh,
DBLK_PTR dblk );
INT16 NTFS_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 NTFS_FindNext( FSYS_HAND fsh, /* I - File system handle */
DBLK_PTR dblk ); /* O - Discriptor block */
INT16 NTFS_GetObjInfo( FSYS_HAND fsh, /* I - File system handle */
DBLK_PTR dblk ); /*I/O- On entry it is minimal on exit Complete */
INT16 NTFS_VerObjInfo( FSYS_HAND fsh, /* I - File system handle */
DBLK_PTR dblk ); /* I - DBLK to compare OS against */
INT16 NTFS_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 NTFS_UpDir( FSYS_HAND fsh ); /* I - file system to change directories in */
INT16 NTFS_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 NTFS_SeekObj( FILE_HAND hand, /* I - Opened object to seek into */
UINT32 *offset ); /*I/O- Offset to seek; Number of bytes actualy seeked */
INT16 NTFS_GetMaxSizeDBLK( FSYS_HAND fsh /* not used */ );
INT16 NTFS_GetBasePath( FSYS_HAND fsh, /* I - file system to get base path from */
CHAR_PTR full_path, /* O - buffer to place this path */
INT16 *size ); /*I/O- size of buffer on entry & on exit */
INT16 NTFS_GetCurrentDDB( FSYS_HAND fsh, /* I - file system to get DDB from */
DBLK_PTR dblk ); /* O - place to put the DDB data */
INT16 NTFS_SetObjInfo( FSYS_HAND fsh, /* I - file system handle */
DBLK_PTR dblk); /* I - data to write to disk */
INT16 NTFS_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 NTFS_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 NTFS_GetOSFnameFDB( DBLK_PTR dblk , /* I - Descriptor block to get path from */
CHAR_PTR buf ); /*I/O- path to read (or to write) */
INT16 NTFS_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 NTFS_GetFileVerFDB( DBLK_PTR dblk ,
UINT32 *version ) ;
INT16 NTFS_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 NTFS_GetMdateDBLK( DBLK_PTR dblk , /* I - Descriptor block to get creation date */
DATE_TIME_PTR buf ) ; /* O - modify date to write */
INT16 NTFS_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 NTFS_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 NTFS_GetDisplaySizeDBLK( FSYS_HAND fsh, /* I - File system handle */
DBLK_PTR dblk ) ; /* I - Descriptor block to get generic data size for */
INT16 NTFS_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 NTFS_ModAttribDBLK( BOOLEAN set_it ,
DBLK_PTR dblk ,
UINT32_PTR attr );
INT16 NTFS_GetObjTypeDBLK( DBLK_PTR dblk,
OBJECT_TYPE *type );
INT16 NTFS_GetActualSizeDBLK( FSYS_HAND fsh,
DBLK_PTR dblk ) ;
INT16 NTFS_SizeofFname( FSYS_HAND fsh, /* I - file system in use */
DBLK_PTR fdb ); /* I - dblk to get fname from */
INT16 NTFS_SizeofOSFname( FSYS_HAND fsh, /* I - file system in use */
DBLK_PTR fdb ) ; /* I - dblk to get fname from */
INT16 NTFS_SizeofPath( FSYS_HAND fsh, /* I - File system handle */
DBLK_PTR ddb ) ; /* I - DBLK to get path size from */
INT16 NTFS_SizeofOSPath( FSYS_HAND fsh, /* I - File system handle */
DBLK_PTR ddb ) ; /* I - DBLK to get path size from */
INT16 NTFS_SizeofOSInfo( FSYS_HAND fsh, /* I - File system handle */
DBLK_PTR dblk ); /* I - DBLK to get size of OS info for */
INT16 NTFS_PushMinDDB( FSYS_HAND fsh,
DBLK_PTR dblk );
INT16 NTFS_PopMinDDB( FSYS_HAND fsh ,
DBLK_PTR dblk );
INT16 NTFS_CreateFDB( FSYS_HAND fsh,
GEN_FDB_DATA_PTR dat ) ;
INT16 NTFS_CreateDDB( FSYS_HAND fsh,
GEN_DDB_DATA_PTR dat ) ;
INT16 NTFS_CreateIDB( FSYS_HAND fsh,
GEN_IDB_DATA_PTR dat ) ;
VOID NTFS_SetOwnerId( FSYS_HAND fsh, DBLK_PTR dblk, UINT32 id ) ;
BOOLEAN NTFS_ProcessDDB( FSYS_HAND fsh, DBLK_PTR ddb ) ;
INT16 NTFS_ChangeIntoDDB( FSYS_HAND fsh, DBLK_PTR ddb ) ;
VOID NTFS_GetRealBasePath( FSYS_HAND fsh, CHAR_PTR path ) ;
INT16 NTFS_FindClose( FSYS_HAND fsh,
DBLK_PTR dblk ) ;
INT16 NTFS_GetSpecDBLKS(
FSYS_HAND fsh,
DBLK_PTR dblk,
INT32 *index );
INT16 NTFS_DeviceDispName(
GENERIC_DLE_PTR dle,
CHAR_PTR dev_name,
INT16 size,
INT16 type ) ;
INT16 NTFS_FindDrives( DLE_HAND hand, BE_CFG_PTR cfg, UINT32 fsys_mask );
VOID NTFS_RemoveDLE( GENERIC_DLE_PTR dle ) ;
VOID NTFS_GetVolName( GENERIC_DLE_PTR dle, CHAR_PTR buffer ) ;
INT16 NTFS_SizeofVolName( GENERIC_DLE_PTR dle ) ;
VOID NTFS_EmptyFindHandQ( FSYS_HAND fsh ) ;
INT16 NTFS_EnumSpecFiles(
GENERIC_DLE_PTR dle,
UINT16 *index,
CHAR_PTR *path,
INT16 *psize,
CHAR_PTR *fname ) ;
INT16 NTFS_GetSpecDBLKS(
FSYS_HAND fsh,
DBLK_PTR dblk,
INT32 *index );
VOID NTFS_InitMakeData( FSYS_HAND fsh, INT16 blk_type, CREATE_DBLK_PTR data ) ;
BOOLEAN NTFS_IsBlkComplete( FSYS_HAND fsh, DBLK_PTR dblk ) ;
INT16 NTFS_CompleteBlk( FSYS_HAND fsh, DBLK_PTR dblk, BYTE_PTR buffer, UINT16 *size, STREAM_INFO *sinfo ) ;
VOID NTFS_ReleaseBlk( FSYS_HAND fsh, DBLK_PTR dblk ) ;
INT16 NTFS_DupBlk( FSYS_HAND fsh, DBLK_PTR db_org, DBLK_PTR db_dup );
INT16 NTFS_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 NTFS_SetupPathInDDB(
FSYS_HAND fsh,
DBLK_PTR ddblk,
CHAR_PTR cur_dir,
CHAR_PTR sub_dir_name,
UINT16 buf_req_size ) ;
INT16 NTFS_SetupFileNameInFDB( FSYS_HAND fsh,
DBLK_PTR dblk,
CHAR_PTR fname,
UINT16 bufMinSize );
INT16 NTFS_SetupWorkPath(
FSYS_HAND fsh,
CHAR_PTR cur_dir,
CHAR_PTR sname,
CHAR_PTR *path_string ) ;
VOID NTFS_ReleaseWorkPath( FSYS_HAND fsh ) ;
VOID NTFS_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 NTFS_GetRegistryPath( dle ) ((dle)->info.ntfs->registry_path )
#define NTFS_GetRegistryPathSize( dle ) ((dle)->info.ntfs->registry_path_size )
UINT32 NTFS_MSoftToMayn( UINT32 msoftID );
UINT32 NTFS_MaynToMSoft( UINT32 maynID );
INT16 NTFS_FillOutDBLK( FSYS_HAND fsh,
DBLK_PTR dblk,
WIN32_FIND_DATA *find_data );
CHAR_PTR NTFS_MakeTempName( CHAR_PTR path,
CHAR_PTR prefix) ;
NTFS_LINK_Q_ELEM_PTR NTFS_SearchLinkQueue( FSYS_HAND fsh,
DWORD idHi,
DWORD idLo );
INT16 NTFS_EnqueueLinkInfo( FSYS_HAND fsh,
DWORD idHi,
DWORD idLo,
CHAR_PTR path,
CHAR_PTR name );
INT16 NTFS_LinkFileToFDB( FILE_HAND hand ) ;
INT16 NTFS_TranslateBackupError( DWORD backupError );
/*
* Init/Deinit for one-time work in TINITFS.C
*/
INT16 NTFS_InitFileSys( DLE_HAND hand, BE_CFG_PTR cfg, UINT32 fsys_mask );
VOID NTFS_DeInitFileSys( DLE_HAND hand );
/*
* Operations on temporary file names (for active restores)
*/
VOID NTFS_InitTemp( VOID );
VOID NTFS_DeinitTemp( VOID );
BOOLEAN NTFS_SaveTempName( CHAR_PTR tapeName, CHAR_PTR diskName );
CHAR_PTR NTFS_GetTempName( CHAR_PTR tapeName );
/*
* Utility and debug functions
*/
#if defined( FS_DEBUG )
#define NTFS_DebugPrint NTFS_DebugPrintFunction
#else
#define NTFS_DebugPrint
#endif
VOID NTFS_DebugPrintFunction( CHAR *fmt, ... );
CHAR_PTR NTFS_DuplicateString( CHAR_PTR src );