mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-09-02 19:26:32 +00:00
[FSUTIL]
Implement setting the dirty bit (fsutil dirty set) on a volume. This doesn't allow to trigger a chkdsk on reboot with ReactOS, because of the way we handle the dirty bit in our FAT implementation is a bit... weird. This works on W2K3 though! svn path=/trunk/; revision=75768
This commit is contained in:
@@ -60,15 +60,50 @@ QueryMain(int argc, const TCHAR *argv[])
|
||||
/* Print the status */
|
||||
_ftprintf(stdout, _T("The %s volume is %s\n"), argv[1], (VolumeStatus & VOLUME_IS_DIRTY ? _T("dirty") : _T("clean")));
|
||||
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
SetMain(int argc, const TCHAR *argv[])
|
||||
{
|
||||
/* FIXME */
|
||||
_ftprintf(stderr, _T("Not implemented\n"));
|
||||
return 1;
|
||||
HANDLE Volume;
|
||||
DWORD BytesRead;
|
||||
TCHAR VolumeID[PATH_MAX];
|
||||
|
||||
/* We need a volume (letter or GUID) */
|
||||
if (argc < 2)
|
||||
{
|
||||
_ftprintf(stderr, _T("Usage: fsutil dirty set <volume>\n"));
|
||||
_ftprintf(stderr, _T("\tFor example: fsutil dirty set c:\n"));
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Create full name */
|
||||
_stprintf(VolumeID, _T("\\\\.\\%s"), argv[1]);
|
||||
|
||||
/* Open the volume */
|
||||
Volume = CreateFile(VolumeID, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,
|
||||
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||
if (Volume == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
_ftprintf(stderr, _T("Error: %d\n"), GetLastError());
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* And set the dirty bit */
|
||||
if (DeviceIoControl(Volume, FSCTL_MARK_VOLUME_DIRTY, NULL, 0, NULL, 0, &BytesRead, NULL) == FALSE)
|
||||
{
|
||||
_ftprintf(stderr, _T("Error: %d\n"), GetLastError());
|
||||
CloseHandle(Volume);
|
||||
return 1;
|
||||
}
|
||||
|
||||
CloseHandle(Volume);
|
||||
|
||||
/* Print the status */
|
||||
_ftprintf(stdout, _T("The %s volume is now marked as dirty\n"), argv[1]);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
Reference in New Issue
Block a user