[AUTOCHK][CHKDSK]: Minor fixes / formatting. Really add chkdsk to build.

[FMIFS]: Quickly implement the chkdsk function, the same way as it is done for the formatting function.

svn path=/trunk/; revision=70869
This commit is contained in:
Hermès Bélusca-Maïto 2016-03-03 00:36:25 +00:00
parent 9723b5e974
commit b1ef18e020
6 changed files with 60 additions and 26 deletions

View file

@ -1,6 +1,7 @@
add_subdirectory(autochk) add_subdirectory(autochk)
add_subdirectory(bootok) add_subdirectory(bootok)
add_subdirectory(chkdsk)
add_subdirectory(diskpart) add_subdirectory(diskpart)
add_subdirectory(expand) add_subdirectory(expand)
add_subdirectory(format) add_subdirectory(format)

View file

@ -1,4 +1,5 @@
/* PROJECT: ReactOS Kernel /*
* PROJECT: ReactOS Kernel
* LICENSE: GPL - See COPYING in the top level directory * LICENSE: GPL - See COPYING in the top level directory
* FILE: base/system/autochk/autochk.c * FILE: base/system/autochk/autochk.c
* PURPOSE: Filesystem checker * PURPOSE: Filesystem checker

View file

@ -4,7 +4,7 @@
// //
// Copyright (c) 1998 Mark Russinovich // Copyright (c) 1998 Mark Russinovich
// Systems Internals // Systems Internals
// http://www.sysinternals.com/ // http://www.sysinternals.com
// //
// Chkdsk clone that demonstrates the use of the FMIFS file system // Chkdsk clone that demonstrates the use of the FMIFS file system
// utility library. // utility library.
@ -43,10 +43,14 @@
/* PSDK/NDK Headers */ /* PSDK/NDK Headers */
#define WIN32_NO_STATUS #define WIN32_NO_STATUS
#include <windows.h> #include <windef.h>
#include <winbase.h>
#include <wincon.h>
#define NTOS_MODE_USER #define NTOS_MODE_USER
#include <ndk/ntndk.h> #include <ndk/ntndk.h>
/* FMIFS Public Header */
#include <fmifs/fmifs.h> #include <fmifs/fmifs.h>
#define FMIFS_IMPORT_DLL #define FMIFS_IMPORT_DLL
@ -118,9 +122,8 @@ CtrlCIntercept(DWORD dwCtrlType)
// //
// Tell the user how to use the program // Tell the user how to use the program
// //
// 19990216 EA Missing printf %s argument
//---------------------------------------------------------------------- //----------------------------------------------------------------------
VOID static VOID
Usage(PWCHAR ProgramName) Usage(PWCHAR ProgramName)
{ {
wprintf(L"Usage: %s [drive:] [-F] [-V] [-R] [-C]\n\n" wprintf(L"Usage: %s [drive:] [-F] [-V] [-R] [-C]\n\n"
@ -140,7 +143,7 @@ Usage(PWCHAR ProgramName)
// Get the switches. // Get the switches.
// //
//---------------------------------------------------------------------- //----------------------------------------------------------------------
int static int
ParseCommandLine( ParseCommandLine(
int argc, int argc,
WCHAR *argv[] WCHAR *argv[]
@ -160,9 +163,9 @@ ParseCommandLine(
switch (argv[i][1]) switch (argv[i][1])
{ {
case L'?': // case L'?':
Usage(argv[0]); // Usage(argv[0]);
break; // return i;
case L'F': case L'f': case L'F': case L'f':
{ {
@ -309,7 +312,7 @@ ChkdskCallback(
case DONE: case DONE:
status = (PBOOLEAN)Argument; status = (PBOOLEAN)Argument;
if (*status == TRUE) if (*status == FALSE)
{ {
wprintf(L"Chkdsk was unable to complete successfully.\n\n"); wprintf(L"Chkdsk was unable to complete successfully.\n\n");
Error = TRUE; Error = TRUE;
@ -329,7 +332,7 @@ ChkdskCallback(
// 19990216 EA Used wide functions // 19990216 EA Used wide functions
// //
//---------------------------------------------------------------------- //----------------------------------------------------------------------
BOOLEAN static BOOLEAN
LoadFMIFSEntryPoints(VOID) LoadFMIFSEntryPoints(VOID)
{ {
HMODULE hFmifs = LoadLibraryW(L"fmifs.dll"); HMODULE hFmifs = LoadLibraryW(L"fmifs.dll");

View file

@ -2,13 +2,16 @@
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: File Management IFS Utility functions * PROJECT: File Management IFS Utility functions
* FILE: reactos/dll/win32/fmifs/chkdsk.c * FILE: reactos/dll/win32/fmifs/chkdsk.c
* PURPOSE: Chkdsk * PURPOSE: Disk Checker
* *
* PROGRAMMERS: (none) * PROGRAMMERS: Hermes Belusca-Maito (hermes.belusca@sfr.fr)
*/ */
#include "precomp.h" #include "precomp.h"
#define NDEBUG
#include <debug.h>
/* FMIFS.1 */ /* FMIFS.1 */
VOID VOID
NTAPI NTAPI
@ -23,12 +26,44 @@ Chkdsk(
IN PVOID Unused3, IN PVOID Unused3,
IN PFMIFSCALLBACK Callback) IN PFMIFSCALLBACK Callback)
{ {
PIFS_PROVIDER Provider;
UNICODE_STRING usDriveRoot;
BOOLEAN Argument = FALSE; BOOLEAN Argument = FALSE;
WCHAR VolumeName[MAX_PATH];
//CURDIR CurDir;
/* FAIL immediately */ Provider = GetProvider(Format);
Callback(DONE, /* Command */ if (!Provider)
0, /* DWORD Modifier */ {
&Argument);/* Argument */ /* Unknown file system */
Callback(DONE, 0, &Argument);
return;
}
#if 1
DPRINT1("Warning: use GetVolumeNameForVolumeMountPointW() instead!\n");
swprintf(VolumeName, L"\\??\\%c:", towupper(DriveRoot[0]));
RtlCreateUnicodeString(&usDriveRoot, VolumeName);
/* Code disabled as long as our storage stack doesn't understand IOCTL_MOUNTDEV_QUERY_DEVICE_NAME */
#else
if (!GetVolumeNameForVolumeMountPointW(DriveRoot, VolumeName, MAX_PATH) ||
!RtlDosPathNameToNtPathName_U(VolumeName, &usDriveRoot, NULL, &CurDir))
{
/* Report an error. */
Callback(DONE, 0, &Argument);
return;
}
#endif
DPRINT("ChkdskEx - %S\n", Format);
Provider->ChkdskEx(&usDriveRoot,
CorrectErrors,
Verbose,
CheckOnlyIfDirty,
ScanDrive,
Callback);
RtlFreeUnicodeString(&usDriveRoot);
} }
/* EOF */ /* EOF */

View file

@ -55,9 +55,7 @@ FormatEx(
if (!Provider) if (!Provider)
{ {
/* Unknown file system */ /* Unknown file system */
Callback(DONE, /* Command */ Callback(DONE, 0, &Argument);
0, /* DWORD Modifier */
&Argument); /* Argument */
return; return;
} }
@ -71,9 +69,7 @@ FormatEx(
!RtlDosPathNameToNtPathName_U(VolumeName, &usDriveRoot, NULL, &CurDir)) !RtlDosPathNameToNtPathName_U(VolumeName, &usDriveRoot, NULL, &CurDir))
{ {
/* Report an error. */ /* Report an error. */
Callback(DONE, /* Command */ Callback(DONE, 0, &Argument);
0, /* DWORD Modifier */
&Argument); /* Argument */
return; return;
} }
#endif #endif

View file

@ -167,9 +167,7 @@ InitializeFmIfs(
if (FmIfsInitialized == FALSE) if (FmIfsInitialized == FALSE)
{ {
if (InitializeFmIfsOnce() == FALSE) if (InitializeFmIfsOnce() == FALSE)
{ return FALSE;
return FALSE;
}
FmIfsInitialized = TRUE; FmIfsInitialized = TRUE;
} }