NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hVolume == INVALID_HANDLE_VALUE)
{
- _ftprintf(stderr, _T("Error: %d\n"), GetLastError());
+ PrintErrorMessage(GetLastError());
return INVALID_HANDLE_VALUE;
}
_ftprintf(stderr, _T("%s\t%s\n"), HandlersList[i].Command, HandlersList[i].Desc);
}
}
+
+int PrintErrorMessage(DWORD Error)
+{
+ TCHAR * String;
+
+ /* Try to get textual error */
+ if (FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
+ NULL, Error, 0, (TCHAR *)&String, 0, NULL) != 0)
+ {
+ /* And print it */
+ _ftprintf(stderr, _T("Error: %s\n"), String);
+ LocalFree(String);
+ }
+ else
+ {
+ /* Otherwise, just print the error number */
+ _ftprintf(stderr, _T("Error: %d\n"), Error);
+ }
+
+ return Error;
+}
if (DeviceIoControl(Volume, FSCTL_IS_VOLUME_DIRTY, NULL, 0, &VolumeStatus,
sizeof(ULONG), &BytesRead, NULL) == FALSE)
{
- _ftprintf(stderr, _T("Error: %d\n"), GetLastError());
+ PrintErrorMessage(GetLastError());
CloseHandle(Volume);
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());
+ PrintErrorMessage(GetLastError());
CloseHandle(Volume);
return 1;
}
Drives = GetLogicalDrives();
if (Drives == 0)
{
- _ftprintf(stderr, _T("Error: %d\n"), GetLastError());
+ PrintErrorMessage(GetLastError());
return 1;
}
if (!GetVolumeInformation(argv[1], VolumeName, MAX_PATH + 1, &Serial,
&MaxComponentLen, &Flags, FileSystem, MAX_PATH + 1))
{
- _ftprintf(stderr, _T("Error: %d\n"), GetLastError());
+ PrintErrorMessage(GetLastError());
return 1;
}
HandlerItem * HandlersList,
int HandlerListCount);
+int PrintErrorMessage(DWORD Error);
+
#endif