/*++

Copyright (c) 1990  Microsoft Corporation

Module Name:

    ifsentry.hxx

Abstract:

    Contains prototypes for entry points to the IFS
    utility DLLs.

Environment:

    User Mode

--*/


#if !defined ( _IFS_ENTRY_ )

#define _IFS_ENTRY_

#if !defined(_IFS_SERV_)

//
// Internal definitions for Flags field in CHKDSKEX_FN_PARAM
//
#define CHKDSK_RECOVER_FREE_SPACE       0x00000002UL
#define CHKDSK_RECOVER_ALLOC_SPACE      0x00000004UL

//
// External definitions for Flags field in CHKDSKEX_FN_PARAM
//

// CHKDSK_VERBOSE
//  - For FAT, chkdsk will print every filename being processed
//  - For NTFS, chkdsk will print clean up messages
// CHKDSK_RECOVER
//  - Perform sector checking on free and allocated space
// CHKDSK_EXTEND
//  - For NTFS, chkdsk will extend a volume
// CHKDSK_DOWNGRADE (for NT 5 or later but obsolete anyway)
//  - For NTFS, this downgrade a volume from most recent NTFS version
// CHKDSK_ENABLE_UPGRADE (for NT 5 or later but obsolete anyway)
//  - For NTFS, this upgrades a volume to most recent NTFS version
// CHKDSK_RESIZE_LOGFILE
//  - For NTFS, this changes the size of the logfile
// CHKDSK_CHECK_IF_DIRTY
//  - Perform consistency check only if the volume is dirty
// CHKDSK_FORCE
//  - Forces the volume to dismount first if necessary (implies /F)
// CHKDSK_SKIP_INDEX_SCAN
//  - Skip the scanning of each index entry
// CHKDSK_SKIP_CYCLE_SCAN
//  - Skip the checking of cycles within the directory tree

#define CHKDSK_VERBOSE                  0x00000001UL
#define CHKDSK_RECOVER                  (CHKDSK_RECOVER_FREE_SPACE | \
                                         CHKDSK_RECOVER_ALLOC_SPACE)
#define CHKDSK_EXTEND                   0x00000008UL
#define CHKDSK_DOWNGRADE                0x00000010UL
#define CHKDSK_ENABLE_UPGRADE           0x00000020UL
#define CHKDSK_RESIZE_LOGFILE           0x00000040UL
#define CHKDSK_CHECK_IF_DIRTY           0x00000080UL
#define CHKDSK_FORCE                    0x00000100UL
#define CHKDSK_SKIP_INDEX_SCAN          0x00000200UL
#define CHKDSK_SKIP_CYCLE_SCAN          0x00000400UL

typedef struct _CHKDSKEX_FN_PARAM {
    UCHAR       Major;          // initial version is 1.0
    UCHAR       Minor;
    ULONG       Flags;
    ULONG       LogFileSize;
    PPATH       PathToCheck;    // path including mount points
    PPATH       RootPath;       // path from the root of the actual drive
} CHKDSKEX_FN_PARAM, *PCHKDSKEX_FN_PARAM;

//
// External definitions for Flags field in FORMATEX_FN_PARAM
//

#define FORMAT_QUICK                    0x00000001UL
#define FORMAT_BACKWARD_COMPATIBLE      0x00000002UL
#define FORMAT_FORCE                    0x00000004UL

// FORMAT_QUICK
//  - Performs a quick format
// FORMAT_BACKWARD_COMPATIBLE
//  - Formats a volume to be backward compatible to an older version of NTFS volume
// FORMAT_FORCE
//  - Forces the volume to dismount first if necessary


typedef struct _FORMATEX_FN_PARAM {
    UCHAR       Major;          // initial version is 1.0
    UCHAR       Minor;
    ULONG       Flags;
    PCWSTRING   LabelString;    // supplies the volume's label
    ULONG       ClusterSize;    // supplies the cluster size for the volume
} FORMATEX_FN_PARAM, *PFORMATEX_FN_PARAM;

#endif // _IFS_SERV_

#if ( defined( _AUTOCHECK_ ) || defined( _EFICHECK_ ) ) && !defined( _SETUP_LOADER_ ) 
#define FAR
#define WINAPI __stdcall
#define APIENTRY WINAPI
#endif  //  _AUTOCHECK_ || _SETUP_LOADER_

typedef BOOLEAN(FAR APIENTRY * CHKDSK_FN)( PCWSTRING DriveName,
                                           PMESSAGE  Message,
                                           BOOLEAN   Fix,
                                           BOOLEAN   Verbose,
                                           BOOLEAN   OnlyIfDirty,
                                           BOOLEAN   Recover,
                                           PPATH     PathToCheck,
                                           BOOLEAN   Extend,
                                           BOOLEAN   ResizeLogFile,
                                           ULONG     LogFileSize,
                                           PULONG    ExitStatus);

typedef BOOLEAN(FAR APIENTRY * CHKDSKEX_FN)( PCWSTRING DriveName,
                                             PMESSAGE  Message,
                                             BOOLEAN   Fix,
                                             PCHKDSKEX_FN_PARAM Param,
                                             PULONG    ExitStatus );

typedef BOOLEAN(FAR APIENTRY * FORMAT_FN)( PCWSTRING,
                                           PMESSAGE,
                                           BOOLEAN,
                                           BOOLEAN,
                                           MEDIA_TYPE,
                                           PCWSTRING,
                                           ULONG );

typedef BOOLEAN(FAR APIENTRY * FORMATEX_FN)( PCWSTRING,
                                             PMESSAGE,
                                             PFORMATEX_FN_PARAM,
                                             MEDIA_TYPE );


typedef BOOLEAN(FAR APIENTRY * RECOVER_FN)( PPATH, PMESSAGE );

typedef BOOLEAN (FAR APIENTRY * EXTEND_FN)(PCWSTRING, PMESSAGE, BOOLEAN Verify);

#if !defined(_IFS_SERV_)

//
//      Convert status code
//
typedef enum _CONVERT_STATUS {

        CONVERT_STATUS_CONVERTED,
        CONVERT_STATUS_INVALID_FILESYSTEM,
        CONVERT_STATUS_CONVERSION_NOT_AVAILABLE,
        CONVERT_STATUS_CANNOT_LOCK_DRIVE,
        CONVERT_STATUS_ERROR,
        CONVERT_STATUS_INSUFFICIENT_SPACE,
        CONVERT_STATUS_NTFS_RESERVED_NAMES,
        CONVERT_STATUS_DRIVE_IS_DIRTY,
        CONVERT_STATUS_INSUFFICIENT_FREE_SPACE

} CONVERT_STATUS, *PCONVERT_STATUS;

#endif // _IFS_SERV_

typedef BOOLEAN(FAR APIENTRY * CONVERT_FN)( PCWSTRING,
                                            PCWSTRING,
                                            PMESSAGE,
                                            BOOLEAN,
                                            BOOLEAN,
                                            PCONVERT_STATUS );

typedef BOOLEAN (FAR APIENTRY * CHECKSPACE_FN)(
                                                PCWSTRING,
                                                PCWSTRING,
                                                PMESSAGE,
                                                BOOLEAN,
                                                BOOLEAN,
                                                BOOLEAN );

typedef BOOLEAN(FAR APIENTRY * NAMETABLE_FN)( PCWSTRING,
                                              PCWSTRING,
                                              PMESSAGE );

#endif // _IFS_ENTRY_