- Get rid of the hard-coded sector size as large sector (4KB) harddisks are already available.
- When a partition is formatted, choose the FAT type according to the partition type. The size of the partition does not matter here as it is up to the caller to set the right partition type according to its size.
svn path=/trunk/; revision=47765
/* Allocate buffer for new bootsector */
NewBootSector = (PUCHAR)RtlAllocateHeap(RtlGetProcessHeap (),
0,
- SECTORSIZE);
+ BootSector->BytesPerSector);
if (NewBootSector == NULL)
return STATUS_INSUFFICIENT_RESOURCES;
/* Zero the new bootsector */
- memset(NewBootSector, 0, SECTORSIZE);
+ memset(NewBootSector, 0, BootSector->BytesPerSector);
/* Copy FAT16 BPB to new bootsector */
memcpy((NewBootSector + 3),
NULL,
&IoStatusBlock,
NewBootSector,
- SECTORSIZE,
+ BootSector->BytesPerSector,
&FileOffset,
NULL);
if (!NT_SUCCESS(Status))
/* Allocate buffer for new bootsector */
NewBootSector = (PUCHAR)RtlAllocateHeap(RtlGetProcessHeap(),
0,
- SECTORSIZE);
+ BootSector->BytesPerSector);
if (NewBootSector == NULL)
return STATUS_INSUFFICIENT_RESOURCES;
/* Zero the new bootsector */
- memset(NewBootSector, 0, SECTORSIZE);
+ memset(NewBootSector, 0, BootSector->BytesPerSector);
/* Copy FAT16 BPB to new bootsector */
memcpy((NewBootSector + 3),
NULL,
&IoStatusBlock,
NewBootSector,
- SECTORSIZE,
+ BootSector->BytesPerSector,
&FileOffset,
NULL);
if (!NT_SUCCESS(Status))
/* Allocate buffer for new bootsector */
NewBootSector = (PUCHAR)RtlAllocateHeap(RtlGetProcessHeap(),
0,
- SECTORSIZE);
+ BootSector->BytesPerSector);
if (NewBootSector == NULL)
return STATUS_INSUFFICIENT_RESOURCES;
/* Zero the new bootsector */
- memset(NewBootSector, 0, SECTORSIZE);
+ memset(NewBootSector, 0, BootSector->BytesPerSector);
/* Copy FAT32 BPB to new bootsector */
memcpy((NewBootSector + 3),
NULL,
&IoStatusBlock,
NewBootSector,
- SECTORSIZE,
+ BootSector->BytesPerSector,
&FileOffset,
NULL);
if (!NT_SUCCESS(Status))
/* Write backup boot sector */
if (BootSector->BootBackup != 0x0000)
{
- FileOffset.QuadPart = (ULONGLONG)((ULONG) BootSector->BootBackup * SECTORSIZE);
+ FileOffset.QuadPart = (ULONGLONG)((ULONG)BootSector->BootBackup * BootSector->BytesPerSector);
Status = NtWriteFile(FileHandle,
NULL,
NULL,
NULL,
&IoStatusBlock,
NewBootSector,
- SECTORSIZE,
+ BootSector->BytesPerSector,
&FileOffset,
NULL);
if (!NT_SUCCESS(Status))
Callback (PROGRESS, 0, (PVOID)&Context.Percent);
}
- if (PartitionInfo.PartitionLength.QuadPart < (4200LL * 1024LL))
+ if (PartitionInfo.PartitionType == PARTITION_FAT_12)
{
- /* FAT12 (volume is smaller than 4.1MB) */
+ /* FAT12 */
Status = Fat12Format(FileHandle,
&PartitionInfo,
&DiskGeometry,
ClusterSize,
&Context);
}
- else if (PartitionInfo.PartitionLength.QuadPart < (512LL * 1024LL * 1024LL))
+ else if (PartitionInfo.PartitionType == PARTITION_FAT_16 ||
+ PartitionInfo.PartitionType == PARTITION_HUGE ||
+ PartitionInfo.PartitionType == PARTITION_XINT13)
{
- /* FAT16 (volume is smaller than 512MB) */
+ /* FAT16 */
Status = Fat16Format(FileHandle,
&PartitionInfo,
&DiskGeometry,
ClusterSize,
&Context);
}
- else
+ else if (PartitionInfo.PartitionType == PARTITION_FAT32 ||
+ PartitionInfo.PartitionType == PARTITION_FAT32_XINT13)
{
- /* FAT32 (volume is 512MB or larger) */
+ /* FAT32 */
Status = Fat32Format(FileHandle,
&PartitionInfo,
&DiskGeometry,
ClusterSize,
&Context);
}
+ else
+ {
+ Status = STATUS_INVALID_PARAMETER;
+ }
NtClose(FileHandle);
#include "check/file.h"
#include "check/check.h"
-#define SECTORSIZE 512
-
#include <pshpack1.h>
typedef struct _FAT16_BOOT_SECTOR
{