mirror of
https://github.com/pbatard/rufus.git
synced 2024-08-14 23:57:05 +00:00
[ext2fs] improve error reporting
* Also clean up VDS error messages
This commit is contained in:
parent
5f9e65707f
commit
5ae6e4f494
6 changed files with 64 additions and 53 deletions
|
@ -1363,8 +1363,10 @@ static BOOL ClearPartition(HANDLE hDrive, LARGE_INTEGER offset, DWORD size)
|
|||
if (buffer == NULL)
|
||||
return FALSE;
|
||||
|
||||
if (!SetFilePointerEx(hDrive, offset, NULL, FILE_BEGIN))
|
||||
if (!SetFilePointerEx(hDrive, offset, NULL, FILE_BEGIN)) {
|
||||
free(buffer);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
r = WriteFileWithRetry(hDrive, buffer, size, &size, WRITE_RETRIES);
|
||||
free(buffer);
|
||||
|
|
|
@ -1,2 +1,3 @@
|
|||
[*]
|
||||
indent_style = tab
|
||||
tab_width = 8
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
#include "msapi_utf8.h"
|
||||
|
||||
extern char* NtStatusError(NTSTATUS Status);
|
||||
static DWORD LastWinError = 0;
|
||||
|
||||
PF_TYPE_DECL(NTAPI, ULONG, RtlNtStatusToDosError, (NTSTATUS));
|
||||
PF_TYPE_DECL(NTAPI, NTSTATUS, NtClose, (HANDLE));
|
||||
|
@ -95,7 +96,7 @@ io_manager nt_io_manager(void)
|
|||
typedef struct {
|
||||
ULONG WinError;
|
||||
int errnocode;
|
||||
}ERROR_ENTRY;
|
||||
} ERROR_ENTRY;
|
||||
|
||||
static ERROR_ENTRY ErrorTable[] = {
|
||||
{ ERROR_INVALID_FUNCTION, EINVAL },
|
||||
|
@ -149,6 +150,7 @@ static unsigned _MapDosError(IN ULONG WinError)
|
|||
{
|
||||
int i;
|
||||
|
||||
LastWinError = WinError;
|
||||
for (i = 0; i < (sizeof(ErrorTable)/sizeof(ErrorTable[0])); ++i) {
|
||||
if (WinError == ErrorTable[i].WinError) {
|
||||
return ErrorTable[i].errnocode;
|
||||
|
@ -171,6 +173,12 @@ static __inline unsigned _MapNtStatus(IN NTSTATUS Status)
|
|||
return (pfRtlNtStatusToDosError == NULL) ? EFAULT: _MapDosError(pfRtlNtStatusToDosError(Status));
|
||||
}
|
||||
|
||||
// Return the last Windows Error
|
||||
DWORD ext2_last_winerror(DWORD default_error)
|
||||
{
|
||||
return ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | (LastWinError ? LastWinError : default_error);
|
||||
}
|
||||
|
||||
//
|
||||
// Helper functions
|
||||
//
|
||||
|
@ -201,7 +209,6 @@ static NTSTATUS _OpenNtName(IN PCSTR Name, IN BOOLEAN Readonly, OUT PHANDLE Hand
|
|||
&ObjectAttributes, &IoStatusBlock, FILE_SHARE_WRITE | FILE_SHARE_READ,
|
||||
FILE_SYNCHRONOUS_IO_NONALERT);
|
||||
if (!NT_SUCCESS(Status)) {
|
||||
uprintf("_OpenNtName: [%x] %s", Status, NtStatusError(Status));
|
||||
// Maybe was just mounted? wait 0.5 sec and retry.
|
||||
LARGE_INTEGER Interval;
|
||||
Interval.QuadPart = -5000000; // 0.5 sec. from now
|
||||
|
@ -339,7 +346,9 @@ static BOOLEAN _Ext2OpenDevice(IN PCSTR Name, IN BOOLEAN ReadOnly, OUT PHANDLE H
|
|||
CHAR NormalizedDeviceName[512];
|
||||
NTSTATUS Status;
|
||||
|
||||
LastWinError = 0;
|
||||
if (Name == NULL) {
|
||||
LastWinError = ERROR_INVALID_PARAMETER;
|
||||
if (ARGUMENT_PRESENT(Errno))
|
||||
*Errno = ENOENT;
|
||||
return FALSE;
|
||||
|
@ -351,6 +360,7 @@ static BOOLEAN _Ext2OpenDevice(IN PCSTR Name, IN BOOLEAN ReadOnly, OUT PHANDLE H
|
|||
} else {
|
||||
Name = _NormalizeDeviceName(Name, NormalizedDeviceName);
|
||||
if (Name == NULL) {
|
||||
LastWinError = ERROR_INVALID_PARAMETER;
|
||||
if (ARGUMENT_PRESENT(Errno))
|
||||
*Errno = ENOENT;
|
||||
return FALSE;
|
||||
|
@ -368,7 +378,7 @@ static BOOLEAN _Ext2OpenDevice(IN PCSTR Name, IN BOOLEAN ReadOnly, OUT PHANDLE H
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static BOOLEAN _BlockIo(IN HANDLE Handle, IN LARGE_INTEGER Offset, IN ULONG Bytes, IN OUT PCHAR Buffer, IN BOOLEAN Read, OUT unsigned* Errno)
|
||||
static BOOLEAN _BlockIo(IN HANDLE Handle, IN LARGE_INTEGER Offset, IN ULONG Bytes, IN OUT PCHAR Buffer, IN BOOLEAN Read, OUT errcode_t *Errno OPTIONAL)
|
||||
{
|
||||
IO_STATUS_BLOCK IoStatusBlock;
|
||||
NTSTATUS Status = STATUS_DLL_NOT_FOUND;
|
||||
|
@ -379,6 +389,7 @@ static BOOLEAN _BlockIo(IN HANDLE Handle, IN LARGE_INTEGER Offset, IN ULONG Byte
|
|||
assert((Bytes % 512) == 0);
|
||||
assert((Offset.LowPart % 512) == 0);
|
||||
|
||||
LastWinError = 0;
|
||||
// Perform io
|
||||
if(Read) {
|
||||
Status = pfNtReadFile(Handle, NULL, NULL, NULL,
|
||||
|
@ -389,22 +400,23 @@ static BOOLEAN _BlockIo(IN HANDLE Handle, IN LARGE_INTEGER Offset, IN ULONG Byte
|
|||
}
|
||||
|
||||
out:
|
||||
if (NT_SUCCESS(Status)) {
|
||||
*Errno = 0;
|
||||
return TRUE;
|
||||
if (!NT_SUCCESS(Status)) {
|
||||
if (ARGUMENT_PRESENT(Errno))
|
||||
*Errno = _MapNtStatus(Status);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
*Errno = _MapNtStatus(Status);
|
||||
|
||||
return FALSE;
|
||||
if (ARGUMENT_PRESENT(Errno))
|
||||
*Errno = 0;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static BOOLEAN _RawWrite(IN HANDLE Handle, IN LARGE_INTEGER Offset, IN ULONG Bytes, OUT const CHAR* Buffer, OUT unsigned* Errno)
|
||||
static BOOLEAN _RawWrite(IN HANDLE Handle, IN LARGE_INTEGER Offset, IN ULONG Bytes, OUT const CHAR* Buffer, OUT errcode_t* Errno)
|
||||
{
|
||||
return _BlockIo(Handle, Offset, Bytes, (PCHAR)Buffer, FALSE, Errno);
|
||||
}
|
||||
|
||||
static BOOLEAN _RawRead(IN HANDLE Handle, IN LARGE_INTEGER Offset, IN ULONG Bytes, IN PCHAR Buffer, OUT unsigned* Errno)
|
||||
static BOOLEAN _RawRead(IN HANDLE Handle, IN LARGE_INTEGER Offset, IN ULONG Bytes, IN PCHAR Buffer, OUT errcode_t* Errno)
|
||||
{
|
||||
return _BlockIo(Handle, Offset, Bytes, Buffer, TRUE, Errno);
|
||||
}
|
||||
|
@ -425,13 +437,14 @@ static BOOLEAN _SetPartType(IN HANDLE Handle, IN UCHAR Type)
|
|||
//
|
||||
errcode_t ext2fs_check_if_mounted(const char *file, int *mount_flags)
|
||||
{
|
||||
errcode_t errcode = 0;
|
||||
HANDLE h;
|
||||
BOOLEAN Readonly;
|
||||
|
||||
*mount_flags = 0;
|
||||
|
||||
if (!_Ext2OpenDevice(file, TRUE, &h, &Readonly, NULL))
|
||||
return 0;
|
||||
if (!_Ext2OpenDevice(file, TRUE, &h, &Readonly, &errcode))
|
||||
return errcode;
|
||||
|
||||
*mount_flags &= _IsMounted(h) ? EXT2_MF_MOUNTED : 0;
|
||||
_CloseDisk(h);
|
||||
|
@ -450,14 +463,13 @@ errcode_t ext2fs_check_mount_point(const char *file, int *mount_flags, char *mtp
|
|||
// different removable devices (e.g. UFD) may be remounted under the same path.
|
||||
errcode_t ext2fs_get_device_size2(const char *file, int blocksize, blk64_t *retblocks)
|
||||
{
|
||||
errcode_t errcode;
|
||||
__int64 fs_size = 0;
|
||||
HANDLE h;
|
||||
BOOLEAN Readonly;
|
||||
|
||||
if (!_Ext2OpenDevice(file, TRUE, &h, &Readonly, NULL)) {
|
||||
uprintf("FAILED TO OPEN '%s'", file);
|
||||
return EACCES;
|
||||
}
|
||||
if (!_Ext2OpenDevice(file, TRUE, &h, &Readonly, &errcode))
|
||||
return errcode;
|
||||
|
||||
_GetDeviceSize(h, &fs_size);
|
||||
_CloseDisk(h);
|
||||
|
@ -604,7 +616,7 @@ static errcode_t nt_read_blk(io_channel channel, unsigned long block, int count,
|
|||
ULONG size;
|
||||
LARGE_INTEGER offset;
|
||||
PNT_PRIVATE_DATA nt_data = NULL;
|
||||
unsigned errcode = 0;
|
||||
errcode_t errcode = 0;
|
||||
|
||||
EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
|
||||
nt_data = (PNT_PRIVATE_DATA) channel->private_data;
|
||||
|
@ -653,7 +665,7 @@ static errcode_t nt_write_blk(io_channel channel, unsigned long block, int count
|
|||
ULONG write_size;
|
||||
LARGE_INTEGER offset;
|
||||
PNT_PRIVATE_DATA nt_data = NULL;
|
||||
unsigned errcode = 0;
|
||||
errcode_t errcode = 0;
|
||||
|
||||
EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
|
||||
nt_data = (PNT_PRIVATE_DATA) channel->private_data;
|
||||
|
|
26
src/format.c
26
src/format.c
|
@ -244,6 +244,8 @@ static BOOLEAN __stdcall ChkdskCallback(FILE_SYSTEM_CALLBACK_COMMAND Command, DW
|
|||
|
||||
/*
|
||||
* Converts an UTF-8 label to a valid FAT/NTFS one
|
||||
* TODO: Use IVdsService::QueryFileSystemTypes -> VDS_FILE_SYSTEM_TYPE_PROP
|
||||
* to get the list of unauthorised and max length for each FS.
|
||||
*/
|
||||
static void ToValidLabel(char* Label, BOOL bFAT)
|
||||
{
|
||||
|
@ -877,7 +879,7 @@ BOOL FormatExtFs(DWORD DriveIndex, DWORD PartitionIndex, DWORD BlockSize, LPCSTR
|
|||
// Figure out the volume size and block size
|
||||
r = ext2fs_get_device_size2(volume_name, KB, &size);
|
||||
if ((r != 0) || (size == 0)) {
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_READ_FAULT;
|
||||
FormatStatus = ext2_last_winerror(ERROR_READ_FAULT);
|
||||
uprintf("Could not read device size: %s", error_message(r));
|
||||
goto out;
|
||||
}
|
||||
|
@ -922,7 +924,7 @@ BOOL FormatExtFs(DWORD DriveIndex, DWORD PartitionIndex, DWORD BlockSize, LPCSTR
|
|||
// Now that we have set our base features, initialize a virtual superblock
|
||||
r = ext2fs_initialize(volume_name, EXT2_FLAG_EXCLUSIVE | EXT2_FLAG_64BITS, &features, manager, &ext2fs);
|
||||
if (r != 0) {
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_INVALID_DATA;
|
||||
FormatStatus = ext2_last_winerror(ERROR_INVALID_DATA);
|
||||
uprintf("Could not initialize %s features: %s", FSName, error_message(r));
|
||||
goto out;
|
||||
}
|
||||
|
@ -933,7 +935,7 @@ BOOL FormatExtFs(DWORD DriveIndex, DWORD PartitionIndex, DWORD BlockSize, LPCSTR
|
|||
r = io_channel_write_blk64(ext2fs->io, 0, 16, buf);
|
||||
safe_free(buf);
|
||||
if (r != 0) {
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_WRITE_FAULT;
|
||||
FormatStatus = ext2_last_winerror(ERROR_WRITE_FAULT);
|
||||
uprintf("Could not zero %s superblock area: %s", FSName, error_message(r));
|
||||
goto out;
|
||||
}
|
||||
|
@ -951,7 +953,7 @@ BOOL FormatExtFs(DWORD DriveIndex, DWORD PartitionIndex, DWORD BlockSize, LPCSTR
|
|||
|
||||
r = ext2fs_allocate_tables(ext2fs);
|
||||
if (r != 0) {
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_INVALID_DATA;
|
||||
FormatStatus = ext2_last_winerror(ERROR_INVALID_DATA);
|
||||
uprintf("Could not allocate %s tables: %s", FSName, error_message(r));
|
||||
goto out;
|
||||
}
|
||||
|
@ -973,7 +975,7 @@ BOOL FormatExtFs(DWORD DriveIndex, DWORD PartitionIndex, DWORD BlockSize, LPCSTR
|
|||
* EXT2_BLOCK_SIZE(ext2fs->super), EXT2_BLOCK_SIZE(ext2fs->super));
|
||||
r = ext2fs_zero_blocks2(ext2fs, cur, count, &cur, &count);
|
||||
if (r != 0) {
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_WRITE_FAULT;
|
||||
FormatStatus = ext2_last_winerror(ERROR_WRITE_FAULT);
|
||||
uprintf("\r\nCould not zero inode set at position %llu (%d blocks): %s", cur, count, error_message(r));
|
||||
goto out;
|
||||
}
|
||||
|
@ -983,14 +985,14 @@ BOOL FormatExtFs(DWORD DriveIndex, DWORD PartitionIndex, DWORD BlockSize, LPCSTR
|
|||
// Create root and lost+found dirs
|
||||
r = ext2fs_mkdir(ext2fs, EXT2_ROOT_INO, EXT2_ROOT_INO, 0);
|
||||
if (r != 0) {
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_DIR_NOT_ROOT;
|
||||
FormatStatus = ext2_last_winerror(ERROR_DIR_NOT_ROOT);
|
||||
uprintf("Failed to create %s root dir: %s", FSName, error_message(r));
|
||||
goto out;
|
||||
}
|
||||
ext2fs->umask = 077;
|
||||
r = ext2fs_mkdir(ext2fs, EXT2_ROOT_INO, 0, "lost+found");
|
||||
if (r != 0) {
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_DIR_NOT_ROOT;
|
||||
FormatStatus = ext2_last_winerror(ERROR_DIR_NOT_ROOT);
|
||||
uprintf("Failed to create %s 'lost+found' dir: %s", FSName, error_message(r));
|
||||
goto out;
|
||||
}
|
||||
|
@ -1002,14 +1004,14 @@ BOOL FormatExtFs(DWORD DriveIndex, DWORD PartitionIndex, DWORD BlockSize, LPCSTR
|
|||
|
||||
r = ext2fs_mark_inode_bitmap2(ext2fs->inode_map, EXT2_BAD_INO);
|
||||
if (r != 0) {
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_WRITE_FAULT;
|
||||
FormatStatus = ext2_last_winerror(ERROR_WRITE_FAULT);
|
||||
uprintf("Could not set inode bitmaps: %s", error_message(r));
|
||||
goto out;
|
||||
}
|
||||
ext2fs_inode_alloc_stats(ext2fs, EXT2_BAD_INO, 1);
|
||||
r = ext2fs_update_bb_inode(ext2fs, NULL);
|
||||
if (r != 0) {
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_WRITE_FAULT;
|
||||
FormatStatus = ext2_last_winerror(ERROR_WRITE_FAULT);
|
||||
uprintf("Could not set inode stats: %s", error_message(r));
|
||||
goto out;
|
||||
}
|
||||
|
@ -1025,7 +1027,7 @@ BOOL FormatExtFs(DWORD DriveIndex, DWORD PartitionIndex, DWORD BlockSize, LPCSTR
|
|||
r = ext2fs_add_journal_inode(ext2fs, journal_size, EXT2_MKJOURNAL_NO_MNT_CHECK | ((Flags & FP_QUICK) ? EXT2_MKJOURNAL_LAZYINIT : 0));
|
||||
uprintfs("\r\n");
|
||||
if (r != 0) {
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_WRITE_FAULT;
|
||||
FormatStatus = ext2_last_winerror(ERROR_WRITE_FAULT);
|
||||
uprintf("Could not create %s journal: %s", FSName, error_message(r));
|
||||
goto out;
|
||||
}
|
||||
|
@ -1034,7 +1036,7 @@ BOOL FormatExtFs(DWORD DriveIndex, DWORD PartitionIndex, DWORD BlockSize, LPCSTR
|
|||
// Finally we can call close() to get the file system gets created
|
||||
r = ext2fs_close(ext2fs);
|
||||
if (r != 0) {
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_WRITE_FAULT;
|
||||
FormatStatus = ext2_last_winerror(ERROR_WRITE_FAULT);
|
||||
uprintf("Could not create %s volume: %s", FSName, error_message(r));
|
||||
goto out;
|
||||
}
|
||||
|
@ -2594,6 +2596,8 @@ DWORD WINAPI FormatThread(void* param)
|
|||
hLogicalVolume = INVALID_HANDLE_VALUE;
|
||||
|
||||
// VDS wants us to unlock the phys
|
||||
// TODO: IVdsDiskOnline::Offline? -> NOPE, NO_GO for removable media
|
||||
// TODO: IVdsService::Refresh()? IVdsHwProvider::Reenumerate()??
|
||||
if (use_vds)
|
||||
safe_unlockclose(hPhysicalDrive);
|
||||
|
||||
|
|
10
src/rufus.rc
10
src/rufus.rc
|
@ -33,7 +33,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
|||
IDD_DIALOG DIALOGEX 12, 12, 232, 326
|
||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
EXSTYLE WS_EX_ACCEPTFILES
|
||||
CAPTION "Rufus 3.6.1529"
|
||||
CAPTION "Rufus 3.6.1530"
|
||||
FONT 9, "Segoe UI Symbol", 400, 0, 0x0
|
||||
BEGIN
|
||||
LTEXT "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP
|
||||
|
@ -394,8 +394,8 @@ END
|
|||
//
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 3,6,1529,0
|
||||
PRODUCTVERSION 3,6,1529,0
|
||||
FILEVERSION 3,6,1530,0
|
||||
PRODUCTVERSION 3,6,1530,0
|
||||
FILEFLAGSMASK 0x3fL
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
|
@ -413,13 +413,13 @@ BEGIN
|
|||
VALUE "Comments", "https://akeo.ie"
|
||||
VALUE "CompanyName", "Akeo Consulting"
|
||||
VALUE "FileDescription", "Rufus"
|
||||
VALUE "FileVersion", "3.6.1529"
|
||||
VALUE "FileVersion", "3.6.1530"
|
||||
VALUE "InternalName", "Rufus"
|
||||
VALUE "LegalCopyright", "© 2011-2019 Pete Batard (GPL v3)"
|
||||
VALUE "LegalTrademarks", "https://www.gnu.org/copyleft/gpl.html"
|
||||
VALUE "OriginalFilename", "rufus-3.6.exe"
|
||||
VALUE "ProductName", "Rufus"
|
||||
VALUE "ProductVersion", "3.6.1529"
|
||||
VALUE "ProductVersion", "3.6.1530"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
|
|
26
src/stdio.c
26
src/stdio.c
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* Rufus: The Reliable USB Formatting Utility
|
||||
* Standard User I/O Routines (logging, status, etc.)
|
||||
* Standard User I/O Routines (logging, status, error, etc.)
|
||||
* Copyright © 2011-2019 Pete Batard <pete@akeo.ie>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
|
@ -375,13 +375,11 @@ static const char *GetVdsError(DWORD error_code)
|
|||
case 0x8004250F: // VDS_E_BAD_PNP_MESSAGE
|
||||
return "The PNP service sent a corrupted notification to the provider.";
|
||||
case 0x80042510: // VDS_E_NO_PNP_DISK_ARRIVE
|
||||
return "No disk arrival notification was received.";
|
||||
case 0x80042511: // VDS_E_NO_PNP_VOLUME_ARRIVE
|
||||
return "No volume arrival notification was received.";
|
||||
return "No disk/volume arrival notification was received.";
|
||||
case 0x80042512: // VDS_E_NO_PNP_DISK_REMOVE
|
||||
return "No disk removal notification was received.";
|
||||
case 0x80042513: // VDS_E_NO_PNP_VOLUME_REMOVE
|
||||
return "No volume removal notification was received.";
|
||||
return "No disk/volume removal notification was received.";
|
||||
case 0x80042514: // VDS_E_PROVIDER_EXITING
|
||||
return "The provider is exiting.";
|
||||
case 0x00042517: // VDS_S_NO_NOTIFICATION
|
||||
|
@ -401,7 +399,7 @@ static const char *GetVdsError(DWORD error_code)
|
|||
case 0x8004253F: // VDS_E_DISK_LAYOUT_PARTITIONS_TOO_SMALL
|
||||
return "The disk layout contains partitions which are less than the minimum required size.";
|
||||
case 0x80042540: // VDS_E_DISK_IO_FAILING
|
||||
return "The IO to the disk is failing.";
|
||||
return "The I/O to the disk is failing.";
|
||||
case 0x80042543: // VDS_E_GPT_ATTRIBUTES_INVALID
|
||||
return "Invalid GPT attributes were specified.";
|
||||
case 0x8004254D: // VDS_E_UNEXPECTED_DISK_LAYOUT_CHANGE
|
||||
|
@ -473,7 +471,7 @@ static const char *GetVdsError(DWORD error_code)
|
|||
case 0x80042572: // VDS_E_PROVIDER_INTERNAL_ERROR
|
||||
return "An internal error has occurred in the provider.";
|
||||
case 0x80042575: // VDS_E_UNRECOVERABLE_PROVIDER_ERROR
|
||||
return "An unrecoverable error occurred in a provider.";
|
||||
return "An unrecoverable error occurred in the provider.";
|
||||
case 0x80042576: // VDS_E_VOLUME_HIDDEN
|
||||
return "Cannot assign a mount point to a hidden volume.";
|
||||
case 0x00042577: // VDS_S_DISMOUNT_FAILED
|
||||
|
@ -536,15 +534,12 @@ static const char *GetVdsError(DWORD error_code)
|
|||
case 0x00042809: // VDS_S_DISK_DISMOUNT_FAILED
|
||||
return "One or more of the volumes on the disk could not be mounted/dismounted.";
|
||||
case 0x8004280A: // VDS_E_DISK_IS_OFFLINE
|
||||
return "The operation cannot be performed on a disk that is offline.";
|
||||
case 0x8004280B: // VDS_E_DISK_IS_READ_ONLY
|
||||
return "The operation cannot be performed on a disk that is read-only.";
|
||||
return "The operation cannot be performed on a disk that is offline or read-only.";
|
||||
case 0x8004280C: // VDS_E_PAGEFILE_DISK
|
||||
return "The operation cannot be performed on a disk that contains a pagefile volume.";
|
||||
case 0x8004280D: // VDS_E_HIBERNATION_FILE_DISK
|
||||
return "The operation cannot be performed on a disk that contains a hibernation file volume.";
|
||||
case 0x8004280E: // VDS_E_CRASHDUMP_DISK
|
||||
return "The operation cannot be performed on a disk that contains a crashdump file volume.";
|
||||
return "The operation cannot be performed on a disk that contains a pagefile, hibernation or crashdump volume.";
|
||||
case 0x8004280F: // VDS_E_UNABLE_TO_FIND_SYSTEM_DISK
|
||||
return "A system error occurred while retrieving the system disk information.";
|
||||
case 0x80042810: // VDS_E_INCORRECT_SYSTEM_VOLUME_EXTENT_INFO
|
||||
|
@ -564,19 +559,16 @@ static const char *GetVdsError(DWORD error_code)
|
|||
case 0x8004290F: // VDS_E_DELETE_WITH_CRITICAL
|
||||
return "Delete is not allowed on a critical volume.";
|
||||
case 0x80042910: // VDS_E_CLEAN_WITH_DATA
|
||||
return "The FORCE parameter MUST be set to TRUE in order to clean a disk that contains a data volume.";
|
||||
case 0x80042911: // VDS_E_CLEAN_WITH_OEM
|
||||
return "The FORCE parameter MUST be set to TRUE in order to clean a disk that contains an OEM volume.";
|
||||
return "The FORCE parameter MUST be set to TRUE in order to clean a disk that contains a data or OEM volume.";
|
||||
case 0x80042912: // VDS_E_CLEAN_WITH_CRITICAL
|
||||
return "Clean is not allowed on a critical disk.";
|
||||
case 0x80042913: // VDS_E_FORMAT_CRITICAL
|
||||
return "Format is not allowed on a critical volume.";
|
||||
case 0x80042914: // VDS_E_NTFS_FORMAT_NOT_SUPPORTED
|
||||
return "The NTFS file system format is not supported on this volume.";
|
||||
case 0x80042915: // VDS_E_FAT32_FORMAT_NOT_SUPPORTED
|
||||
return "The FAT32 file system format is not supported on this volume.";
|
||||
case 0x80042916: // VDS_E_FAT_FORMAT_NOT_SUPPORTED
|
||||
return "The FAT file system format is not supported on this volume.";
|
||||
return "The requested file system format is not supported on this volume.";
|
||||
case 0x80042917: // VDS_E_FORMAT_NOT_SUPPORTED
|
||||
return "The volume is not formattable.";
|
||||
case 0x80042918: // VDS_E_COMPRESSION_NOT_SUPPORTED
|
||||
|
|
Loading…
Reference in a new issue