[VFATLIB][FMIFS][CHKDSK] Chkdsk fixes and improvements (#8810)

CORE-18432

Co-authored-by: Carl J. Bialorucki <carl.bialorucki@reactos.org>
This commit is contained in:
Doug Lyons
2026-03-31 13:13:31 -05:00
committed by GitHub
parent ec6bae2b31
commit c2f56643b6
15 changed files with 35 additions and 15 deletions

View File

@@ -456,7 +456,7 @@ wmain(int argc, WCHAR *argv[])
//
// Just do it
//
ConResPrintf(StdOut, IDS_FILE_SYSTEM, fileSystem);
ConResPrintf(StdOut, IDS_FILE_SYSTEM, fileSystem, Drive);
Chkdsk(Drive,
fileSystem,
FixErrors,

View File

@@ -14,7 +14,7 @@ Benutzung: %s [Laufwerk:] [-F] [-V] [-R] [-C]\n\n\
\n"
IDS_PERCENT_COMPL "%d Prozent abgeschlossen.\r"
IDS_FILE_SYSTEM "Der Dateisystemtyp ist %s.\n"
IDS_FILE_SYSTEM "Der Dateisystemtyp ist %s for volume %s.\n"
IDS_ABOUT "\n\
Chkdskx v1.0.1 by Mark Russinovich\n\
Systems Internals - http://www.sysinternals.com\n\

View File

@@ -12,7 +12,7 @@ Usage: %s [drive:] [-F] [-V] [-R] [-C]\n\n\
\n"
IDS_PERCENT_COMPL "%d percent completed.\r"
IDS_FILE_SYSTEM "The type of file system is %s.\n"
IDS_FILE_SYSTEM "The type of file system is %s for volume %s.\n"
IDS_ABOUT "\n\
Chkdskx v1.0.1 by Mark Russinovich\n\
Systems Internals - http://www.sysinternals.com\n\

View File

@@ -1,4 +1,4 @@
LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
STRINGTABLE
BEGIN
@@ -12,7 +12,7 @@ Utilisation : %s [lecteur:] [-F] [-V] [-R] [-C]\n\n\
\n"
IDS_PERCENT_COMPL "%d pourcent(s) complété(s).\r"
IDS_FILE_SYSTEM "Le type du système de fichier est %s.\n"
IDS_FILE_SYSTEM "Le type du système de fichier est %s pour le volume %s.\n"
IDS_ABOUT "\n\
Chkdskx v1.0.1 par Mark Russinovich\n\
Systems Internals - http://www.sysinternals.com\n\

View File

@@ -20,7 +20,7 @@ Uso: %s [drive:] [-F] [-V] [-R] [-C]\n\n\
\n"
IDS_PERCENT_COMPL "%d percentuale completato.\r"
IDS_FILE_SYSTEM "Il tipo del file di sistema è %s.\n"
IDS_FILE_SYSTEM "Il tipo del file di sistema è %s per l'unità %s.\n"
IDS_ABOUT "\n\
Chkdskx v1.0.1 di Mark Russinovich\n\
Systems Internals - http://www.sysinternals.com\n\

View File

@@ -12,7 +12,7 @@ Sposób użycia: %s [dysk:] [-F] [-V] [-R] [-C]\n\n\
\n"
IDS_PERCENT_COMPL "Wykonano %d procent.\r"
IDS_FILE_SYSTEM "Typ systemu plików to %s.\n"
IDS_FILE_SYSTEM "Typ systemu plików to %s for volume %s.\n"
IDS_ABOUT "\n\
Chkdskx v1.0.1 by Mark Russinovich\n\
Systems Internals - http://www.sysinternals.com\n\

View File

@@ -13,7 +13,7 @@ Uso: %s [unidade:] [-F] [-V] [-R] [-C]\n\n\
\n"
IDS_PERCENT_COMPL "%d percento completo.\r"
IDS_FILE_SYSTEM "O sistema de ficheiros é %s.\n"
IDS_FILE_SYSTEM "O sistema de ficheiros é %s for volume %s.\n"
IDS_ABOUT "\n\
Chkdskx v1.0.1 by Mark Russinovich\n\
Systems Internals - http://www.sysinternals.com\n\

View File

@@ -20,7 +20,7 @@ Uz: %s [disc:] [-F] [-V] [-R] [-C]\n\n\
\n"
IDS_PERCENT_COMPL "%d completat.\r"
IDS_FILE_SYSTEM "Tipul sistemului de fișier este %s.\n"
IDS_FILE_SYSTEM "Tipul sistemului de fișier este %s for volume %s.\n"
IDS_ABOUT "\n\
Chkdskx v1.0.1 de către Mark Russinovich\n\
Systems Internals - http://www.sysinternals.com\n\

View File

@@ -13,7 +13,7 @@ BEGIN
\n"
IDS_PERCENT_COMPL "%d процентов завершено.\r"
IDS_FILE_SYSTEM "Тип файловой системы %s.\n"
IDS_FILE_SYSTEM "Тип файловой системы %s for volume %s.\n"
IDS_ABOUT "\n\
Chkdskx v1.0.1 от Марка Руссиновича\n\
Systems Internals - http://www.sysinternals.com\n\

View File

@@ -14,7 +14,7 @@ Kullanım: %s [sürücü:] [-F] [-V] [-R] [-C]\n\n\
\n"
IDS_PERCENT_COMPL "Yüzde %d tamamlandı.\r"
IDS_FILE_SYSTEM "Dosya sistemin türü %s'tır.\n"
IDS_FILE_SYSTEM "Dosya sistemin türü %s'tır for volume %s.\n"
IDS_ABOUT "\n\
Chkdskx v1.0.1 Mark Russinovich tarafından yazılmıştır\n\
Systems Internals - http://www.sysinternals.com\n\

View File

@@ -14,7 +14,7 @@ Usage: %s [drive:] [-F] [-V] [-R] [-C]\n\n\
\n"
IDS_PERCENT_COMPL "百分之 %d 已完成。\r"
IDS_FILE_SYSTEM "文件系统类型为 %s。\n"
IDS_FILE_SYSTEM "文件系统类型为 %s for volume %s。\n"
IDS_ABOUT "\n\
Chkdskx v1.0.1 by Mark Russinovich\n\
Systems Internals - http://www.sysinternals.com\n\

View File

@@ -20,7 +20,7 @@ Usage: %s [磁碟機:] [-F] [-V] [-R] [-C]\n\n\
\n"
IDS_PERCENT_COMPL "已完成百分之 %d。\r"
IDS_FILE_SYSTEM "檔案系統類型為 %s。\n"
IDS_FILE_SYSTEM "檔案系統類型為 %s for volume %s。\n"
IDS_ABOUT "\n\
Chkdskx v1.0.1 by Mark Russinovich\n\
Systems Internals - http://www.sysinternals.com\n\

View File

@@ -51,12 +51,17 @@ Chkdsk(
goto Quit;
}
#ifdef __REACTOS__
/* We really just want to use the disk drive letter */
wcscpy(VolumeName, DriveName);
#else
if (!GetVolumeNameForVolumeMountPointW(DriveName, VolumeName, ARRAYSIZE(VolumeName)))
{
/* Couldn't get a volume GUID path, try checking using a parameter provided path */
DPRINT1("Couldn't get a volume GUID path for drive %S\n", DriveName);
wcscpy(VolumeName, DriveName);
}
#endif
if (!RtlDosPathNameToNtPathName_U(VolumeName, &usDriveRoot, NULL, NULL))
goto Quit;

View File

@@ -186,7 +186,7 @@ NTSTATUS fs_open(PUNICODE_STRING DriveRoot, int read_write)
FILE_GENERIC_READ | (read_write ? FILE_GENERIC_WRITE : 0),
&ObjectAttributes,
&Iosb,
read_write ? 0 : FILE_SHARE_READ,
read_write ? FILE_SHARE_READ : (FILE_SHARE_READ | FILE_SHARE_WRITE),
FILE_SYNCHRONOUS_IO_ALERT);
if (!NT_SUCCESS(Status))
{

View File

@@ -432,6 +432,7 @@ VfatChkdsk(
ULONG free_clusters;
DOS_FS fs;
NTSTATUS Status;
WCHAR DriveLetter[2] = L"0";
UNREFERENCED_PARAMETER(pUnknown1);
UNREFERENCED_PARAMETER(pUnknown2);
@@ -544,9 +545,23 @@ VfatChkdsk(
}
}
#ifdef __REACTOS__
if (DriveRoot->Buffer[0] == '\\' && DriveRoot->Buffer[1] == '?' &&
DriveRoot->Buffer[2] == '?' && DriveRoot->Buffer[3] == '\\')
{
DriveLetter[0] = DriveRoot->Buffer[4] & 0x5F; // 0x5f for Uppercase letter
VfatPrint("Chkdsk complete for Volume %S.\n", DriveLetter);
VfatPrint("%u files on disk.\n", FsCheckTotalFiles);
VfatPrint("%lu total clusters on the disk.\n", fs.data_clusters);
VfatPrint("%lu clusters available on the disk.\n", free_clusters);
}
else
VfatPrint("%wZ: %u files, %lu/%lu clusters\n", DriveRoot,
FsCheckTotalFiles, fs.data_clusters - free_clusters, fs.data_clusters);
#else
VfatPrint("%wZ: %u files, %lu/%lu clusters\n", DriveRoot,
FsCheckTotalFiles, fs.data_clusters - free_clusters, fs.data_clusters);
#endif
if (FsCheckFlags & FSCHECK_READ_WRITE)
{
/* Dismount the volume */