mirror of
https://github.com/reactos/reactos.git
synced 2026-06-03 01:41:13 +08:00
[DISKPART] Prepare for GPT support
- Use DRIVE_LAYOUT_INFORMATION_EX instead of DRIVE_LAYOUT_INFORMATION. - Show GPT disks in the 'list disk' command.
This commit is contained in:
@@ -99,13 +99,13 @@ clean_main(
|
|||||||
CurrentDisk->ExtendedPartition = NULL;
|
CurrentDisk->ExtendedPartition = NULL;
|
||||||
CurrentDisk->Dirty = FALSE;
|
CurrentDisk->Dirty = FALSE;
|
||||||
CurrentDisk->NewDisk = TRUE;
|
CurrentDisk->NewDisk = TRUE;
|
||||||
CurrentDisk->NoMbr = TRUE;
|
CurrentDisk->PartitionStyle = PARTITION_STYLE_RAW;
|
||||||
|
|
||||||
/* Wipe the layout buffer */
|
/* Wipe the layout buffer */
|
||||||
RtlFreeHeap(RtlGetProcessHeap(), 0, CurrentDisk->LayoutBuffer);
|
RtlFreeHeap(RtlGetProcessHeap(), 0, CurrentDisk->LayoutBuffer);
|
||||||
|
|
||||||
LayoutBufferSize = sizeof(DRIVE_LAYOUT_INFORMATION) +
|
LayoutBufferSize = sizeof(DRIVE_LAYOUT_INFORMATION_EX) +
|
||||||
((4 - ANYSIZE_ARRAY) * sizeof(PARTITION_INFORMATION));
|
((4 - ANYSIZE_ARRAY) * sizeof(PARTITION_INFORMATION_EX));
|
||||||
CurrentDisk->LayoutBuffer = RtlAllocateHeap(RtlGetProcessHeap(),
|
CurrentDisk->LayoutBuffer = RtlAllocateHeap(RtlGetProcessHeap(),
|
||||||
HEAP_ZERO_MEMORY,
|
HEAP_ZERO_MEMORY,
|
||||||
LayoutBufferSize);
|
LayoutBufferSize);
|
||||||
@@ -115,6 +115,8 @@ clean_main(
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CurrentDisk->LayoutBuffer->PartitionStyle = PARTITION_STYLE_RAW;
|
||||||
|
|
||||||
/* Allocate a 1MB sectors buffer */
|
/* Allocate a 1MB sectors buffer */
|
||||||
SectorsBuffer = RtlAllocateHeap(RtlGetProcessHeap(),
|
SectorsBuffer = RtlAllocateHeap(RtlGetProcessHeap(),
|
||||||
HEAP_ZERO_MEMORY,
|
HEAP_ZERO_MEMORY,
|
||||||
|
|||||||
@@ -35,6 +35,17 @@ CreateExtendedPartition(
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (CurrentDisk->PartitionStyle == PARTITION_STYLE_GPT)
|
||||||
|
{
|
||||||
|
ConPuts(StdOut, L"GPT Partitions are not supported yet!\n");
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
else if (CurrentDisk->PartitionStyle == PARTITION_STYLE_RAW)
|
||||||
|
{
|
||||||
|
/* FIXME: Initialize disk properly! */
|
||||||
|
CurrentDisk->PartitionStyle == PARTITION_STYLE_MBR;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 3; i < argc; i++)
|
for (i = 3; i < argc; i++)
|
||||||
{
|
{
|
||||||
if (HasPrefix(argv[i], L"size=", &pszSuffix))
|
if (HasPrefix(argv[i], L"size=", &pszSuffix))
|
||||||
@@ -215,6 +226,12 @@ CreateLogicalPartition(
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (CurrentDisk->PartitionStyle != PARTITION_STYLE_MBR)
|
||||||
|
{
|
||||||
|
ConPuts(StdOut, L"Invalid partition style!\n");
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 3; i < argc; i++)
|
for (i = 3; i < argc; i++)
|
||||||
{
|
{
|
||||||
if (HasPrefix(argv[i], L"size=", &pszSuffix))
|
if (HasPrefix(argv[i], L"size=", &pszSuffix))
|
||||||
@@ -415,6 +432,17 @@ CreatePrimaryPartition(
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (CurrentDisk->PartitionStyle == PARTITION_STYLE_GPT)
|
||||||
|
{
|
||||||
|
ConPuts(StdOut, L"GPT Partitions are not supported yet!\n");
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
else if (CurrentDisk->PartitionStyle == PARTITION_STYLE_RAW)
|
||||||
|
{
|
||||||
|
/* FIXME: Initialize disk properly! */
|
||||||
|
CurrentDisk->PartitionStyle == PARTITION_STYLE_MBR;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 3; i < argc; i++)
|
for (i = 3; i < argc; i++)
|
||||||
{
|
{
|
||||||
if (HasPrefix(argv[i], L"size=", &pszSuffix))
|
if (HasPrefix(argv[i], L"size=", &pszSuffix))
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ DetailDisk(
|
|||||||
|
|
||||||
/* TODO: Print more disk details */
|
/* TODO: Print more disk details */
|
||||||
ConPuts(StdOut, L"\n");
|
ConPuts(StdOut, L"\n");
|
||||||
ConResPrintf(StdOut, IDS_DETAIL_INFO_DISK_ID, CurrentDisk->LayoutBuffer->Signature);
|
ConResPrintf(StdOut, IDS_DETAIL_INFO_DISK_ID, CurrentDisk->LayoutBuffer->Mbr.Signature);
|
||||||
ConResPrintf(StdOut, IDS_DETAIL_INFO_PATH, CurrentDisk->PathId);
|
ConResPrintf(StdOut, IDS_DETAIL_INFO_PATH, CurrentDisk->PathId);
|
||||||
ConResPrintf(StdOut, IDS_DETAIL_INFO_TARGET, CurrentDisk->TargetId);
|
ConResPrintf(StdOut, IDS_DETAIL_INFO_TARGET, CurrentDisk->TargetId);
|
||||||
ConResPrintf(StdOut, IDS_DETAIL_INFO_LUN_ID, CurrentDisk->Lun);
|
ConResPrintf(StdOut, IDS_DETAIL_INFO_LUN_ID, CurrentDisk->Lun);
|
||||||
|
|||||||
@@ -173,11 +173,11 @@ typedef struct _DISKENTRY
|
|||||||
BOOLEAN Dirty;
|
BOOLEAN Dirty;
|
||||||
|
|
||||||
BOOLEAN NewDisk;
|
BOOLEAN NewDisk;
|
||||||
BOOLEAN NoMbr; /* MBR is absent */
|
DWORD PartitionStyle;
|
||||||
|
|
||||||
UNICODE_STRING DriverName;
|
UNICODE_STRING DriverName;
|
||||||
|
|
||||||
PDRIVE_LAYOUT_INFORMATION LayoutBuffer;
|
PDRIVE_LAYOUT_INFORMATION_EX LayoutBuffer;
|
||||||
|
|
||||||
PPARTENTRY ExtendedPartition;
|
PPARTENTRY ExtendedPartition;
|
||||||
|
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ PrintDisk(
|
|||||||
FreeSize,
|
FreeSize,
|
||||||
lpFreeUnit,
|
lpFreeUnit,
|
||||||
L" ",
|
L" ",
|
||||||
L" ");
|
(DiskEntry->PartitionStyle == PARTITION_STYLE_GPT) ? L"*" : L" ");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -404,12 +404,12 @@ AddPartitionToDisk(
|
|||||||
ULONG PartitionIndex,
|
ULONG PartitionIndex,
|
||||||
BOOLEAN LogicalPartition)
|
BOOLEAN LogicalPartition)
|
||||||
{
|
{
|
||||||
PPARTITION_INFORMATION PartitionInfo;
|
PPARTITION_INFORMATION_EX PartitionInfo;
|
||||||
PPARTENTRY PartEntry;
|
PPARTENTRY PartEntry;
|
||||||
|
|
||||||
PartitionInfo = &DiskEntry->LayoutBuffer->PartitionEntry[PartitionIndex];
|
PartitionInfo = &DiskEntry->LayoutBuffer->PartitionEntry[PartitionIndex];
|
||||||
if (PartitionInfo->PartitionType == 0 ||
|
if (PartitionInfo->Mbr.PartitionType == 0 ||
|
||||||
(LogicalPartition == TRUE && IsContainerPartition(PartitionInfo->PartitionType)))
|
(LogicalPartition == TRUE && IsContainerPartition(PartitionInfo->Mbr.PartitionType)))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
PartEntry = RtlAllocateHeap(RtlGetProcessHeap(),
|
PartEntry = RtlAllocateHeap(RtlGetProcessHeap(),
|
||||||
@@ -425,8 +425,8 @@ AddPartitionToDisk(
|
|||||||
PartEntry->StartSector.QuadPart = (ULONGLONG)PartitionInfo->StartingOffset.QuadPart / DiskEntry->BytesPerSector;
|
PartEntry->StartSector.QuadPart = (ULONGLONG)PartitionInfo->StartingOffset.QuadPart / DiskEntry->BytesPerSector;
|
||||||
PartEntry->SectorCount.QuadPart = (ULONGLONG)PartitionInfo->PartitionLength.QuadPart / DiskEntry->BytesPerSector;
|
PartEntry->SectorCount.QuadPart = (ULONGLONG)PartitionInfo->PartitionLength.QuadPart / DiskEntry->BytesPerSector;
|
||||||
|
|
||||||
PartEntry->BootIndicator = PartitionInfo->BootIndicator;
|
PartEntry->BootIndicator = PartitionInfo->Mbr.BootIndicator;
|
||||||
PartEntry->PartitionType = PartitionInfo->PartitionType;
|
PartEntry->PartitionType = PartitionInfo->Mbr.PartitionType;
|
||||||
|
|
||||||
PartEntry->LogicalPartition = LogicalPartition;
|
PartEntry->LogicalPartition = LogicalPartition;
|
||||||
PartEntry->IsPartitioned = TRUE;
|
PartEntry->IsPartitioned = TRUE;
|
||||||
@@ -782,7 +782,7 @@ AddDiskToList(
|
|||||||
PLIST_ENTRY ListEntry;
|
PLIST_ENTRY ListEntry;
|
||||||
PBIOSDISKENTRY BiosDiskEntry;
|
PBIOSDISKENTRY BiosDiskEntry;
|
||||||
ULONG LayoutBufferSize;
|
ULONG LayoutBufferSize;
|
||||||
PDRIVE_LAYOUT_INFORMATION NewLayoutBuffer;
|
PDRIVE_LAYOUT_INFORMATION_EX NewLayoutBuffer;
|
||||||
|
|
||||||
Status = NtDeviceIoControlFile(FileHandle,
|
Status = NtDeviceIoControlFile(FileHandle,
|
||||||
NULL,
|
NULL,
|
||||||
@@ -871,11 +871,25 @@ AddDiskToList(
|
|||||||
// DiskEntry->Signature = Signature;
|
// DiskEntry->Signature = Signature;
|
||||||
DiskEntry->BiosFound = FALSE;
|
DiskEntry->BiosFound = FALSE;
|
||||||
|
|
||||||
/* Check if this disk has a valid MBR */
|
/* Check the disk partition style */
|
||||||
if (Mbr->Magic != MBR_MAGIC)
|
if (Mbr->Magic != MBR_MAGIC)
|
||||||
DiskEntry->NoMbr = TRUE;
|
{
|
||||||
|
DPRINT("Partition style: RAW\n");
|
||||||
|
DiskEntry->PartitionStyle = PARTITION_STYLE_RAW;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
DiskEntry->NoMbr = FALSE;
|
{
|
||||||
|
if (Mbr->Partition[0].PartitionType == PARTITION_GPT)
|
||||||
|
{
|
||||||
|
DPRINT("Partition style: GPT\n");
|
||||||
|
DiskEntry->PartitionStyle = PARTITION_STYLE_GPT;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DPRINT("Partition style: MBR\n");
|
||||||
|
DiskEntry->PartitionStyle = PARTITION_STYLE_MBR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Free Mbr sector buffer */
|
/* Free Mbr sector buffer */
|
||||||
RtlFreeHeap(RtlGetProcessHeap(), 0, Mbr);
|
RtlFreeHeap(RtlGetProcessHeap(), 0, Mbr);
|
||||||
@@ -954,8 +968,8 @@ AddDiskToList(
|
|||||||
InsertAscendingList(&DiskListHead, DiskEntry, DISKENTRY, ListEntry, DiskNumber);
|
InsertAscendingList(&DiskListHead, DiskEntry, DISKENTRY, ListEntry, DiskNumber);
|
||||||
|
|
||||||
/* Allocate a layout buffer with 4 partition entries first */
|
/* Allocate a layout buffer with 4 partition entries first */
|
||||||
LayoutBufferSize = sizeof(DRIVE_LAYOUT_INFORMATION) +
|
LayoutBufferSize = sizeof(DRIVE_LAYOUT_INFORMATION_EX) +
|
||||||
((4 - ANYSIZE_ARRAY) * sizeof(PARTITION_INFORMATION));
|
((4 - ANYSIZE_ARRAY) * sizeof(PARTITION_INFORMATION_EX));
|
||||||
DiskEntry->LayoutBuffer = RtlAllocateHeap(RtlGetProcessHeap(),
|
DiskEntry->LayoutBuffer = RtlAllocateHeap(RtlGetProcessHeap(),
|
||||||
HEAP_ZERO_MEMORY,
|
HEAP_ZERO_MEMORY,
|
||||||
LayoutBufferSize);
|
LayoutBufferSize);
|
||||||
@@ -973,7 +987,7 @@ AddDiskToList(
|
|||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
&Iosb,
|
&Iosb,
|
||||||
IOCTL_DISK_GET_DRIVE_LAYOUT,
|
IOCTL_DISK_GET_DRIVE_LAYOUT_EX,
|
||||||
NULL,
|
NULL,
|
||||||
0,
|
0,
|
||||||
DiskEntry->LayoutBuffer,
|
DiskEntry->LayoutBuffer,
|
||||||
@@ -987,7 +1001,7 @@ AddDiskToList(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
LayoutBufferSize += 4 * sizeof(PARTITION_INFORMATION);
|
LayoutBufferSize += 4 * sizeof(PARTITION_INFORMATION_EX);
|
||||||
NewLayoutBuffer = RtlReAllocateHeap(RtlGetProcessHeap(),
|
NewLayoutBuffer = RtlReAllocateHeap(RtlGetProcessHeap(),
|
||||||
HEAP_ZERO_MEMORY,
|
HEAP_ZERO_MEMORY,
|
||||||
DiskEntry->LayoutBuffer,
|
DiskEntry->LayoutBuffer,
|
||||||
@@ -1009,7 +1023,7 @@ AddDiskToList(
|
|||||||
|
|
||||||
if (DiskEntry->LayoutBuffer->PartitionEntry[0].StartingOffset.QuadPart != 0 &&
|
if (DiskEntry->LayoutBuffer->PartitionEntry[0].StartingOffset.QuadPart != 0 &&
|
||||||
DiskEntry->LayoutBuffer->PartitionEntry[0].PartitionLength.QuadPart != 0 &&
|
DiskEntry->LayoutBuffer->PartitionEntry[0].PartitionLength.QuadPart != 0 &&
|
||||||
DiskEntry->LayoutBuffer->PartitionEntry[0].PartitionType != 0)
|
DiskEntry->LayoutBuffer->PartitionEntry[0].Mbr.PartitionType != 0)
|
||||||
{
|
{
|
||||||
if ((DiskEntry->LayoutBuffer->PartitionEntry[0].StartingOffset.QuadPart / DiskEntry->BytesPerSector) % DiskEntry->SectorsPerTrack == 0)
|
if ((DiskEntry->LayoutBuffer->PartitionEntry[0].StartingOffset.QuadPart / DiskEntry->BytesPerSector) % DiskEntry->SectorsPerTrack == 0)
|
||||||
{
|
{
|
||||||
@@ -1487,7 +1501,7 @@ WritePartitions(
|
|||||||
HANDLE FileHandle;
|
HANDLE FileHandle;
|
||||||
IO_STATUS_BLOCK Iosb;
|
IO_STATUS_BLOCK Iosb;
|
||||||
ULONG BufferSize;
|
ULONG BufferSize;
|
||||||
PPARTITION_INFORMATION PartitionInfo;
|
PPARTITION_INFORMATION_EX PartitionInfo;
|
||||||
ULONG PartitionCount;
|
ULONG PartitionCount;
|
||||||
PLIST_ENTRY ListEntry;
|
PLIST_ENTRY ListEntry;
|
||||||
PPARTENTRY PartEntry;
|
PPARTENTRY PartEntry;
|
||||||
@@ -1532,14 +1546,14 @@ WritePartitions(
|
|||||||
PartitionCount = DiskEntry->LayoutBuffer->PartitionCount;
|
PartitionCount = DiskEntry->LayoutBuffer->PartitionCount;
|
||||||
|
|
||||||
/* Set the new disk layout and retrieve its updated version with possibly modified partition numbers */
|
/* Set the new disk layout and retrieve its updated version with possibly modified partition numbers */
|
||||||
BufferSize = sizeof(DRIVE_LAYOUT_INFORMATION) +
|
BufferSize = sizeof(DRIVE_LAYOUT_INFORMATION_EX) +
|
||||||
((PartitionCount - 1) * sizeof(PARTITION_INFORMATION));
|
((PartitionCount - 1) * sizeof(PARTITION_INFORMATION_EX));
|
||||||
Status = NtDeviceIoControlFile(FileHandle,
|
Status = NtDeviceIoControlFile(FileHandle,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
&Iosb,
|
&Iosb,
|
||||||
IOCTL_DISK_SET_DRIVE_LAYOUT,
|
IOCTL_DISK_SET_DRIVE_LAYOUT_EX,
|
||||||
DiskEntry->LayoutBuffer,
|
DiskEntry->LayoutBuffer,
|
||||||
BufferSize,
|
BufferSize,
|
||||||
DiskEntry->LayoutBuffer,
|
DiskEntry->LayoutBuffer,
|
||||||
@@ -1604,7 +1618,7 @@ WritePartitions(
|
|||||||
static
|
static
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
IsEmptyLayoutEntry(
|
IsEmptyLayoutEntry(
|
||||||
IN PPARTITION_INFORMATION PartitionInfo)
|
IN PPARTITION_INFORMATION_EX PartitionInfo)
|
||||||
{
|
{
|
||||||
if (PartitionInfo->StartingOffset.QuadPart == 0 &&
|
if (PartitionInfo->StartingOffset.QuadPart == 0 &&
|
||||||
PartitionInfo->PartitionLength.QuadPart == 0)
|
PartitionInfo->PartitionLength.QuadPart == 0)
|
||||||
@@ -1619,7 +1633,7 @@ IsEmptyLayoutEntry(
|
|||||||
static
|
static
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
IsSamePrimaryLayoutEntry(
|
IsSamePrimaryLayoutEntry(
|
||||||
IN PPARTITION_INFORMATION PartitionInfo,
|
IN PPARTITION_INFORMATION_EX PartitionInfo,
|
||||||
IN PDISKENTRY DiskEntry,
|
IN PDISKENTRY DiskEntry,
|
||||||
IN PPARTENTRY PartEntry)
|
IN PPARTENTRY PartEntry)
|
||||||
{
|
{
|
||||||
@@ -1681,7 +1695,7 @@ BOOLEAN
|
|||||||
ReAllocateLayoutBuffer(
|
ReAllocateLayoutBuffer(
|
||||||
_In_ PDISKENTRY DiskEntry)
|
_In_ PDISKENTRY DiskEntry)
|
||||||
{
|
{
|
||||||
PDRIVE_LAYOUT_INFORMATION NewLayoutBuffer;
|
PDRIVE_LAYOUT_INFORMATION_EX NewLayoutBuffer;
|
||||||
ULONG NewPartitionCount;
|
ULONG NewPartitionCount;
|
||||||
ULONG CurrentPartitionCount = 0;
|
ULONG CurrentPartitionCount = 0;
|
||||||
ULONG LayoutBufferSize;
|
ULONG LayoutBufferSize;
|
||||||
@@ -1700,8 +1714,8 @@ ReAllocateLayoutBuffer(
|
|||||||
if (CurrentPartitionCount == NewPartitionCount)
|
if (CurrentPartitionCount == NewPartitionCount)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
LayoutBufferSize = sizeof(DRIVE_LAYOUT_INFORMATION) +
|
LayoutBufferSize = sizeof(DRIVE_LAYOUT_INFORMATION_EX) +
|
||||||
((NewPartitionCount - ANYSIZE_ARRAY) * sizeof(PARTITION_INFORMATION));
|
((NewPartitionCount - ANYSIZE_ARRAY) * sizeof(PARTITION_INFORMATION_EX));
|
||||||
NewLayoutBuffer = RtlReAllocateHeap(RtlGetProcessHeap(),
|
NewLayoutBuffer = RtlReAllocateHeap(RtlGetProcessHeap(),
|
||||||
HEAP_ZERO_MEMORY,
|
HEAP_ZERO_MEMORY,
|
||||||
DiskEntry->LayoutBuffer,
|
DiskEntry->LayoutBuffer,
|
||||||
@@ -1733,8 +1747,8 @@ VOID
|
|||||||
UpdateDiskLayout(
|
UpdateDiskLayout(
|
||||||
_In_ PDISKENTRY DiskEntry)
|
_In_ PDISKENTRY DiskEntry)
|
||||||
{
|
{
|
||||||
PPARTITION_INFORMATION PartitionInfo;
|
PPARTITION_INFORMATION_EX PartitionInfo;
|
||||||
PPARTITION_INFORMATION LinkInfo = NULL;
|
PPARTITION_INFORMATION_EX LinkInfo = NULL;
|
||||||
PLIST_ENTRY ListEntry;
|
PLIST_ENTRY ListEntry;
|
||||||
PPARTENTRY PartEntry;
|
PPARTENTRY PartEntry;
|
||||||
LARGE_INTEGER HiddenSectors64;
|
LARGE_INTEGER HiddenSectors64;
|
||||||
@@ -1750,6 +1764,8 @@ UpdateDiskLayout(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DiskEntry->LayoutBuffer->PartitionStyle = PARTITION_STYLE_MBR;
|
||||||
|
|
||||||
/* Update the primary partition table */
|
/* Update the primary partition table */
|
||||||
Index = 0;
|
Index = 0;
|
||||||
for (ListEntry = DiskEntry->PrimaryPartListHead.Flink;
|
for (ListEntry = DiskEntry->PrimaryPartListHead.Flink;
|
||||||
@@ -1775,13 +1791,14 @@ UpdateDiskLayout(
|
|||||||
{
|
{
|
||||||
DPRINT1("Updating primary partition entry %lu\n", Index);
|
DPRINT1("Updating primary partition entry %lu\n", Index);
|
||||||
|
|
||||||
|
PartitionInfo->PartitionStyle = PARTITION_STYLE_MBR;
|
||||||
PartitionInfo->StartingOffset.QuadPart = PartEntry->StartSector.QuadPart * DiskEntry->BytesPerSector;
|
PartitionInfo->StartingOffset.QuadPart = PartEntry->StartSector.QuadPart * DiskEntry->BytesPerSector;
|
||||||
PartitionInfo->PartitionLength.QuadPart = PartEntry->SectorCount.QuadPart * DiskEntry->BytesPerSector;
|
PartitionInfo->PartitionLength.QuadPart = PartEntry->SectorCount.QuadPart * DiskEntry->BytesPerSector;
|
||||||
PartitionInfo->HiddenSectors = PartEntry->StartSector.LowPart;
|
PartitionInfo->Mbr.HiddenSectors = PartEntry->StartSector.LowPart;
|
||||||
PartitionInfo->PartitionNumber = PartEntry->PartitionNumber;
|
PartitionInfo->PartitionNumber = PartEntry->PartitionNumber;
|
||||||
PartitionInfo->PartitionType = PartEntry->PartitionType;
|
PartitionInfo->Mbr.PartitionType = PartEntry->PartitionType;
|
||||||
PartitionInfo->BootIndicator = PartEntry->BootIndicator;
|
PartitionInfo->Mbr.BootIndicator = PartEntry->BootIndicator;
|
||||||
PartitionInfo->RecognizedPartition = IsRecognizedPartition(PartEntry->PartitionType);
|
PartitionInfo->Mbr.RecognizedPartition = IsRecognizedPartition(PartEntry->PartitionType);
|
||||||
PartitionInfo->RewritePartition = TRUE;
|
PartitionInfo->RewritePartition = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1817,26 +1834,28 @@ UpdateDiskLayout(
|
|||||||
|
|
||||||
DPRINT1("Updating logical partition entry %lu\n", Index);
|
DPRINT1("Updating logical partition entry %lu\n", Index);
|
||||||
|
|
||||||
|
PartitionInfo->PartitionStyle = PARTITION_STYLE_MBR;
|
||||||
PartitionInfo->StartingOffset.QuadPart = PartEntry->StartSector.QuadPart * DiskEntry->BytesPerSector;
|
PartitionInfo->StartingOffset.QuadPart = PartEntry->StartSector.QuadPart * DiskEntry->BytesPerSector;
|
||||||
PartitionInfo->PartitionLength.QuadPart = PartEntry->SectorCount.QuadPart * DiskEntry->BytesPerSector;
|
PartitionInfo->PartitionLength.QuadPart = PartEntry->SectorCount.QuadPart * DiskEntry->BytesPerSector;
|
||||||
PartitionInfo->HiddenSectors = DiskEntry->SectorAlignment;
|
PartitionInfo->Mbr.HiddenSectors = DiskEntry->SectorAlignment;
|
||||||
PartitionInfo->PartitionNumber = PartEntry->PartitionNumber;
|
PartitionInfo->PartitionNumber = PartEntry->PartitionNumber;
|
||||||
PartitionInfo->PartitionType = PartEntry->PartitionType;
|
PartitionInfo->Mbr.PartitionType = PartEntry->PartitionType;
|
||||||
PartitionInfo->BootIndicator = FALSE;
|
PartitionInfo->Mbr.BootIndicator = FALSE;
|
||||||
PartitionInfo->RecognizedPartition = IsRecognizedPartition(PartEntry->PartitionType);
|
PartitionInfo->Mbr.RecognizedPartition = IsRecognizedPartition(PartEntry->PartitionType);
|
||||||
PartitionInfo->RewritePartition = TRUE;
|
PartitionInfo->RewritePartition = TRUE;
|
||||||
|
|
||||||
/* Fill the link entry of the previous partition entry */
|
/* Fill the link entry of the previous partition entry */
|
||||||
if (LinkInfo != NULL)
|
if (LinkInfo != NULL)
|
||||||
{
|
{
|
||||||
|
LinkInfo->PartitionStyle = PARTITION_STYLE_MBR;
|
||||||
LinkInfo->StartingOffset.QuadPart = (PartEntry->StartSector.QuadPart - DiskEntry->SectorAlignment) * DiskEntry->BytesPerSector;
|
LinkInfo->StartingOffset.QuadPart = (PartEntry->StartSector.QuadPart - DiskEntry->SectorAlignment) * DiskEntry->BytesPerSector;
|
||||||
LinkInfo->PartitionLength.QuadPart = (PartEntry->StartSector.QuadPart + DiskEntry->SectorAlignment) * DiskEntry->BytesPerSector;
|
LinkInfo->PartitionLength.QuadPart = (PartEntry->StartSector.QuadPart + DiskEntry->SectorAlignment) * DiskEntry->BytesPerSector;
|
||||||
HiddenSectors64.QuadPart = PartEntry->StartSector.QuadPart - DiskEntry->SectorAlignment - DiskEntry->ExtendedPartition->StartSector.QuadPart;
|
HiddenSectors64.QuadPart = PartEntry->StartSector.QuadPart - DiskEntry->SectorAlignment - DiskEntry->ExtendedPartition->StartSector.QuadPart;
|
||||||
LinkInfo->HiddenSectors = HiddenSectors64.LowPart;
|
LinkInfo->Mbr.HiddenSectors = HiddenSectors64.LowPart;
|
||||||
LinkInfo->PartitionNumber = 0;
|
LinkInfo->PartitionNumber = 0;
|
||||||
LinkInfo->PartitionType = PARTITION_EXTENDED;
|
LinkInfo->Mbr.PartitionType = PARTITION_EXTENDED;
|
||||||
LinkInfo->BootIndicator = FALSE;
|
LinkInfo->Mbr.BootIndicator = FALSE;
|
||||||
LinkInfo->RecognizedPartition = FALSE;
|
LinkInfo->Mbr.RecognizedPartition = FALSE;
|
||||||
LinkInfo->RewritePartition = TRUE;
|
LinkInfo->RewritePartition = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1859,13 +1878,14 @@ UpdateDiskLayout(
|
|||||||
{
|
{
|
||||||
DPRINT1("Wiping primary partition entry %lu\n", Index);
|
DPRINT1("Wiping primary partition entry %lu\n", Index);
|
||||||
|
|
||||||
|
PartitionInfo->PartitionStyle = PARTITION_STYLE_MBR;
|
||||||
PartitionInfo->StartingOffset.QuadPart = 0;
|
PartitionInfo->StartingOffset.QuadPart = 0;
|
||||||
PartitionInfo->PartitionLength.QuadPart = 0;
|
PartitionInfo->PartitionLength.QuadPart = 0;
|
||||||
PartitionInfo->HiddenSectors = 0;
|
PartitionInfo->Mbr.HiddenSectors = 0;
|
||||||
PartitionInfo->PartitionNumber = 0;
|
PartitionInfo->PartitionNumber = 0;
|
||||||
PartitionInfo->PartitionType = PARTITION_ENTRY_UNUSED;
|
PartitionInfo->Mbr.PartitionType = PARTITION_ENTRY_UNUSED;
|
||||||
PartitionInfo->BootIndicator = FALSE;
|
PartitionInfo->Mbr.BootIndicator = FALSE;
|
||||||
PartitionInfo->RecognizedPartition = FALSE;
|
PartitionInfo->Mbr.RecognizedPartition = FALSE;
|
||||||
PartitionInfo->RewritePartition = TRUE;
|
PartitionInfo->RewritePartition = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1883,13 +1903,14 @@ UpdateDiskLayout(
|
|||||||
{
|
{
|
||||||
DPRINT1("Wiping partition entry %lu\n", Index);
|
DPRINT1("Wiping partition entry %lu\n", Index);
|
||||||
|
|
||||||
|
PartitionInfo->PartitionStyle = PARTITION_STYLE_MBR;
|
||||||
PartitionInfo->StartingOffset.QuadPart = 0;
|
PartitionInfo->StartingOffset.QuadPart = 0;
|
||||||
PartitionInfo->PartitionLength.QuadPart = 0;
|
PartitionInfo->PartitionLength.QuadPart = 0;
|
||||||
PartitionInfo->HiddenSectors = 0;
|
PartitionInfo->Mbr.HiddenSectors = 0;
|
||||||
PartitionInfo->PartitionNumber = 0;
|
PartitionInfo->PartitionNumber = 0;
|
||||||
PartitionInfo->PartitionType = PARTITION_ENTRY_UNUSED;
|
PartitionInfo->Mbr.PartitionType = PARTITION_ENTRY_UNUSED;
|
||||||
PartitionInfo->BootIndicator = FALSE;
|
PartitionInfo->Mbr.BootIndicator = FALSE;
|
||||||
PartitionInfo->RecognizedPartition = FALSE;
|
PartitionInfo->Mbr.RecognizedPartition = FALSE;
|
||||||
PartitionInfo->RewritePartition = TRUE;
|
PartitionInfo->RewritePartition = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ UniqueIdDisk(
|
|||||||
if (argc == 2)
|
if (argc == 2)
|
||||||
{
|
{
|
||||||
ConPuts(StdOut, L"\n");
|
ConPuts(StdOut, L"\n");
|
||||||
ConPrintf(StdOut, L"Disk ID: %08lx\n", CurrentDisk->LayoutBuffer->Signature);
|
ConPrintf(StdOut, L"Disk ID: %08lx\n", CurrentDisk->LayoutBuffer->Mbr.Signature);
|
||||||
ConPuts(StdOut, L"\n");
|
ConPuts(StdOut, L"\n");
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@@ -63,7 +63,7 @@ UniqueIdDisk(
|
|||||||
}
|
}
|
||||||
|
|
||||||
DPRINT("New Signature: 0x%08lx\n", ulValue);
|
DPRINT("New Signature: 0x%08lx\n", ulValue);
|
||||||
CurrentDisk->LayoutBuffer->Signature = ulValue;
|
CurrentDisk->LayoutBuffer->Mbr.Signature = ulValue;
|
||||||
CurrentDisk->Dirty = TRUE;
|
CurrentDisk->Dirty = TRUE;
|
||||||
UpdateDiskLayout(CurrentDisk);
|
UpdateDiskLayout(CurrentDisk);
|
||||||
WritePartitions(CurrentDisk);
|
WritePartitions(CurrentDisk);
|
||||||
|
|||||||
Reference in New Issue
Block a user