|
|
/*++
Copyright (c) 1990 Microsoft Corporation
Module Name:
volume.hxx
Abstract:
Provides volume methods.
--*/
#if !defined (VOL_LOG_IO_DP_DRIVE_DEFN)
#define VOL_LOG_IO_DP_DRIVE_DEFN
#if !defined( _SETUP_LOADER_ )
#include "drive.hxx"
#include "numset.hxx"
#if defined ( _AUTOCHECK_ ) || defined( _EFICHECK_ )
#define IFSUTIL_EXPORT
#elif defined ( _IFSUTIL_MEMBER_ )
#define IFSUTIL_EXPORT __declspec(dllexport)
#else
#define IFSUTIL_EXPORT __declspec(dllimport)
#endif
//
// Forward references
//
DECLARE_CLASS( HMEM ); DECLARE_CLASS( MESSAGE ); DECLARE_CLASS( SUPERAREA ); DECLARE_CLASS( VOL_LIODPDRV ); DECLARE_CLASS( WSTRING ); DECLARE_CLASS( WSTRING );
// This number describes the minimum number of bytes in a boot sector.
#define BYTES_PER_BOOT_SECTOR 512
typedef ULONG VOLID;
#define MAXVOLNAME 11
#define AUTOCHK_TIMEOUT 10 // 10 seconds before initiating autochk
#define MAX_AUTOCHK_TIMEOUT_VALUE (3*24*3600) // 3 days maximum
enum FIX_LEVEL { CheckOnly, TotalFix, SetupSpecial };
enum FORMAT_ERROR_CODE { GeneralError, NoError, LockError };
class VOL_LIODPDRV : public LOG_IO_DP_DRIVE {
public:
VIRTUAL IFSUTIL_EXPORT ~VOL_LIODPDRV( );
NONVIRTUAL IFSUTIL_EXPORT FORMAT_ERROR_CODE Format( IN PCWSTRING Label DEFAULT NULL, IN OUT PMESSAGE Message DEFAULT NULL, IN ULONG flags DEFAULT 0, IN ULONG ClusterSize DEFAULT 0, IN ULONG VirtualSectors DEFAULT 0 );
NONVIRTUAL IFSUTIL_EXPORT BOOLEAN ChkDsk( IN FIX_LEVEL FixLevel, IN OUT PMESSAGE Message DEFAULT NULL, IN ULONG Flags DEFAULT 0, IN ULONG DesiredLogfileSize DEFAULT 0, OUT PULONG ExitStatus DEFAULT NULL, IN PCWSTRING DriveLetter DEFAULT NULL );
NONVIRTUAL IFSUTIL_EXPORT BOOLEAN Recover( IN PCWSTRING FileName, IN OUT PMESSAGE Message DEFAULT NULL );
NONVIRTUAL PSUPERAREA GetSa( );
VIRTUAL PVOL_LIODPDRV QueryDupVolume( IN PCWSTRING NtDriveName, IN OUT PMESSAGE Message DEFAULT NULL, IN BOOLEAN ExclusiveWrite DEFAULT FALSE, IN BOOLEAN FormatMedia DEFAULT FALSE, IN MEDIA_TYPE MediaType DEFAULT Unknown ) CONST PURE;
NONVIRTUAL IFSUTIL_EXPORT BOOLEAN ForceAutochk( IN BOOLEAN Fix, IN ULONG Options, IN ULONG DesiredLogfileSize, IN PCWSTRING Name );
#if defined(FE_SB) && defined(_X86_)
STATIC IFSUTIL_EXPORT VOID ForceFormat( IN USHORT FileSystem );
STATIC USHORT QueryForceFormat( );
STATIC VOID ForceConvertFat( );
STATIC BOOLEAN QueryConvertFat( );
enum { NONE, ANY, FAT, HPFS, OTHER }; #endif
STATIC IFSUTIL_EXPORT BOOLEAN QueryAutochkTimeOut( OUT PULONG TimeOut );
STATIC IFSUTIL_EXPORT BOOLEAN SetAutochkTimeOut( IN ULONG TimeOut );
protected:
IFSUTIL_EXPORT DECLARE_CONSTRUCTOR( VOL_LIODPDRV );
NONVIRTUAL IFSUTIL_EXPORT FORMAT_ERROR_CODE Initialize( IN PCWSTRING NtDriveName, IN PSUPERAREA SuperArea, IN OUT PMESSAGE Message DEFAULT NULL, IN BOOLEAN ExclusiveWrite DEFAULT FALSE, IN BOOLEAN FormatMedia DEFAULT FALSE, IN MEDIA_TYPE MediaType DEFAULT Unknown );
NONVIRTUAL IFSUTIL_EXPORT BOOLEAN Initialize( IN PCWSTRING NtDriveName, IN PCWSTRING HostFileName, IN PSUPERAREA SuperArea, IN OUT PMESSAGE Message DEFAULT NULL, IN BOOLEAN ExclusiveWrite DEFAULT FALSE );
private:
NONVIRTUAL VOID Construct ( );
NONVIRTUAL VOID Destroy( );
NONVIRTUAL SECTORCOUNT ReadABunch( IN OUT PHMEM HeapMem, IN LBN StartLbn, IN SECTORCOUNT NumSectors, IN OUT PMESSAGE Message DEFAULT NULL, IN PCWSTRING SrcDosDriveName DEFAULT NULL );
PSUPERAREA _sa; NUMBER_SET _bad_sectors; #if defined(FE_SB) && defined(_X86_)
STATIC USHORT _force_format; STATIC BOOLEAN _force_convert_fat; #endif
};
INLINE PSUPERAREA VOL_LIODPDRV::GetSa( ) /*++
Routine Description:
This routine returns a pointer to the current super area.
Arguments:
None.
Return Value:
A pointer to the current super area.
--*/ { return _sa; }
#else // _SETUP_LOADER_ is defined
#include "drive.hxx"
#include "intstack.hxx"
//
// Forward references
//
DECLARE_CLASS( HMEM ); DECLARE_CLASS( MESSAGE ); DECLARE_CLASS( SUPERAREA ); DECLARE_CLASS( VOL_LIODPDRV ); DECLARE_CLASS( WSTRING ); DECLARE_CLASS( WSTRING );
typedef ULONG VOLID;
#define MAXVOLNAME 11
enum FIX_LEVEL { CheckOnly, TotalFix };
// This number describes the minimum number of bytes in a boot sector.
#define BYTES_PER_BOOT_SECTOR 512
class VOL_LIODPDRV : public LOG_IO_DP_DRIVE {
public:
VIRTUAL ~VOL_LIODPDRV( );
NONVIRTUAL BOOLEAN ChkDsk( IN FIX_LEVEL FixLevel, IN OUT PMESSAGE Message DEFAULT NULL, IN BOOLEAN Verbose DEFAULT FALSE, IN BOOLEAN OnlyIfDirty DEFAULT FALSE );
NONVIRTUAL PSUPERAREA GetSa( );
VIRTUAL BOOLEAN IsHpfs( );
VIRTUAL BOOLEAN IsNtfs( );
VIRTUAL ARC_STATUS MarkDirty( ) PURE;
VIRTUAL ARC_STATUS Flush( IN BOOLEAN JustHandle ) PURE;
#if defined(FE_SB) && defined(_X86_)
STATIC IFSUTIL_EXPORT VOID ForceFormat( IN USHORT FileSystem );
STATIC USHORT QueryForceFormat( );
STATIC VOID ForceConvertFat( );
STATIC BOOLEAN QueryConvertFat( );
enum { NONE, ANY, FAT, HPFS, OTHER }; #endif
protected:
DECLARE_CONSTRUCTOR( VOL_LIODPDRV );
NONVIRTUAL BOOLEAN Initialize( IN ULONG DeviceId, IN OUT PSUPERAREA SuperArea );
private:
NONVIRTUAL VOID Construct ( );
NONVIRTUAL VOID Destroy( );
NONVIRTUAL SECTORCOUNT ReadABunch( IN OUT PHMEM HeapMem, IN LBN StartLbn, IN SECTORCOUNT NumSectors, IN OUT PMESSAGE Message DEFAULT NULL, IN PCWSTRING SrcDosDriveName DEFAULT NULL );
PSUPERAREA _sa; INTSTACK _bad_sectors; #if defined(FE_SB) && defined(_X86_)
STATIC USHORT _force_format; STATIC BOOLEAN _force_convert_fat; #endif
};
INLINE PSUPERAREA VOL_LIODPDRV::GetSa( ) /*++
Routine Description:
This routine returns a pointer to the current super area.
Arguments:
None.
Return Value:
A pointer to the current super area.
--*/ { return _sa; }
INLINE BOOLEAN VOL_LIODPDRV::IsHpfs( ) /*++
Routine Description:
This method determines whether the volume is HPFS.
Arguments:
None.
Return Value:
TRUE if this volume is an HPFS volume.
--*/ { return FALSE; }
INLINE BOOLEAN VOL_LIODPDRV::IsNtfs( ) /*++
Routine Description:
This method determines whether the volume is NTFS.
Arguments:
None.
Return Value:
TRUE if this volume is an NTFS volume.
--*/ { return FALSE; }
#endif
#endif
|