windows-nt/Source/XPSP1/NT/base/efiutil/efilib/inc/volume.hxx
2020-09-26 16:20:57 +08:00

469 lines
8.8 KiB
C++

/*++
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