/**************************************************************************************************************** FILENAME: NtfsSubs.h COPYRIGHT© 2001 Microsoft Corporation and Executive Software International, Inc. ***************************************************************************************************************/ //Gets the extent list of an NTFS file. BOOL GetExtentList( DWORD dwEnabledStreams, FILE_RECORD_SEGMENT_HEADER* pFrs ); BOOL FindStreamInFrs( IN PFILE_RECORD_SEGMENT_HEADER pFrs, OUT PATTRIBUTE_RECORD_HEADER* ppArh, EXTENT_LIST_DATA* pExtentData ); BOOL FindNextStreamInFrs( IN PFILE_RECORD_SEGMENT_HEADER pFrs, OUT PATTRIBUTE_RECORD_HEADER* ppArh, EXTENT_LIST_DATA* pExtentData ); BOOL AddMappingPointersToStream( IN PATTRIBUTE_RECORD_HEADER pArh, EXTENT_LIST_DATA* pExtentData ); BOOL GetLargeStreamExtentList( IN PFILE_RECORD_SEGMENT_HEADER pFrs, IN PATTRIBUTE_RECORD_HEADER pArh, EXTENT_LIST_DATA* pExtentData ); BOOL FindStreamInAttrList( ATTRIBUTE_LIST_ENTRY* pAleStart, ATTRIBUTE_LIST_ENTRY** ppAle, LONGLONG ValueLength, EXTENT_LIST_DATA* pExtentData ); BOOL FindNextStreamInAttrList( ATTRIBUTE_LIST_ENTRY* pAleStart, ATTRIBUTE_LIST_ENTRY** ppAle, LONGLONG ValueLength, EXTENT_LIST_DATA* pExtentData ); ATTRIBUTE_RECORD_HEADER* FindAttributeByInstanceNumber( HANDLE* phFrs, ATTRIBUTE_LIST_ENTRY* pAle, EXTENT_LIST_DATA* pExtentData ); UCHAR AttributeFormCode( ATTRIBUTE_LIST_ENTRY* pAle, EXTENT_LIST_DATA* pExtentData ); LONGLONG AttributeAllocatedLength( ATTRIBUTE_LIST_ENTRY* pAle, EXTENT_LIST_DATA* pExtentData ); LONGLONG AttributeFileSize( ATTRIBUTE_LIST_ENTRY* pAle, EXTENT_LIST_DATA* pExtentData ); BOOL GetHugeStreamExtentList( ATTRIBUTE_LIST_ENTRY* pAleStart, ATTRIBUTE_LIST_ENTRY** ppAle, LONGLONG ValueLength, EXTENT_LIST_DATA* pExtentData ); BOOL LoadExtentDataToMem( ATTRIBUTE_RECORD_HEADER* pArh, HANDLE* phAle, DWORD* pdwByteLen ); BOOL GetStreamExtentsByNameAndType( TCHAR* StreamName, ATTRIBUTE_TYPE_CODE StreamType, FILE_RECORD_SEGMENT_HEADER* pFrs ); BOOL GetStreamExtentsByNumber( ULONG StreamNumber ); BOOL GetStreamNumberFromNameAndType( ULONG* pStreamNumber, TCHAR* StreamName, ATTRIBUTE_TYPE_CODE TypeCode, FILE_RECORD_SEGMENT_HEADER* pFrs ); BOOL GetStreamNameAndTypeFromNumber( ULONG StreamNumber, TCHAR* StreamName, ATTRIBUTE_TYPE_CODE* pTypeCode, FILE_RECORD_SEGMENT_HEADER* pFrs ); BOOL GetNonDataStreamExtents( ); BOOL IsNonresidentFile( DWORD dwEnabledStreams, FILE_RECORD_SEGMENT_HEADER* pFrs ); #ifdef OFFLINEDK BOOL CheckFragged( ); #endif BOOL GetNtfsVolumeStats( ); //This gets a specified FRS from the MFT, or the next one that's in use if this one isn't. BOOL GetInUseFrs( IN HANDLE hVolume, IN OUT LONGLONG* pFileRecordNumber, OUT FILE_RECORD_SEGMENT_HEADER* pFrs, IN ULONG uBytesPerFRS ); //Gets the path of a file by getting the MFT records for each of it's parent directories. BOOL GetNtfsFilePath( ); //Get the name of a file from it's file record and those of it parent directories. BOOL GetNameFromFileRecord( IN FILE_RECORD_SEGMENT_HEADER* pFrs, OUT TCHAR* pcName, IN LONGLONG* pParentFileRecordNumber ); //Gets the next file to defragment from the file lists. GetNextNtfsFile( IN CONST PRTL_GENERIC_TABLE pTable, IN CONST BOOLEAN Restart, IN CONST LONGLONG ClusterCount = 0, IN OUT PFILE_LIST_ENTRY pEntry = NULL ); //Opens a file on an NTFS volume. BOOL OpenNtfsFile( ); //Gets the extent list for the MFT and MFT mirror. BOOL GetSystemsExtentList( ); #ifdef DFRGNTFS BOOL AddFileToListNtfs( IN PRTL_GENERIC_TABLE Table, IN LONGLONG FileRecordNumber ); BOOL UpdateFileTables( IN OUT PRTL_GENERIC_TABLE pFragmentedTable, IN OUT PRTL_GENERIC_TABLE pContiguousTable ); #else // DFRGNTFS //Adds the extent list for a file to a file list on an NTFS drive. BOOL AddFileToListNtfs( OUT FILE_LIST_ENTRY* pList, IN OUT ULONG* pListIndex, IN ULONG ListSize, IN LONGLONG FileRecordNumber, IN UCHAR* pExtentList ); #endif // DFRGNTFS BOOL UpdateInFileList( ); BOOL FindAttributeByType( IN ATTRIBUTE_TYPE_CODE TypeCode, IN PFILE_RECORD_SEGMENT_HEADER pFrs, OUT PATTRIBUTE_RECORD_HEADER* ppArh, IN ULONG uBytesPerFRS );