Author: fireball
Date: Mon Jul 3 20:51:19 2006
New Revision: 22800
URL:
http://svn.reactos.org/svn/reactos?rev=22800&view=rev
Log:
Fix a typo (should have been commented from the beginning) in autochk: this removes UM
exception in autochk during bootup
Modified:
trunk/reactos/base/system/autochk/autochk.c
Modified: trunk/reactos/base/system/autochk/autochk.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/autochk/autoch…
==============================================================================
--- trunk/reactos/base/system/autochk/autochk.c (original)
+++ trunk/reactos/base/system/autochk/autochk.c Mon Jul 3 20:51:19 2006
@@ -15,6 +15,7 @@
#include <stdio.h>
#define WIN32_NO_STATUS
#include <windows.h>
+#include <fmifs/fmifs.h>
#define NTOS_MODE_USER
#include <ndk/ntndk.h>
@@ -24,6 +25,22 @@
/* FUNCTIONS ****************************************************************/
+//
+// FMIFS function
+//
+typedef
+VOID
+(STDCALL *PCHKDSK)(PWCHAR DriveRoot,
+ PWCHAR Format,
+ BOOLEAN CorrectErrors,
+ BOOLEAN Verbose,
+ BOOLEAN CheckOnlyIfDirty,
+ BOOLEAN ScanDrive,
+ PVOID Unused2,
+ PVOID Unused3,
+ PFMIFSCALLBACK Callback);
+
+PCHKDSK ChkdskFunc = NULL;
void
DisplayString(LPCWSTR lpwString)
@@ -146,6 +163,98 @@
return STATUS_SUCCESS;
}
+// This is based on SysInternal's ChkDsk app
+BOOLEAN
+STDCALL
+ChkdskCallback(CALLBACKCOMMAND Command,
+ DWORD Modifier,
+ PVOID Argument)
+{
+ PDWORD Percent;
+ PBOOLEAN Status;
+ PTEXTOUTPUT Output;
+
+ //
+ // We get other types of commands,
+ // but we don't have to pay attention to them
+ //
+ switch(Command)
+ {
+ case UNKNOWN2:
+ DPRINT("UNKNOWN2\r");
+ break;
+
+ case UNKNOWN3:
+ DPRINT("UNKNOWN3\r");
+ break;
+
+ case UNKNOWN4:
+ DPRINT("UNKNOWN4\r");
+ break;
+
+ case UNKNOWN5:
+ DPRINT("UNKNOWN5\r");
+ break;
+
+ case UNKNOWN7:
+ DPRINT("UNKNOWN7\r");
+ break;
+
+ case UNKNOWN8:
+ DPRINT("UNKNOWN8\r");
+ break;
+
+ case UNKNOWN9:
+ DPRINT("UNKNOWN9\r");
+ break;
+
+ case UNKNOWNA:
+ DPRINT("UNKNOWNA\r");
+ break;
+
+ case UNKNOWNC:
+ DPRINT("UNKNOWNC\r");
+ break;
+
+ case UNKNOWND:
+ DPRINT("UNKNOWND\r");
+ break;
+
+ case INSUFFICIENTRIGHTS:
+ DPRINT("INSUFFICIENTRIGHTS\r");
+ break;
+
+ case STRUCTUREPROGRESS:
+ DPRINT("STRUCTUREPROGRESS\r");
+ break;
+
+ case DONEWITHSTRUCTURE:
+ DPRINT("DONEWITHSTRUCTURE\r");
+ break;
+
+ case PROGRESS:
+ Percent = (PDWORD) Argument;
+ PrintString("%d percent completed.\r", *Percent);
+ break;
+
+ case OUTPUT:
+ Output = (PTEXTOUTPUT) Argument;
+ PrintString("%s", Output->Output);
+ break;
+
+ case DONE:
+ Status = (PBOOLEAN)Argument;
+ if (*Status == TRUE)
+ {
+ PrintString("Autochk was unable to complete successfully.\n\n");
+ //Error = TRUE;
+ }
+ break;
+ }
+ return TRUE;
+}
+
+
/* Native image's entry point */
int
_cdecl
@@ -188,18 +297,30 @@
sizeof(FileSystem));
PrintString(" Checking drive %c: \n", 'A'+i);
- if (NT_SUCCESS(Status))
- {
- PrintString(" Filesystem type ");
- DisplayString(FileSystem);
- PrintString("\n");
- PrintString(" OK\n");
- }
- else
+ if (!NT_SUCCESS(Status))
{
DPRINT1("Error getting FS information, Status=0x%08X\n",
Status);
+ // skip to the next volume
+ continue;
}
+
+ // FS type known, show it to user and then call chkdsk routine
+ PrintString(" Filesystem type ");
+ DisplayString(FileSystem);
+ PrintString("\n");
+
+ /*ChkdskFunc(DrivePath,
+ FileSystem,
+ TRUE, // FixErrors
+ TRUE, // Verbose
+ FALSE, // SkipClean
+ FALSE,// ScanSectors
+ NULL,
+ NULL,
+ ChkdskCallback);*/
+
+ PrintString(" OK\n");
}
}
PrintString("\n");