Git conversion: Make reactos the root directory, move rosapps, rostests, wallpapers...
[reactos.git] / dll / win32 / fmifs / format.c
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: File Management IFS Utility functions
4 * FILE: reactos/dll/win32/fmifs/format.c
5 * PURPOSE: Volume format
6 *
7 * PROGRAMMERS: Emanuele Aliberti
8 * Hervé Poussineau (hpoussin@reactos.org)
9 */
10
11 #include "precomp.h"
12
13 #define NDEBUG
14 #include <debug.h>
15
16 /* FMIFS.6 */
17 VOID NTAPI
18 Format(
19 IN PWCHAR DriveRoot,
20 IN FMIFS_MEDIA_FLAG MediaFlag,
21 IN PWCHAR Format,
22 IN PWCHAR Label,
23 IN BOOLEAN QuickFormat,
24 IN PFMIFSCALLBACK Callback)
25 {
26 FormatEx(DriveRoot,
27 MediaFlag,
28 Format,
29 Label,
30 QuickFormat,
31 0,
32 Callback);
33 }
34
35 /* FMIFS.7 */
36 VOID
37 NTAPI
38 FormatEx(
39 IN PWCHAR DriveRoot,
40 IN FMIFS_MEDIA_FLAG MediaFlag,
41 IN PWCHAR Format,
42 IN PWCHAR Label,
43 IN BOOLEAN QuickFormat,
44 IN ULONG ClusterSize,
45 IN PFMIFSCALLBACK Callback)
46 {
47 PIFS_PROVIDER Provider;
48 UNICODE_STRING usDriveRoot;
49 UNICODE_STRING usLabel;
50 BOOLEAN Argument = FALSE;
51 WCHAR VolumeName[MAX_PATH];
52 //CURDIR CurDir;
53
54 Provider = GetProvider(Format);
55 if (!Provider)
56 {
57 /* Unknown file system */
58 Callback(DONE, 0, &Argument);
59 return;
60 }
61
62 #if 1
63 DPRINT1("Warning: use GetVolumeNameForVolumeMountPointW() instead!\n");
64 swprintf(VolumeName, L"\\??\\%c:", towupper(DriveRoot[0]));
65 RtlCreateUnicodeString(&usDriveRoot, VolumeName);
66 /* Code disabled as long as our storage stack doesn't understand IOCTL_MOUNTDEV_QUERY_DEVICE_NAME */
67 #else
68 if (!GetVolumeNameForVolumeMountPointW(DriveRoot, VolumeName, MAX_PATH) ||
69 !RtlDosPathNameToNtPathName_U(VolumeName, &usDriveRoot, NULL, &CurDir))
70 {
71 /* Report an error. */
72 Callback(DONE, 0, &Argument);
73 return;
74 }
75 #endif
76
77 RtlInitUnicodeString(&usLabel, Label);
78
79 DPRINT("FormatEx - %S\n", Format);
80 Provider->FormatEx(&usDriveRoot,
81 MediaFlag,
82 &usLabel,
83 QuickFormat,
84 ClusterSize,
85 Callback);
86
87 RtlFreeUnicodeString(&usDriveRoot);
88 }
89
90 /* EOF */