131 lines
2.9 KiB
C
131 lines
2.9 KiB
C
/**************************************************************************************************
|
|
|
|
FILENAME: Freespace.h
|
|
|
|
COPYRIGHT© 2001 Microsoft Corporation and Executive Software International, Inc.
|
|
|
|
DESCRIPTION:
|
|
Free space location prototypes.
|
|
|
|
**************************************************************************************************/
|
|
|
|
#ifndef _FREESPACE_H_
|
|
#define _FREESPACE_H_
|
|
|
|
typedef struct _FILE_LIST_ENTRY *PFILE_LIST_ENTRY;
|
|
typedef struct _FREE_SPACE_ENTRY *PFREE_SPACE_ENTRY;
|
|
|
|
PVOID
|
|
PreviousEntry(
|
|
IN PVOID pCurrentEntry
|
|
);
|
|
|
|
PVOID
|
|
LastEntry(
|
|
IN PRTL_AVL_TABLE Table
|
|
);
|
|
|
|
BOOL
|
|
BuildFreeSpaceList(
|
|
IN OUT PRTL_GENERIC_TABLE pFreeSpaceTable,
|
|
IN CONST LONGLONG MinClusterCount,
|
|
IN CONST BOOL bSortBySize,
|
|
OUT LONGLONG *pBiggestFreeSpaceClusterCount = NULL,
|
|
OUT LONGLONG *pBiggestFreeSpaceStartingLcn = NULL,
|
|
IN CONST BOOL bIgnoreMftZone = FALSE
|
|
);
|
|
|
|
BOOL
|
|
BuildFreeSpaceListWithExclude(
|
|
IN OUT PRTL_GENERIC_TABLE pFreeSpaceTable,
|
|
IN CONST LONGLONG MinClusterCount,
|
|
IN CONST LONGLONG ExcludeZoneStart,
|
|
IN CONST LONGLONG ExcludeZoneEnd,
|
|
IN CONST BOOL bSortBySize,
|
|
IN CONST BOOL bExcludeMftZone = TRUE
|
|
);
|
|
|
|
BOOL
|
|
BuildFreeSpaceListWithMultipleTrees(
|
|
OUT LONGLONG *pMaxClusterCount,
|
|
IN CONST LONGLONG IncludeZoneStartingLcn = 0,
|
|
IN CONST LONGLONG IncludeZoneEndingLcn = 0
|
|
);
|
|
|
|
BOOL
|
|
FindFreeSpace(
|
|
IN PRTL_GENERIC_TABLE pTable,
|
|
IN BOOL DeleteUnusedEntries,
|
|
IN LONGLONG MaxStartingLcn
|
|
);
|
|
|
|
BOOL
|
|
FindSortedFreeSpace(
|
|
IN PRTL_GENERIC_TABLE pTable
|
|
);
|
|
|
|
BOOL
|
|
FindFreeSpaceWithMultipleTrees(
|
|
IN CONST LONGLONG ClusterCount,
|
|
IN CONST LONGLONG MaxStartingLcn
|
|
);
|
|
|
|
BOOL
|
|
UpdateInMultipleTrees(
|
|
IN PFREE_SPACE_ENTRY pOldEntry,
|
|
IN PFREE_SPACE_ENTRY pNewEntry
|
|
);
|
|
|
|
|
|
|
|
//Uses FindFreeSpace to find a series of free space extents that can be used to partially defragment a file.
|
|
BOOL
|
|
FindLastFreeSpaceChunks(
|
|
);
|
|
|
|
//Checks to see if the cluster just before the first cluster of the current file is free. Used when moving
|
|
//contiguous files to consolidate free space.
|
|
BOOL
|
|
IsFreeSpaceAtHeadOfFile(
|
|
);
|
|
|
|
//Finds the next extent of free space on the drive within a given range of clusters.
|
|
VOID
|
|
FindFreeExtent(
|
|
IN PULONG pBitmap,
|
|
IN LONGLONG RangeEnd,
|
|
IN OUT PLONGLONG pLcn,
|
|
OUT PLONGLONG pStartingLcn,
|
|
OUT PLONGLONG pClusterCount
|
|
);
|
|
|
|
//Generic routine to find free space fitting various requirements.
|
|
BOOL
|
|
FindFreeSpace(
|
|
IN int Type
|
|
);
|
|
|
|
//Gets a volume bitmap and (on NTFS) fills the MFT zone with "in use".
|
|
BOOL
|
|
GetVolumeBitmap(
|
|
);
|
|
|
|
//Counts the number of free spaces in the bitmap, and calculates stats about the free spaces.
|
|
BOOL
|
|
CountFreeSpaces(
|
|
);
|
|
|
|
//Fills a VolumeBitmap with 'inuse' if it's an NTFS volume
|
|
BOOL
|
|
MarkMFTUnavailable(
|
|
void
|
|
);
|
|
|
|
//Checking for usable freespace
|
|
BOOL
|
|
DetermineUsableFreespace(
|
|
LONGLONG *llUsableFreeClusters
|
|
);
|
|
|
|
#endif // _FREESPACE_H_
|