mirror of
https://github.com/reactos/reactos.git
synced 2025-05-23 19:14:48 +00:00
Fix a typo (should have been commented from the beginning) in autochk: this removes UM exception in autochk during bootup
svn path=/trunk/; revision=22800
This commit is contained in:
parent
2bd2be9797
commit
65045dfa79
1 changed files with 129 additions and 8 deletions
|
@ -15,6 +15,7 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#define WIN32_NO_STATUS
|
#define WIN32_NO_STATUS
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
#include <fmifs/fmifs.h>
|
||||||
#define NTOS_MODE_USER
|
#define NTOS_MODE_USER
|
||||||
#include <ndk/ntndk.h>
|
#include <ndk/ntndk.h>
|
||||||
|
|
||||||
|
@ -24,6 +25,22 @@
|
||||||
|
|
||||||
|
|
||||||
/* FUNCTIONS ****************************************************************/
|
/* 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
|
void
|
||||||
DisplayString(LPCWSTR lpwString)
|
DisplayString(LPCWSTR lpwString)
|
||||||
|
@ -146,6 +163,98 @@ GetFileSystem(LPCWSTR Drive,
|
||||||
return STATUS_SUCCESS;
|
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 */
|
/* Native image's entry point */
|
||||||
int
|
int
|
||||||
_cdecl
|
_cdecl
|
||||||
|
@ -188,18 +297,30 @@ _main(int argc,
|
||||||
sizeof(FileSystem));
|
sizeof(FileSystem));
|
||||||
PrintString(" Checking drive %c: \n", 'A'+i);
|
PrintString(" Checking drive %c: \n", 'A'+i);
|
||||||
|
|
||||||
if (NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
|
||||||
PrintString(" Filesystem type ");
|
|
||||||
DisplayString(FileSystem);
|
|
||||||
PrintString("\n");
|
|
||||||
PrintString(" OK\n");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
DPRINT1("Error getting FS information, Status=0x%08X\n",
|
DPRINT1("Error getting FS information, Status=0x%08X\n",
|
||||||
Status);
|
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");
|
PrintString("\n");
|
||||||
|
|
Loading…
Reference in a new issue