Reactos
at master 159 lines 4.0 kB view raw
1/* 2 * PROJECT: ReactOS text-mode setup 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 Casper S. Hornstrup <chorns@users.sourceforge.net> 6 * Copyright 2006 Hervé Poussineau <hpoussin@reactos.org> 7 * Copyright 2024 Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org> 8 */ 9 10/* INCLUDES ******************************************************************/ 11 12#include "usetup.h" 13 14#define NDEBUG 15#include <debug.h> 16 17static PPROGRESSBAR ProgressBar = NULL; 18 19/* FORMAT FUNCTIONS **********************************************************/ 20 21static 22BOOLEAN 23NTAPI 24FormatCallback( 25 _In_ CALLBACKCOMMAND Command, 26 _In_ ULONG Modifier, 27 _In_ PVOID Argument) 28{ 29 switch (Command) 30 { 31 case PROGRESS: 32 { 33 PULONG Percent = (PULONG)Argument; 34 DPRINT("%lu percent completed\n", *Percent); 35 ProgressSetStep(ProgressBar, *Percent); 36 break; 37 } 38 39#if 0 40 case OUTPUT: 41 { 42 PTEXTOUTPUT output = (PTEXTOUTPUT)Argument; 43 DPRINT("%s\n", output->Output); 44 break; 45 } 46#endif 47 48 case DONE: 49 { 50#if 0 51 PBOOLEAN Success = (PBOOLEAN)Argument; 52 if (*Success == FALSE) 53 { 54 DPRINT("FormatEx was unable to complete successfully.\n\n"); 55 } 56#endif 57 DPRINT("Done\n"); 58 break; 59 } 60 61 default: 62 DPRINT("Unknown callback %lu\n", (ULONG)Command); 63 break; 64 } 65 66 return TRUE; 67} 68 69VOID 70StartFormat( 71 _Inout_ PFORMAT_VOLUME_INFO FmtInfo, 72 _In_ PFILE_SYSTEM_ITEM SelectedFileSystem) 73{ 74 ASSERT(SelectedFileSystem && SelectedFileSystem->FileSystem); 75 76 // TODO: Think about which values could be defaulted... 77 FmtInfo->FileSystemName = SelectedFileSystem->FileSystem; 78 FmtInfo->MediaFlag = FMIFS_HARDDISK; 79 FmtInfo->Label = NULL; 80 FmtInfo->QuickFormat = SelectedFileSystem->QuickFormat; 81 FmtInfo->ClusterSize = 0; 82 FmtInfo->Callback = FormatCallback; 83 84 ProgressBar = CreateProgressBar(6, 85 yScreen - 14, 86 xScreen - 7, 87 yScreen - 10, 88 10, 89 24, 90 TRUE, 91 MUIGetString(STRING_FORMATTINGPART)); 92 93 ProgressSetStepCount(ProgressBar, 100); 94} 95 96VOID 97EndFormat( 98 _In_ NTSTATUS Status) 99{ 100 DestroyProgressBar(ProgressBar); 101 ProgressBar = NULL; 102 103 DPRINT("FormatPartition() finished with status 0x%08lx\n", Status); 104} 105 106/* CHKDSK FUNCTIONS **********************************************************/ 107 108static 109BOOLEAN 110NTAPI 111ChkdskCallback( 112 _In_ CALLBACKCOMMAND Command, 113 _In_ ULONG Modifier, 114 _In_ PVOID Argument) 115{ 116 switch (Command) 117 { 118 default: 119 DPRINT("Unknown callback %lu\n", (ULONG)Command); 120 break; 121 } 122 123 return TRUE; 124} 125 126VOID 127StartCheck( 128 _Inout_ PCHECK_VOLUME_INFO ChkInfo) 129{ 130 // TODO: Think about which values could be defaulted... 131 ChkInfo->FixErrors = TRUE; 132 ChkInfo->Verbose = FALSE; 133 ChkInfo->CheckOnlyIfDirty = TRUE; 134 ChkInfo->ScanDrive = FALSE; 135 ChkInfo->Callback = ChkdskCallback; 136 137 ProgressBar = CreateProgressBar(6, 138 yScreen - 14, 139 xScreen - 7, 140 yScreen - 10, 141 10, 142 24, 143 TRUE, 144 MUIGetString(STRING_CHECKINGDISK)); 145 146 ProgressSetStepCount(ProgressBar, 100); 147} 148 149VOID 150EndCheck( 151 _In_ NTSTATUS Status) 152{ 153 DestroyProgressBar(ProgressBar); 154 ProgressBar = NULL; 155 156 DPRINT("ChkdskPartition() finished with status 0x%08lx\n", Status); 157} 158 159/* EOF */