X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=base%2Fsetup%2Fusetup%2Fpartlist.c;h=5109cafef43f7157b047f53f9484eff10e039d04;hp=ca0bdf7ae6a034ccb9b006fc73742e26fdf33122;hb=9fa710c8135d9c18cd6e828bc696b4a3a8b95f9d;hpb=6afbc8f48353ab80737a6bc854b6c7e478be8e2d diff --git a/base/setup/usetup/partlist.c b/base/setup/usetup/partlist.c index ca0bdf7ae6a..5109cafef43 100644 --- a/base/setup/usetup/partlist.c +++ b/base/setup/usetup/partlist.c @@ -701,6 +701,7 @@ AddDiskToList (HANDLE FileHandle, ULONG i; PLIST_ENTRY ListEntry; PBIOSDISKENTRY BiosDiskEntry; + ULONG LayoutBufferSize; Status = NtDeviceIoControlFile (FileHandle, NULL, @@ -846,10 +847,10 @@ AddDiskToList (HANDLE FileHandle, 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 * @@ -870,9 +871,15 @@ AddDiskToList (HANDLE FileHandle, 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; @@ -887,7 +894,7 @@ AddDiskToList (HANDLE FileHandle, NULL, 0, LayoutBuffer, - 8192); + LayoutBufferSize); if (NT_SUCCESS (Status)) { if (LayoutBuffer->PartitionCount == 0) @@ -937,6 +944,7 @@ CreatePartitionList (SHORT Left, List->Bottom = Bottom; List->Line = 0; + List->Offset = 0; List->TopDisk = (ULONG)-1; List->TopPartition = (ULONG)-1; @@ -1604,7 +1612,7 @@ SelectPartition(PPARTLIST List, ULONG DiskNumber, ULONG PartitionNumber) PPARTENTRY PartEntry; PLIST_ENTRY Entry1; PLIST_ENTRY Entry2; - ULONG i; + UCHAR i; /* Check for empty disks */ if (IsListEmpty (&List->DiskListHead)) @@ -1956,6 +1964,8 @@ CreateNewPartition (PPARTLIST List, PartEntry->FormatState = Unformatted; PartEntry->PartInfo[0].StartingOffset.QuadPart = PartEntry->UnpartitionedOffset + DiskEntry->TrackSize; + PartEntry->PartInfo[0].HiddenSectors = + (ULONG)(PartEntry->PartInfo[0].StartingOffset.QuadPart / DiskEntry->BytesPerSector); PartEntry->PartInfo[0].PartitionLength.QuadPart = PartEntry->UnpartitionedLength - DiskEntry->TrackSize; PartEntry->PartInfo[0].PartitionType = PARTITION_ENTRY_UNUSED; @@ -1985,6 +1995,8 @@ CreateNewPartition (PPARTLIST List, PrevPartEntry->PartInfo[1].StartingOffset.QuadPart = PartEntry->PartInfo[0].StartingOffset.QuadPart - DiskEntry->TrackSize; + PrevPartEntry->PartInfo[1].HiddenSectors = + (ULONG)(PrevPartEntry->PartInfo[1].StartingOffset.QuadPart / DiskEntry->BytesPerSector); if (DiskEntry->PartListHead.Flink == &PrevPartEntry->ListEntry) { @@ -2011,6 +2023,8 @@ CreateNewPartition (PPARTLIST List, PrevPartEntry->PartInfo[1].StartingOffset.QuadPart = PartEntry->PartInfo[0].StartingOffset.QuadPart - DiskEntry->TrackSize; + PrevPartEntry->PartInfo[1].HiddenSectors = + (ULONG)(PrevPartEntry->PartInfo[1].StartingOffset.QuadPart / DiskEntry->BytesPerSector); if (DiskEntry->PartListHead.Flink == &PrevPartEntry->ListEntry) { @@ -2066,6 +2080,8 @@ CreateNewPartition (PPARTLIST List, NewPartEntry->FormatState = Unformatted; NewPartEntry->PartInfo[0].StartingOffset.QuadPart = PartEntry->UnpartitionedOffset + DiskEntry->TrackSize; + NewPartEntry->PartInfo[0].HiddenSectors = + (ULONG)(NewPartEntry->PartInfo[0].StartingOffset.QuadPart / DiskEntry->BytesPerSector); NewPartEntry->PartInfo[0].PartitionLength.QuadPart = PartitionSize - DiskEntry->TrackSize; NewPartEntry->PartInfo[0].PartitionType = PARTITION_ENTRY_UNUSED; @@ -2095,6 +2111,8 @@ CreateNewPartition (PPARTLIST List, PrevPartEntry->PartInfo[1].StartingOffset.QuadPart = NewPartEntry->PartInfo[0].StartingOffset.QuadPart - DiskEntry->TrackSize; + PrevPartEntry->PartInfo[1].HiddenSectors = + (ULONG)(PrevPartEntry->PartInfo[1].StartingOffset.QuadPart / DiskEntry->BytesPerSector); if (DiskEntry->PartListHead.Flink == &PrevPartEntry->ListEntry) { @@ -2121,6 +2139,8 @@ CreateNewPartition (PPARTLIST List, PrevPartEntry->PartInfo[1].StartingOffset.QuadPart = NewPartEntry->PartInfo[0].StartingOffset.QuadPart - DiskEntry->TrackSize; + PrevPartEntry->PartInfo[1].HiddenSectors = + (ULONG)(PrevPartEntry->PartInfo[1].StartingOffset.QuadPart / DiskEntry->BytesPerSector); if (DiskEntry->PartListHead.Flink == &PrevPartEntry->ListEntry) { @@ -2475,7 +2495,6 @@ WritePartitionsToDisk (PPARTLIST List) PDRIVE_LAYOUT_INFORMATION DriveLayout; OBJECT_ATTRIBUTES ObjectAttributes; IO_STATUS_BLOCK Iosb; - WCHAR SrcPath[MAX_PATH]; WCHAR DstPath[MAX_PATH]; UNICODE_STRING Name; HANDLE FileHandle; @@ -2669,30 +2688,6 @@ WritePartitionsToDisk (PPARTLIST List) DriveLayout); NtClose (FileHandle); - - /* Install MBR code if the disk is new */ - if (DiskEntry1->NewDisk == TRUE && - DiskEntry1->BiosDiskNumber == 0) - { - wcscpy (SrcPath, SourceRootPath.Buffer); - wcscat (SrcPath, L"\\loader\\dosmbr.bin"); - - DPRINT ("Install MBR bootcode: %S ==> %S\n", - SrcPath, DstPath); - - /* Install MBR bootcode */ - Status = InstallMbrBootCodeToDisk (SrcPath, - DstPath); - if (!NT_SUCCESS (Status)) - { - DPRINT1 ("InstallMbrBootCodeToDisk() failed (Status %lx)\n", - Status); - return FALSE; - } - - DiskEntry1->NewDisk = FALSE; - DiskEntry1->NoMbr = FALSE; - } } Entry1 = Entry1->Flink;