Author: spetreolle
Date: Tue Jun 26 21:31:10 2012
New Revision: 56808
URL:
http://svn.reactos.org/svn/reactos?rev=56808&view=rev
Log:
[FORMAT]
Handle read only devices and report them unsupported.
Forbid the formatting of the system drive.
Patch by Mikael Lyngvig.
See bug 2081 for more details.
Modified:
trunk/reactos/base/system/format/format.c
Modified: trunk/reactos/base/system/format/format.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/format/format.…
==============================================================================
--- trunk/reactos/base/system/format/format.c [iso-8859-1] (original)
+++ trunk/reactos/base/system/format/format.c [iso-8859-1] Tue Jun 26 21:31:10 2012
@@ -370,25 +370,52 @@
// See if the drive is removable or not
//
driveType = GetDriveType( RootDirectory );
-
- if( driveType == 0 ) {
- LoadStringAndOem( GetModuleHandle(NULL), STRING_ERROR_DRIVE_TYPE, (LPTSTR)
szMsg,RC_STRING_MAX_SIZE);
- PrintWin32Error( szMsg, GetLastError());
- return -1;
- }
- else if ( driveType == 1 )
+ switch (driveType)
{
- LoadString( GetModuleHandle(NULL), STRING_NO_VOLUME, (LPTSTR)
szMsg,RC_STRING_MAX_SIZE);
- PrintWin32Error( szMsg, GetLastError());
- return -1;
- }
-
- if( driveType != DRIVE_FIXED ) {
- LoadStringAndOem( GetModuleHandle(NULL), STRING_INSERT_DISK, (LPTSTR)
szMsg,RC_STRING_MAX_SIZE);
- _tprintf(szMsg, RootDirectory[0] );
- _fgetts( input, sizeof(input)/2, stdin );
-
- media = FMIFS_FLOPPY;
+ case DRIVE_UNKNOWN :
+ LoadStringAndOem( GetModuleHandle(NULL), STRING_ERROR_DRIVE_TYPE, (LPTSTR)
szMsg,RC_STRING_MAX_SIZE);
+ PrintWin32Error( szMsg, GetLastError());
+ return -1;
+
+ case DRIVE_REMOTE:
+ case DRIVE_CDROM:
+ LoadStringAndOem( GetModuleHandle(NULL), STRING_NO_SUPPORT, (LPTSTR) szMsg,
RC_STRING_MAX_SIZE);
+ _tprintf(szMsg);
+ return -1;
+
+ case DRIVE_NO_ROOT_DIR:
+ LoadString( GetModuleHandle(NULL), STRING_NO_VOLUME, (LPTSTR)
szMsg,RC_STRING_MAX_SIZE);
+ PrintWin32Error( szMsg, GetLastError());
+ return -1;
+
+ case DRIVE_REMOVABLE:
+ LoadStringAndOem( GetModuleHandle(NULL), STRING_INSERT_DISK, (LPTSTR)
szMsg,RC_STRING_MAX_SIZE);
+ _tprintf(szMsg, RootDirectory[0] );
+ _fgetts( input, sizeof(input)/2, stdin );
+ media = FMIFS_FLOPPY;
+ break;
+
+ case DRIVE_FIXED:
+ case DRIVE_RAMDISK:
+ media = FMIFS_HARDDISK;
+ break;
+ }
+
+ // Reject attempts to format the system drive
+ {
+ TCHAR path[MAX_PATH + 1];
+ UINT rc;
+ rc = GetWindowsDirectory(path, MAX_PATH);
+ if (rc == 0 || rc > MAX_PATH)
+ // todo: Report "Unable to query system directory"
+ return -1;
+ if (_totlower(path[0]) == _totlower(Drive[0]))
+ {
+ // todo: report "Cannot format system drive"
+ LoadStringAndOem( GetModuleHandle(NULL), STRING_NO_SUPPORT, (LPTSTR) szMsg,
RC_STRING_MAX_SIZE);
+ _tprintf(szMsg);
+ return -1;
+ }
}
//
@@ -452,7 +479,6 @@
return 0;
}
}
- media = FMIFS_HARDDISK;
}
//