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

441 lines
8.5 KiB
C++

/*++
Copyright (c) 1990-2001 Microsoft Corporation
Module Name:
volume.hxx
Abstract:
Provides volume methods.
Author:
Mark Shavlik (marks) 13-Feb-90
Norbert P. Kusters (norbertk) 22-Feb-91
--*/
#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_ )
#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
};
#if !defined(RUN_ON_NT4)
IFSUTIL_EXPORT
VOID
RestoreThreadExecutionState(
IN NTSTATUS PrevStatus,
IN EXECUTION_STATE PrevState
);
#endif
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
SetVolumeLabelAndPrintFormatReport(
IN PCWSTRING Label DEFAULT NULL,
IN OUT PMESSAGE Message DEFAULT NULL
);
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,
IN USHORT Algorithm 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 USHORT Algorithm,
IN PCWSTRING Name
);
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,
IN USHORT FormatType DEFAULT DP_DRIVE::NONE
);
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
);
NONVIRTUAL
FORMAT_ERROR_CODE
FormatSonyG2MS(
IN OUT PMESSAGE Message,
IN BIG_INT Sectors
);
PSUPERAREA _sa;
NUMBER_SET _bad_sectors;
};
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;
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;
};
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