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