ReactOS 0.4.15-dev-7842-g558ab78
format.c
Go to the documentation of this file.
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 */
19 IN PWCHAR DriveRoot,
20 IN FMIFS_MEDIA_FLAG MediaFlag,
25{
26 FormatEx(DriveRoot,
27 MediaFlag,
28 Format,
29 Label,
31 0,
32 Callback);
33}
34
35/* FMIFS.7 */
36VOID
39 IN PWCHAR DriveRoot,
40 IN FMIFS_MEDIA_FLAG MediaFlag,
46{
48 UNICODE_STRING usDriveRoot;
49 UNICODE_STRING usLabel;
51 BOOLEAN BackwardCompatible = FALSE; // Default to latest FS versions.
52 MEDIA_TYPE MediaType;
54 //CURDIR CurDir;
55
56//
57// TODO: Convert filesystem Format into ULIB format string.
58//
59
61 if (!Provider)
62 {
63 /* Unknown file system */
64 Callback(DONE, 0, &Success);
65 return;
66 }
67
68#if 1
69 DPRINT1("Warning: use GetVolumeNameForVolumeMountPointW() instead!\n");
70 swprintf(VolumeName, L"\\??\\%c:", towupper(DriveRoot[0]));
72 /* Code disabled as long as our storage stack doesn't understand IOCTL_MOUNTDEV_QUERY_DEVICE_NAME */
73#else
75 !RtlDosPathNameToNtPathName_U(VolumeName, &usDriveRoot, NULL, &CurDir))
76 {
77 /* Report an error */
78 Callback(DONE, 0, &Success);
79 return;
80 }
81#endif
82
83 RtlInitUnicodeString(&usLabel, Label);
84
85 /* Set the BackwardCompatible flag in case we format with older FAT12/16 */
86 if (wcsicmp(Format, L"FAT") == 0)
87 BackwardCompatible = TRUE;
88 // else if (wcsicmp(Format, L"FAT32") == 0)
89 // BackwardCompatible = FALSE;
90
91 /* Convert the FMIFS MediaFlag to a NT MediaType */
92 // FIXME: Actually covert all the possible flags.
93 switch (MediaFlag)
94 {
95 case FMIFS_FLOPPY:
96 MediaType = F5_320_1024; // FIXME: This is hardfixed!
97 break;
98 case FMIFS_REMOVABLE:
99 MediaType = RemovableMedia;
100 break;
101 case FMIFS_HARDDISK:
102 MediaType = FixedMedia;
103 break;
104 default:
105 DPRINT1("Unknown FMIFS MediaFlag %d, converting 1-to-1 to NT MediaType\n",
106 MediaFlag);
107 MediaType = (MEDIA_TYPE)MediaFlag;
108 break;
109 }
110
111 DPRINT("Format() - %S\n", Format);
112 Success = Provider->Format(&usDriveRoot,
113 Callback,
115 BackwardCompatible,
116 MediaType,
117 &usLabel,
119 if (!Success)
120 DPRINT1("Format() failed\n");
121
122 /* Report success */
123 Callback(DONE, 0, &Success);
124
125 RtlFreeUnicodeString(&usDriveRoot);
126}
127
128/* EOF */
unsigned char BOOLEAN
#define RTL_NUMBER_OF(x)
Definition: RtlRegistry.c:12
#define DPRINT1
Definition: precomp.h:8
BOOL QuickFormat
Definition: format.c:66
PWCHAR Label
Definition: format.c:70
DWORD ClusterSize
Definition: format.c:67
NTSYSAPI BOOLEAN NTAPI RtlCreateUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define MAX_PATH
Definition: compat.h:34
#define wcsicmp
Definition: compat.h:15
VOID NTAPI FormatEx(IN PWCHAR DriveRoot, IN FMIFS_MEDIA_FLAG MediaFlag, IN PWCHAR Format, IN PWCHAR Label, IN BOOLEAN QuickFormat, IN ULONG ClusterSize, IN PFMIFSCALLBACK Callback)
Definition: format.c:38
#define swprintf
Definition: precomp.h:40
@ Success
Definition: eventcreate.c:712
_Must_inspect_result_ _Inout_opt_ PUNICODE_STRING VolumeName
Definition: fltkernel.h:1117
FMIFS_MEDIA_FLAG
Definition: fmifs.h:38
@ FMIFS_FLOPPY
Definition: fmifs.h:47
@ FMIFS_REMOVABLE
Definition: fmifs.h:50
@ FMIFS_HARDDISK
Definition: fmifs.h:51
BOOLEAN(NTAPI * PFMIFSCALLBACK)(IN CALLBACKCOMMAND Command, IN ULONG SubAction, IN PVOID ActionInfo)
Definition: fmifs.h:89
return pInstance GetProvider() -> GetHandle()
BOOL WINAPI GetVolumeNameForVolumeMountPointW(IN LPCWSTR VolumeMountPoint, OUT LPWSTR VolumeName, IN DWORD VolumeNameLength)
Definition: mntpoint.c:496
NTSYSAPI BOOLEAN NTAPI RtlDosPathNameToNtPathName_U(_In_opt_z_ PCWSTR DosPathName, _Out_ PUNICODE_STRING NtPathName, _Out_opt_ PCWSTR *NtFileNamePart, _Out_opt_ PRTL_RELATIVE_NAME_U DirectoryInfo)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
enum _MEDIA_TYPE MEDIA_TYPE
@ RemovableMedia
Definition: ntdddisk.h:387
@ FixedMedia
Definition: ntdddisk.h:388
@ F5_320_1024
Definition: ntdddisk.h:384
#define L(x)
Definition: ntvdm.h:50
#define DONE
Definition: rnr20lib.h:14
#define DPRINT
Definition: sndvol32.h:71
#define towupper(c)
Definition: wctype.h:99
#define NTAPI
Definition: typedefs.h:36
#define IN
Definition: typedefs.h:39
uint16_t * PWCHAR
Definition: typedefs.h:56
uint32_t ULONG
Definition: typedefs.h:59
_In_ WDFINTERRUPT _In_ PFN_WDF_INTERRUPT_SYNCHRONIZE Callback
Definition: wdfinterrupt.h:458
__wchar_t WCHAR
Definition: xmlstorage.h:180