Reactos
at listview 218 lines 5.1 kB view raw
1/* 2 * PROJECT: ReactOS Setup Library 3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) 4 * PURPOSE: Filesystem Format and ChkDsk support functions 5 * COPYRIGHT: Copyright 2003-2019 Casper S. Hornstrup <chorns@users.sourceforge.net> 6 * Copyright 2017-2024 Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org> 7 */ 8 9#pragma once 10 11#include <fmifs/fmifs.h> 12 13/** QueryAvailableFileSystemFormat() **/ 14BOOLEAN 15NTAPI 16GetRegisteredFileSystems( 17 IN ULONG Index, 18 OUT PCWSTR* FileSystemName); 19 20 21/** ChkdskEx() **/ 22NTSTATUS 23NTAPI 24ChkdskFileSystem_UStr( 25 _In_ PUNICODE_STRING DriveRoot, 26 _In_ PCWSTR FileSystemName, 27 _In_ BOOLEAN FixErrors, 28 _In_ BOOLEAN Verbose, 29 _In_ BOOLEAN CheckOnlyIfDirty, 30 _In_ BOOLEAN ScanDrive, 31 _In_opt_ PFMIFSCALLBACK Callback); 32 33NTSTATUS 34NTAPI 35ChkdskFileSystem( 36 _In_ PCWSTR DriveRoot, 37 _In_ PCWSTR FileSystemName, 38 _In_ BOOLEAN FixErrors, 39 _In_ BOOLEAN Verbose, 40 _In_ BOOLEAN CheckOnlyIfDirty, 41 _In_ BOOLEAN ScanDrive, 42 _In_opt_ PFMIFSCALLBACK Callback); 43 44 45/** FormatEx() **/ 46NTSTATUS 47NTAPI 48FormatFileSystem_UStr( 49 _In_ PUNICODE_STRING DriveRoot, 50 _In_ PCWSTR FileSystemName, 51 _In_ FMIFS_MEDIA_FLAG MediaFlag, 52 _In_opt_ PUNICODE_STRING Label, 53 _In_ BOOLEAN QuickFormat, 54 _In_ ULONG ClusterSize, 55 _In_opt_ PFMIFSCALLBACK Callback); 56 57NTSTATUS 58NTAPI 59FormatFileSystem( 60 _In_ PCWSTR DriveRoot, 61 _In_ PCWSTR FileSystemName, 62 _In_ FMIFS_MEDIA_FLAG MediaFlag, 63 _In_opt_ PCWSTR Label, 64 _In_ BOOLEAN QuickFormat, 65 _In_ ULONG ClusterSize, 66 _In_opt_ PFMIFSCALLBACK Callback); 67 68 69// 70// Bootsector routines 71// 72 73#define FAT_BOOTSECTOR_SIZE (1 * SECTORSIZE) 74#define FAT32_BOOTSECTOR_SIZE (1 * SECTORSIZE) // Counts only the primary sector. 75#define BTRFS_BOOTSECTOR_SIZE (3 * SECTORSIZE) 76#define NTFS_BOOTSECTOR_SIZE (16 * SECTORSIZE) 77 78typedef NTSTATUS 79(/*NTAPI*/ *PFS_INSTALL_BOOTCODE)( 80 IN PCWSTR SrcPath, // Bootsector source file (on the installation medium) 81 IN HANDLE DstPath, // Where to save the bootsector built from the source + partition information 82 IN HANDLE RootPartition); // Partition holding the (old) bootsector data information 83 84NTSTATUS 85InstallFatBootCode( 86 IN PCWSTR SrcPath, 87 IN HANDLE DstPath, 88 IN HANDLE RootPartition); 89 90#define InstallFat12BootCode InstallFatBootCode 91#define InstallFat16BootCode InstallFatBootCode 92 93NTSTATUS 94InstallFat32BootCode( 95 IN PCWSTR SrcPath, 96 IN HANDLE DstPath, 97 IN HANDLE RootPartition); 98 99NTSTATUS 100InstallBtrfsBootCode( 101 IN PCWSTR SrcPath, 102 IN HANDLE DstPath, 103 IN HANDLE RootPartition); 104 105NTSTATUS 106InstallNtfsBootCode( 107 IN PCWSTR SrcPath, 108 IN HANDLE DstPath, 109 IN HANDLE RootPartition); 110 111 112// 113// Formatting routines 114// 115 116NTSTATUS 117NTAPI 118ChkdskPartition( 119 _In_ PPARTENTRY PartEntry, 120 _In_ BOOLEAN FixErrors, 121 _In_ BOOLEAN Verbose, 122 _In_ BOOLEAN CheckOnlyIfDirty, 123 _In_ BOOLEAN ScanDrive, 124 _In_opt_ PFMIFSCALLBACK Callback); 125 126NTSTATUS 127NTAPI 128FormatPartition( 129 _In_ PPARTENTRY PartEntry, 130 _In_ PCWSTR FileSystemName, 131 _In_ FMIFS_MEDIA_FLAG MediaFlag, 132 _In_opt_ PCWSTR Label, 133 _In_ BOOLEAN QuickFormat, 134 _In_ ULONG ClusterSize, 135 _In_opt_ PFMIFSCALLBACK Callback); 136 137 138// 139// FileSystem Volume Operations Queue 140// 141 142typedef enum _FSVOLNOTIFY 143{ 144 FSVOLNOTIFY_STARTQUEUE = 0, 145 FSVOLNOTIFY_ENDQUEUE, 146 FSVOLNOTIFY_STARTSUBQUEUE, 147 FSVOLNOTIFY_ENDSUBQUEUE, 148// FSVOLNOTIFY_STARTPARTITION, FSVOLNOTIFY_ENDPARTITION, 149 FSVOLNOTIFY_PARTITIONERROR, 150 FSVOLNOTIFY_STARTFORMAT, 151 FSVOLNOTIFY_ENDFORMAT, 152 FSVOLNOTIFY_FORMATERROR, 153 FSVOLNOTIFY_STARTCHECK, 154 FSVOLNOTIFY_ENDCHECK, 155 FSVOLNOTIFY_CHECKERROR, 156 /**/ChangeSystemPartition/**/ // FIXME: Deprecate! 157} FSVOLNOTIFY; 158 159typedef enum _FSVOL_OP 160{ 161/* Operations ****/ 162 FSVOL_FORMAT = 0, 163 FSVOL_CHECK, 164/* Response actions ****/ 165 FSVOL_ABORT = 0, 166 FSVOL_DOIT, 167 FSVOL_RETRY = FSVOL_DOIT, 168 FSVOL_SKIP, 169} FSVOL_OP; 170 171typedef struct _FORMAT_VOLUME_INFO 172{ 173 PVOLENTRY Volume; 174 // PCWSTR NtPathPartition; 175 NTSTATUS ErrorStatus; 176 177/* Input information given by the 'FSVOLNOTIFY_STARTFORMAT' step ****/ 178 PCWSTR FileSystemName; 179 FMIFS_MEDIA_FLAG MediaFlag; 180 PCWSTR Label; 181 BOOLEAN QuickFormat; 182 ULONG ClusterSize; 183 PFMIFSCALLBACK Callback; 184 185} FORMAT_VOLUME_INFO, *PFORMAT_VOLUME_INFO; 186 187typedef struct _CHECK_VOLUME_INFO 188{ 189 PVOLENTRY Volume; 190 // PCWSTR NtPathPartition; 191 NTSTATUS ErrorStatus; 192 193/* Input information given by the 'FSVOLNOTIFY_STARTCHECK' step ****/ 194 BOOLEAN FixErrors; 195 BOOLEAN Verbose; 196 BOOLEAN CheckOnlyIfDirty; 197 BOOLEAN ScanDrive; 198 PFMIFSCALLBACK Callback; 199 200} CHECK_VOLUME_INFO, *PCHECK_VOLUME_INFO; 201 202typedef FSVOL_OP 203(CALLBACK *PFSVOL_CALLBACK)( 204 _In_opt_ PVOID Context, 205 _In_ FSVOLNOTIFY FormatStatus, 206 _In_ ULONG_PTR Param1, 207 _In_ ULONG_PTR Param2); 208 209BOOLEAN 210NTAPI 211FsVolCommitOpsQueue( 212 _In_ PPARTLIST PartitionList, 213 _In_ PVOLENTRY SystemVolume, 214 _In_ PVOLENTRY InstallVolume, 215 _In_opt_ PFSVOL_CALLBACK FsVolCallback, 216 _In_opt_ PVOID Context); 217 218/* EOF */