@@ -493,7 +493,7 @@ BOOLEAN
493493IsDiskSuperFloppy2 (
494494 _In_ const DISK_PARTITION_INFO * DiskInfo ,
495495 _In_opt_ const ULONGLONG * DiskSize ,
496- _In_ const PARTITION_INFORMATION * PartitionInfo )
496+ _In_ const PARTITION_INFORMATION_EX * PartitionInfo )
497497{
498498 /* Structure size must be valid */
499499 if (DiskInfo -> SizeOfPartitionInfo < RTL_SIZEOF_THROUGH_FIELD (DISK_PARTITION_INFO , Mbr ))
@@ -505,7 +505,7 @@ IsDiskSuperFloppy2(
505505
506506 /* The single partition must start at the beginning of the disk */
507507 if (!(PartitionInfo -> StartingOffset .QuadPart == 0 &&
508- PartitionInfo -> HiddenSectors == 0 ))
508+ PartitionInfo -> Mbr . HiddenSectors == 0 ))
509509 {
510510 return FALSE;
511511 }
@@ -517,17 +517,17 @@ IsDiskSuperFloppy2(
517517 }
518518
519519 /* The partition must be recognized and report as FAT16 non-bootable */
520- if ((PartitionInfo -> RecognizedPartition != TRUE) ||
521- (PartitionInfo -> PartitionType != PARTITION_FAT_16 ) ||
522- (PartitionInfo -> BootIndicator != FALSE))
520+ if ((PartitionInfo -> Mbr . RecognizedPartition != TRUE) ||
521+ (PartitionInfo -> Mbr . PartitionType != PARTITION_FAT_16 ) ||
522+ (PartitionInfo -> Mbr . BootIndicator != FALSE))
523523 {
524524 DPRINT1 ("Super-Floppy does not return default settings:\n"
525525 " RecognizedPartition = %s, expected TRUE\n"
526526 " PartitionType = 0x%02x, expected 0x04 (PARTITION_FAT_16)\n"
527527 " BootIndicator = %s, expected FALSE\n" ,
528- PartitionInfo -> RecognizedPartition ? "TRUE" : "FALSE" ,
529- PartitionInfo -> PartitionType ,
530- PartitionInfo -> BootIndicator ? "TRUE" : "FALSE" );
528+ PartitionInfo -> Mbr . RecognizedPartition ? "TRUE" : "FALSE" ,
529+ PartitionInfo -> Mbr . PartitionType ,
530+ PartitionInfo -> Mbr . BootIndicator ? "TRUE" : "FALSE" );
531531 }
532532
533533 /* The partition and disk sizes should agree */
@@ -542,7 +542,7 @@ IsDiskSuperFloppy2(
542542
543543BOOLEAN
544544IsDiskSuperFloppy (
545- _In_ const DRIVE_LAYOUT_INFORMATION * Layout ,
545+ _In_ const DRIVE_LAYOUT_INFORMATION_EX * Layout ,
546546 _In_opt_ const ULONGLONG * DiskSize )
547547{
548548 DISK_PARTITION_INFO DiskInfo ;
@@ -554,7 +554,7 @@ IsDiskSuperFloppy(
554554 /* Build the disk partition info */
555555 DiskInfo .SizeOfPartitionInfo = RTL_SIZEOF_THROUGH_FIELD (DISK_PARTITION_INFO , Mbr );
556556 DiskInfo .PartitionStyle = PARTITION_STYLE_MBR ;
557- DiskInfo .Mbr .Signature = Layout -> Signature ;
557+ DiskInfo .Mbr .Signature = Layout -> Mbr . Signature ;
558558 DiskInfo .Mbr .CheckSum = 0 ; // Dummy value
559559
560560 /* Call the helper on the single partition entry */
@@ -568,7 +568,7 @@ IsDiskSuperFloppyEx(
568568{
569569 DISK_PARTITION_INFO DiskInfo ;
570570 const PARTITION_INFORMATION_EX * PartitionInfoEx ;
571- PARTITION_INFORMATION PartitionInfo ;
571+ PARTITION_INFORMATION_EX PartitionInfo ;
572572
573573 /* The layout must be MBR and contain only one partition */
574574 if (LayoutEx -> PartitionStyle != PARTITION_STYLE_MBR )
@@ -587,11 +587,11 @@ IsDiskSuperFloppyEx(
587587
588588 PartitionInfo .StartingOffset = PartitionInfoEx -> StartingOffset ;
589589 PartitionInfo .PartitionLength = PartitionInfoEx -> PartitionLength ;
590- PartitionInfo .HiddenSectors = PartitionInfoEx -> Mbr .HiddenSectors ;
590+ PartitionInfo .Mbr . HiddenSectors = PartitionInfoEx -> Mbr .HiddenSectors ;
591591 PartitionInfo .PartitionNumber = PartitionInfoEx -> PartitionNumber ;
592- PartitionInfo .PartitionType = PartitionInfoEx -> Mbr .PartitionType ;
593- PartitionInfo .BootIndicator = PartitionInfoEx -> Mbr .BootIndicator ;
594- PartitionInfo .RecognizedPartition = PartitionInfoEx -> Mbr .RecognizedPartition ;
592+ PartitionInfo .Mbr . PartitionType = PartitionInfoEx -> Mbr .PartitionType ;
593+ PartitionInfo .Mbr . BootIndicator = PartitionInfoEx -> Mbr .BootIndicator ;
594+ PartitionInfo .Mbr . RecognizedPartition = PartitionInfoEx -> Mbr .RecognizedPartition ;
595595 PartitionInfo .RewritePartition = PartitionInfoEx -> RewritePartition ;
596596
597597 /* Call the helper on the single partition entry */
@@ -1043,16 +1043,16 @@ AddPartitionToDisk(
10431043 IN ULONG PartitionIndex ,
10441044 IN BOOLEAN LogicalPartition )
10451045{
1046- PPARTITION_INFORMATION PartitionInfo ;
1046+ PPARTITION_INFORMATION_EX PartitionInfo ;
10471047 PPARTENTRY PartEntry ;
10481048
10491049 PartitionInfo = & DiskEntry -> LayoutBuffer -> PartitionEntry [PartitionIndex ];
10501050
10511051 /* Ignore empty partitions */
1052- if (PartitionInfo -> PartitionType == PARTITION_ENTRY_UNUSED )
1052+ if (PartitionInfo -> Mbr . PartitionType == PARTITION_ENTRY_UNUSED )
10531053 return ;
10541054 /* Request must be consistent, though! */
1055- ASSERT (!(LogicalPartition && IsContainerPartition (PartitionInfo -> PartitionType )));
1055+ ASSERT (!(LogicalPartition && IsContainerPartition (PartitionInfo -> Mbr . PartitionType )));
10561056
10571057 PartEntry = RtlAllocateHeap (ProcessHeap ,
10581058 HEAP_ZERO_MEMORY ,
@@ -1065,8 +1065,8 @@ AddPartitionToDisk(
10651065 PartEntry -> StartSector .QuadPart = (ULONGLONG )PartitionInfo -> StartingOffset .QuadPart / DiskEntry -> BytesPerSector ;
10661066 PartEntry -> SectorCount .QuadPart = (ULONGLONG )PartitionInfo -> PartitionLength .QuadPart / DiskEntry -> BytesPerSector ;
10671067
1068- PartEntry -> BootIndicator = PartitionInfo -> BootIndicator ;
1069- PartEntry -> PartitionType = PartitionInfo -> PartitionType ;
1068+ PartEntry -> BootIndicator = PartitionInfo -> Mbr . BootIndicator ;
1069+ PartEntry -> PartitionType = PartitionInfo -> Mbr . PartitionType ;
10701070
10711071 PartEntry -> LogicalPartition = LogicalPartition ;
10721072 PartEntry -> IsPartitioned = TRUE;
@@ -1360,7 +1360,7 @@ SetDiskSignature(
13601360 return ;
13611361 }
13621362
1363- Buffer = (PUCHAR )& DiskEntry -> LayoutBuffer -> Signature ;
1363+ Buffer = (PUCHAR )& DiskEntry -> LayoutBuffer -> Mbr . Signature ;
13641364
13651365 while (TRUE)
13661366 {
@@ -1372,7 +1372,7 @@ SetDiskSignature(
13721372 Buffer [2 ] = (UCHAR )(TimeFields .Month & 0xFF ) + (UCHAR )(TimeFields .Second & 0xFF );
13731373 Buffer [3 ] = (UCHAR )(TimeFields .Day & 0xFF ) + (UCHAR )(TimeFields .Milliseconds & 0xFF );
13741374
1375- if (DiskEntry -> LayoutBuffer -> Signature == 0 )
1375+ if (DiskEntry -> LayoutBuffer -> Mbr . Signature == 0 )
13761376 {
13771377 continue ;
13781378 }
@@ -1395,7 +1395,7 @@ SetDiskSignature(
13951395 }
13961396
13971397 if (DiskEntry != DiskEntry2 &&
1398- DiskEntry -> LayoutBuffer -> Signature == DiskEntry2 -> LayoutBuffer -> Signature )
1398+ DiskEntry -> LayoutBuffer -> Mbr . Signature == DiskEntry2 -> LayoutBuffer -> Mbr . Signature )
13991399 break ;
14001400 }
14011401
@@ -1426,7 +1426,7 @@ UpdateDiskSignatures(
14261426 }
14271427
14281428 if (DiskEntry -> LayoutBuffer &&
1429- DiskEntry -> LayoutBuffer -> Signature == 0 )
1429+ DiskEntry -> LayoutBuffer -> Mbr . Signature == 0 )
14301430 {
14311431 SetDiskSignature (List , DiskEntry );
14321432 DiskEntry -> LayoutBuffer -> PartitionEntry [0 ].RewritePartition = TRUE;
@@ -1517,7 +1517,7 @@ AddDiskToList(
15171517 PLIST_ENTRY ListEntry ;
15181518 PBIOSDISKENTRY BiosDiskEntry ;
15191519 ULONG LayoutBufferSize ;
1520- PDRIVE_LAYOUT_INFORMATION NewLayoutBuffer ;
1520+ PDRIVE_LAYOUT_INFORMATION_EX NewLayoutBuffer ;
15211521
15221522 /* Retrieve the drive geometry */
15231523 Status = NtDeviceIoControlFile (FileHandle ,
@@ -1814,7 +1814,7 @@ AddDiskToList(
18141814 NULL ,
18151815 NULL ,
18161816 & Iosb ,
1817- IOCTL_DISK_GET_DRIVE_LAYOUT ,
1817+ IOCTL_DISK_GET_DRIVE_LAYOUT_EX ,
18181818 NULL ,
18191819 0 ,
18201820 DiskEntry -> LayoutBuffer ,
@@ -1853,7 +1853,7 @@ AddDiskToList(
18531853
18541854 if (DiskEntry -> LayoutBuffer -> PartitionEntry [0 ].StartingOffset .QuadPart != 0 &&
18551855 DiskEntry -> LayoutBuffer -> PartitionEntry [0 ].PartitionLength .QuadPart != 0 &&
1856- DiskEntry -> LayoutBuffer -> PartitionEntry [0 ].PartitionType != PARTITION_ENTRY_UNUSED )
1856+ DiskEntry -> LayoutBuffer -> PartitionEntry [0 ].Mbr . PartitionType != PARTITION_ENTRY_UNUSED )
18571857 {
18581858 if ((DiskEntry -> LayoutBuffer -> PartitionEntry [0 ].StartingOffset .QuadPart / DiskEntry -> BytesPerSector ) % DiskEntry -> SectorsPerTrack == 0 )
18591859 {
@@ -2280,7 +2280,7 @@ GetDiskBySignature(
22802280 {
22812281 DiskEntry = CONTAINING_RECORD (Entry , DISKENTRY , ListEntry );
22822282
2283- if (DiskEntry -> LayoutBuffer -> Signature == Signature )
2283+ if (DiskEntry -> LayoutBuffer -> Mbr . Signature == Signature )
22842284 return DiskEntry ; /* Disk found, return it */
22852285 }
22862286
@@ -2546,7 +2546,7 @@ GetPrevPartition(
25462546static inline
25472547BOOLEAN
25482548IsEmptyLayoutEntry (
2549- _In_ PPARTITION_INFORMATION PartitionInfo )
2549+ _In_ PPARTITION_INFORMATION_EX PartitionInfo )
25502550{
25512551 return (PartitionInfo -> StartingOffset .QuadPart == 0 &&
25522552 PartitionInfo -> PartitionLength .QuadPart == 0 );
@@ -2555,7 +2555,7 @@ IsEmptyLayoutEntry(
25552555static inline
25562556BOOLEAN
25572557IsSamePrimaryLayoutEntry (
2558- _In_ PPARTITION_INFORMATION PartitionInfo ,
2558+ _In_ PPARTITION_INFORMATION_EX PartitionInfo ,
25592559 _In_ PPARTENTRY PartEntry )
25602560{
25612561 return ((PartitionInfo -> StartingOffset .QuadPart == GetPartEntryOffsetInBytes (PartEntry )) &&
@@ -2602,7 +2602,7 @@ BOOLEAN
26022602ReAllocateLayoutBuffer (
26032603 IN PDISKENTRY DiskEntry )
26042604{
2605- PDRIVE_LAYOUT_INFORMATION NewLayoutBuffer ;
2605+ PDRIVE_LAYOUT_INFORMATION_EX NewLayoutBuffer ;
26062606 ULONG NewPartitionCount ;
26072607 ULONG CurrentPartitionCount = 0 ;
26082608 ULONG LayoutBufferSize ;
@@ -2654,8 +2654,8 @@ VOID
26542654UpdateDiskLayout (
26552655 IN PDISKENTRY DiskEntry )
26562656{
2657- PPARTITION_INFORMATION PartitionInfo ;
2658- PPARTITION_INFORMATION LinkInfo ;
2657+ PPARTITION_INFORMATION_EX PartitionInfo ;
2658+ PPARTITION_INFORMATION_EX LinkInfo ;
26592659 PLIST_ENTRY ListEntry ;
26602660 PPARTENTRY PartEntry ;
26612661 LARGE_INTEGER HiddenSectors64 ;
@@ -2704,11 +2704,11 @@ UpdateDiskLayout(
27042704
27052705 PartitionInfo -> StartingOffset .QuadPart = GetPartEntryOffsetInBytes (PartEntry );
27062706 PartitionInfo -> PartitionLength .QuadPart = GetPartEntrySizeInBytes (PartEntry );
2707- PartitionInfo -> HiddenSectors = PartEntry -> StartSector .LowPart ;
2707+ PartitionInfo -> Mbr . HiddenSectors = PartEntry -> StartSector .LowPart ;
27082708 PartitionInfo -> PartitionNumber = PartEntry -> PartitionNumber ;
2709- PartitionInfo -> PartitionType = PartEntry -> PartitionType ;
2710- PartitionInfo -> BootIndicator = PartEntry -> BootIndicator ;
2711- PartitionInfo -> RecognizedPartition = IsRecognizedPartition (PartEntry -> PartitionType );
2709+ PartitionInfo -> Mbr . PartitionType = PartEntry -> PartitionType ;
2710+ PartitionInfo -> Mbr . BootIndicator = PartEntry -> BootIndicator ;
2711+ PartitionInfo -> Mbr . RecognizedPartition = IsRecognizedPartition (PartEntry -> PartitionType );
27122712 PartitionInfo -> RewritePartition = TRUE;
27132713 }
27142714
@@ -2747,11 +2747,11 @@ UpdateDiskLayout(
27472747
27482748 PartitionInfo -> StartingOffset .QuadPart = GetPartEntryOffsetInBytes (PartEntry );
27492749 PartitionInfo -> PartitionLength .QuadPart = GetPartEntrySizeInBytes (PartEntry );
2750- PartitionInfo -> HiddenSectors = DiskEntry -> SectorAlignment ;
2750+ PartitionInfo -> Mbr . HiddenSectors = DiskEntry -> SectorAlignment ;
27512751 PartitionInfo -> PartitionNumber = PartEntry -> PartitionNumber ;
2752- PartitionInfo -> PartitionType = PartEntry -> PartitionType ;
2753- PartitionInfo -> BootIndicator = FALSE;
2754- PartitionInfo -> RecognizedPartition = IsRecognizedPartition (PartEntry -> PartitionType );
2752+ PartitionInfo -> Mbr . PartitionType = PartEntry -> PartitionType ;
2753+ PartitionInfo -> Mbr . BootIndicator = FALSE;
2754+ PartitionInfo -> Mbr . RecognizedPartition = IsRecognizedPartition (PartEntry -> PartitionType );
27552755 PartitionInfo -> RewritePartition = TRUE;
27562756
27572757 /* Fill the link entry of the previous partition entry */
@@ -2760,16 +2760,16 @@ UpdateDiskLayout(
27602760 LinkInfo -> StartingOffset .QuadPart = (PartEntry -> StartSector .QuadPart - DiskEntry -> SectorAlignment ) * DiskEntry -> BytesPerSector ;
27612761 LinkInfo -> PartitionLength .QuadPart = (PartEntry -> StartSector .QuadPart + DiskEntry -> SectorAlignment ) * DiskEntry -> BytesPerSector ;
27622762 HiddenSectors64 .QuadPart = PartEntry -> StartSector .QuadPart - DiskEntry -> SectorAlignment - DiskEntry -> ExtendedPartition -> StartSector .QuadPart ;
2763- LinkInfo -> HiddenSectors = HiddenSectors64 .LowPart ;
2763+ LinkInfo -> Mbr . HiddenSectors = HiddenSectors64 .LowPart ;
27642764 LinkInfo -> PartitionNumber = 0 ;
27652765
27662766 /* Extended partition links only use type 0x05, as observed
27672767 * on Windows NT. Alternatively they could inherit the type
27682768 * of the main extended container. */
2769- LinkInfo -> PartitionType = PARTITION_EXTENDED ; // DiskEntry->ExtendedPartition->PartitionType;
2769+ LinkInfo -> Mbr . PartitionType = PARTITION_EXTENDED ; // DiskEntry->ExtendedPartition->PartitionType;
27702770
2771- LinkInfo -> BootIndicator = FALSE;
2772- LinkInfo -> RecognizedPartition = FALSE;
2771+ LinkInfo -> Mbr . BootIndicator = FALSE;
2772+ LinkInfo -> Mbr . RecognizedPartition = FALSE;
27732773 LinkInfo -> RewritePartition = TRUE;
27742774 }
27752775
@@ -2794,11 +2794,11 @@ UpdateDiskLayout(
27942794
27952795 PartitionInfo -> StartingOffset .QuadPart = 0 ;
27962796 PartitionInfo -> PartitionLength .QuadPart = 0 ;
2797- PartitionInfo -> HiddenSectors = 0 ;
2797+ PartitionInfo -> Mbr . HiddenSectors = 0 ;
27982798 PartitionInfo -> PartitionNumber = 0 ;
2799- PartitionInfo -> PartitionType = PARTITION_ENTRY_UNUSED ;
2800- PartitionInfo -> BootIndicator = FALSE;
2801- PartitionInfo -> RecognizedPartition = FALSE;
2799+ PartitionInfo -> Mbr . PartitionType = PARTITION_ENTRY_UNUSED ;
2800+ PartitionInfo -> Mbr . BootIndicator = FALSE;
2801+ PartitionInfo -> Mbr . RecognizedPartition = FALSE;
28022802 PartitionInfo -> RewritePartition = TRUE;
28032803 }
28042804 }
@@ -2818,11 +2818,11 @@ UpdateDiskLayout(
28182818
28192819 PartitionInfo -> StartingOffset .QuadPart = 0 ;
28202820 PartitionInfo -> PartitionLength .QuadPart = 0 ;
2821- PartitionInfo -> HiddenSectors = 0 ;
2821+ PartitionInfo -> Mbr . HiddenSectors = 0 ;
28222822 PartitionInfo -> PartitionNumber = 0 ;
2823- PartitionInfo -> PartitionType = PARTITION_ENTRY_UNUSED ;
2824- PartitionInfo -> BootIndicator = FALSE;
2825- PartitionInfo -> RecognizedPartition = FALSE;
2823+ PartitionInfo -> Mbr . PartitionType = PARTITION_ENTRY_UNUSED ;
2824+ PartitionInfo -> Mbr . BootIndicator = FALSE;
2825+ PartitionInfo -> Mbr . RecognizedPartition = FALSE;
28262826 PartitionInfo -> RewritePartition = TRUE;
28272827 }
28282828 }
@@ -3645,7 +3645,7 @@ SetActivePartition(
36453645 if (OldActivePart )
36463646 {
36473647 OldActivePart -> BootIndicator = FALSE;
3648- OldActivePart -> DiskEntry -> LayoutBuffer -> PartitionEntry [OldActivePart -> PartitionIndex ].BootIndicator = FALSE;
3648+ OldActivePart -> DiskEntry -> LayoutBuffer -> PartitionEntry [OldActivePart -> PartitionIndex ].Mbr . BootIndicator = FALSE;
36493649 OldActivePart -> DiskEntry -> LayoutBuffer -> PartitionEntry [OldActivePart -> PartitionIndex ].RewritePartition = TRUE;
36503650 OldActivePart -> DiskEntry -> Dirty = TRUE;
36513651 }
@@ -3656,7 +3656,7 @@ SetActivePartition(
36563656
36573657 /* Set the new active partition */
36583658 PartEntry -> BootIndicator = TRUE;
3659- PartEntry -> DiskEntry -> LayoutBuffer -> PartitionEntry [PartEntry -> PartitionIndex ].BootIndicator = TRUE;
3659+ PartEntry -> DiskEntry -> LayoutBuffer -> PartitionEntry [PartEntry -> PartitionIndex ].Mbr . BootIndicator = TRUE;
36603660 PartEntry -> DiskEntry -> LayoutBuffer -> PartitionEntry [PartEntry -> PartitionIndex ].RewritePartition = TRUE;
36613661 PartEntry -> DiskEntry -> Dirty = TRUE;
36623662
@@ -3673,7 +3673,7 @@ WritePartitions(
36733673 HANDLE FileHandle ;
36743674 IO_STATUS_BLOCK Iosb ;
36753675 ULONG BufferSize ;
3676- PPARTITION_INFORMATION PartitionInfo ;
3676+ PPARTITION_INFORMATION_EX PartitionInfo ;
36773677 ULONG PartitionCount ;
36783678 PLIST_ENTRY ListEntry ;
36793679 PPARTENTRY PartEntry ;
@@ -3945,7 +3945,7 @@ SetMountedDeviceValue(
39453945 return FALSE;
39463946 }
39473947
3948- MountInfo .Signature = PartEntry -> DiskEntry -> LayoutBuffer -> Signature ;
3948+ MountInfo .Signature = PartEntry -> DiskEntry -> LayoutBuffer -> Mbr . Signature ;
39493949 MountInfo .StartingOffset = GetPartEntryOffsetInBytes (PartEntry );
39503950 Status = NtSetValueKey (KeyHandle ,
39513951 & ValueName ,
@@ -4005,8 +4005,8 @@ SetMBRPartitionType(
40054005 PartEntry -> PartitionType = PartitionType ;
40064006
40074007 DiskEntry -> Dirty = TRUE;
4008- DiskEntry -> LayoutBuffer -> PartitionEntry [PartEntry -> PartitionIndex ].PartitionType = PartitionType ;
4009- DiskEntry -> LayoutBuffer -> PartitionEntry [PartEntry -> PartitionIndex ].RecognizedPartition = IsRecognizedPartition (PartitionType );
4008+ DiskEntry -> LayoutBuffer -> PartitionEntry [PartEntry -> PartitionIndex ].Mbr . PartitionType = PartitionType ;
4009+ DiskEntry -> LayoutBuffer -> PartitionEntry [PartEntry -> PartitionIndex ].Mbr . RecognizedPartition = IsRecognizedPartition (PartitionType );
40104010 DiskEntry -> LayoutBuffer -> PartitionEntry [PartEntry -> PartitionIndex ].RewritePartition = TRUE;
40114011}
40124012
0 commit comments