xref: /reactos/dll/win32/fmifs/chkdsk.c (revision c2c66aff)
1 /*
2  * COPYRIGHT:       See COPYING in the top level directory
3  * PROJECT:         File Management IFS Utility functions
4  * FILE:            reactos/dll/win32/fmifs/chkdsk.c
5  * PURPOSE:         Disk Checker
6  *
7  * PROGRAMMERS:     Hermes Belusca-Maito (hermes.belusca@sfr.fr)
8  */
9 
10 #include "precomp.h"
11 
12 #define NDEBUG
13 #include <debug.h>
14 
15 /* FMIFS.1 */
16 VOID
17 NTAPI
18 Chkdsk(
19     IN PWCHAR DriveRoot,
20     IN PWCHAR Format,
21     IN BOOLEAN CorrectErrors,
22     IN BOOLEAN Verbose,
23     IN BOOLEAN CheckOnlyIfDirty,
24     IN BOOLEAN ScanDrive,
25     IN PVOID Unused2,
26     IN PVOID Unused3,
27     IN PFMIFSCALLBACK Callback)
28 {
29     PIFS_PROVIDER Provider;
30     UNICODE_STRING usDriveRoot;
31     BOOLEAN Argument = FALSE;
32     WCHAR VolumeName[MAX_PATH];
33     //CURDIR CurDir;
34 
35     Provider = GetProvider(Format);
36     if (!Provider)
37     {
38         /* Unknown file system */
39         Callback(DONE, 0, &Argument);
40         return;
41     }
42 
43 #if 1
44     DPRINT1("Warning: use GetVolumeNameForVolumeMountPointW() instead!\n");
45     swprintf(VolumeName, L"\\??\\%c:", towupper(DriveRoot[0]));
46     RtlCreateUnicodeString(&usDriveRoot, VolumeName);
47     /* Code disabled as long as our storage stack doesn't understand IOCTL_MOUNTDEV_QUERY_DEVICE_NAME */
48 #else
49     if (!GetVolumeNameForVolumeMountPointW(DriveRoot, VolumeName, MAX_PATH) ||
50         !RtlDosPathNameToNtPathName_U(VolumeName, &usDriveRoot, NULL, &CurDir))
51     {
52         /* Report an error. */
53         Callback(DONE, 0, &Argument);
54         return;
55     }
56 #endif
57 
58     DPRINT("ChkdskEx - %S\n", Format);
59     Provider->ChkdskEx(&usDriveRoot,
60                        CorrectErrors,
61                        Verbose,
62                        CheckOnlyIfDirty,
63                        ScanDrive,
64                        Callback);
65 
66     RtlFreeUnicodeString(&usDriveRoot);
67 }
68 
69 /* EOF */
70