ULONG i;
PLIST_ENTRY ListEntry;
PBIOSDISKENTRY BiosDiskEntry;
+ ULONG LayoutBufferSize;
Status = NtDeviceIoControlFile (FileHandle,
NULL,
DiskEntry->SectorsPerTrack = DiskGeometry.SectorsPerTrack;
DiskEntry->BytesPerSector = DiskGeometry.BytesPerSector;
- DPRINT ("Cylinders %d\n", DiskEntry->Cylinders);
- DPRINT ("TracksPerCylinder %d\n", DiskEntry->TracksPerCylinder);
- DPRINT ("SectorsPerTrack %d\n", DiskEntry->SectorsPerTrack);
- DPRINT ("BytesPerSector %d\n", DiskEntry->BytesPerSector);
+ DPRINT ("Cylinders %I64u\n", DiskEntry->Cylinders);
+ DPRINT ("TracksPerCylinder %I64u\n", DiskEntry->TracksPerCylinder);
+ DPRINT ("SectorsPerTrack %I64u\n", DiskEntry->SectorsPerTrack);
+ DPRINT ("BytesPerSector %I64u\n", DiskEntry->BytesPerSector);
DiskEntry->TrackSize =
(ULONGLONG)DiskGeometry.SectorsPerTrack *
InsertAscendingList(&List->DiskListHead, DiskEntry, DISKENTRY, ListEntry, BiosDiskNumber);
+ /*
+ * Allocate a buffer for 26 logical drives (2 entries each == 52)
+ * plus the main partiton table (4 entries). Total 56 entries.
+ */
+ LayoutBufferSize = sizeof(DRIVE_LAYOUT_INFORMATION) +
+ ((56 - ANYSIZE_ARRAY) * sizeof(PARTITION_INFORMATION));
LayoutBuffer = (DRIVE_LAYOUT_INFORMATION*)RtlAllocateHeap (ProcessHeap,
0,
- 8192);
+ LayoutBufferSize);
if (LayoutBuffer == NULL)
{
return;
NULL,
0,
LayoutBuffer,
- 8192);
+ LayoutBufferSize);
if (NT_SUCCESS (Status))
{
if (LayoutBuffer->PartitionCount == 0)
PartEntry->FormatState = Unformatted;
PartEntry->PartInfo[0].StartingOffset.QuadPart =
PartEntry->UnpartitionedOffset + DiskEntry->TrackSize;
+ PartEntry->PartInfo[0].HiddenSectors =
+ PartEntry->PartInfo[0].StartingOffset.QuadPart / DiskEntry->BytesPerSector;
PartEntry->PartInfo[0].PartitionLength.QuadPart =
PartEntry->UnpartitionedLength - DiskEntry->TrackSize;
PartEntry->PartInfo[0].PartitionType = PARTITION_ENTRY_UNUSED;
PrevPartEntry->PartInfo[1].StartingOffset.QuadPart =
PartEntry->PartInfo[0].StartingOffset.QuadPart - DiskEntry->TrackSize;
+ PrevPartEntry->PartInfo[1].HiddenSectors =
+ PrevPartEntry->PartInfo[1].StartingOffset.QuadPart / DiskEntry->BytesPerSector;
if (DiskEntry->PartListHead.Flink == &PrevPartEntry->ListEntry)
{
PrevPartEntry->PartInfo[1].StartingOffset.QuadPart =
PartEntry->PartInfo[0].StartingOffset.QuadPart - DiskEntry->TrackSize;
+ PrevPartEntry->PartInfo[1].HiddenSectors =
+ PrevPartEntry->PartInfo[1].StartingOffset.QuadPart / DiskEntry->BytesPerSector;
if (DiskEntry->PartListHead.Flink == &PrevPartEntry->ListEntry)
{
NewPartEntry->FormatState = Unformatted;
NewPartEntry->PartInfo[0].StartingOffset.QuadPart =
PartEntry->UnpartitionedOffset + DiskEntry->TrackSize;
+ NewPartEntry->PartInfo[0].HiddenSectors =
+ NewPartEntry->PartInfo[0].StartingOffset.QuadPart / DiskEntry->BytesPerSector;
NewPartEntry->PartInfo[0].PartitionLength.QuadPart =
PartitionSize - DiskEntry->TrackSize;
NewPartEntry->PartInfo[0].PartitionType = PARTITION_ENTRY_UNUSED;
PrevPartEntry->PartInfo[1].StartingOffset.QuadPart =
NewPartEntry->PartInfo[0].StartingOffset.QuadPart - DiskEntry->TrackSize;
+ PrevPartEntry->PartInfo[1].HiddenSectors =
+ PrevPartEntry->PartInfo[1].StartingOffset.QuadPart / DiskEntry->BytesPerSector;
if (DiskEntry->PartListHead.Flink == &PrevPartEntry->ListEntry)
{
PrevPartEntry->PartInfo[1].StartingOffset.QuadPart =
NewPartEntry->PartInfo[0].StartingOffset.QuadPart - DiskEntry->TrackSize;
+ PrevPartEntry->PartInfo[1].HiddenSectors =
+ PrevPartEntry->PartInfo[1].StartingOffset.QuadPart / DiskEntry->BytesPerSector;
if (DiskEntry->PartListHead.Flink == &PrevPartEntry->ListEntry)
{