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