[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(bootok)
add_subdirectory(chkdsk)
add_subdirectory(diskpart)
add_subdirectory(expand)
add_subdirectory(format)

View file

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

View file

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

View file

@ -2,13 +2,16 @@
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: File Management IFS Utility functions
* 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"
#define NDEBUG
#include <debug.h>
/* FMIFS.1 */
VOID
NTAPI
@ -23,12 +26,44 @@ Chkdsk(
IN PVOID Unused3,
IN PFMIFSCALLBACK Callback)
{
PIFS_PROVIDER Provider;
UNICODE_STRING usDriveRoot;
BOOLEAN Argument = FALSE;
WCHAR VolumeName[MAX_PATH];
//CURDIR CurDir;
/* FAIL immediately */
Callback(DONE, /* Command */
0, /* DWORD Modifier */
&Argument);/* Argument */
Provider = GetProvider(Format);
if (!Provider)
{
/* 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 */

View file

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

View file

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