mirror of https://github.com/lianthony/NT4.0
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
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 );
|
|
|