xref: /reactos/dll/win32/fmifs/format.c (revision 8a978a17)
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 */
91