// Copyright (c) 1998 Mark Russinovich
// Systems Internals
// http://www.sysinternals.com
+
+#define WIN32_NO_STATUS
#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <windows.h>
+#include <windef.h>
+#include <winbase.h>
+#include <winnls.h>
+#include <winuser.h>
#include <winternl.h>
#include <fmifs/fmifs.h>
#include <tchar.h>
+
#include "resource.h"
// Globals
WCHAR szFormatW[MAX_PATH];
DWORD Index = 0;
BYTE dummy;
- BOOLEAN lastestVersion;
+ BOOLEAN latestVersion;
LoadStringAndOem( GetModuleHandle(NULL), STRING_HELP, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
if (!LoadFMIFSEntryPoints())
}
szFormats[0] = 0;
- while (QueryAvailableFileSystemFormat(Index++, szFormatW, &dummy, &dummy, &lastestVersion))
+ while (QueryAvailableFileSystemFormat(Index++, szFormatW, &dummy, &dummy, &latestVersion))
{
- if (!lastestVersion)
+ if (!latestVersion)
continue;
if (szFormats[0])
_tcscat(szFormats, _T(", "));
// 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;
- }
+ case DRIVE_UNKNOWN :
+ LoadStringAndOem( GetModuleHandle(NULL), STRING_ERROR_DRIVE_TYPE, (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 );
+ case DRIVE_REMOTE:
+ case DRIVE_CDROM:
+ LoadStringAndOem( GetModuleHandle(NULL), STRING_NO_SUPPORT, (LPTSTR) szMsg, RC_STRING_MAX_SIZE);
+ _tprintf(szMsg);
+ return -1;
- media = FMIFS_FLOPPY;
+ 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;
+ }
}
//
return 0;
}
}
- media = FMIFS_HARDDISK;
}
//
return 0;
}
-