MCPcopy Create free account
hub / github.com/bobranten/Ext4Fsd / Ext2SetDriveLayout

Function Ext2SetDriveLayout

Ext2Mgr/enumDisk.cpp:649–723  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

647}
648
649NT::NTSTATUS
650Ext2SetDriveLayout(
651 HANDLE Handle,
652 PDRIVE_LAYOUT_INFORMATION_EXT Layout
653 )
654{
655 NT::IO_STATUS_BLOCK ioSb;
656 NT::NTSTATUS status = STATUS_SUCCESS;
657 ULONG dataSize;
658
659 dataSize = FIELD_OFFSET(DRIVE_LAYOUT_INFORMATION_EXT, PartitionEntry);
660 dataSize += sizeof(PARTITION_INFORMATION_EXT) * Layout->PartitionCount;
661
662 if (IsWindows2000()) {
663
664 if (Layout->PartitionStyle != PARTITION_STYLE_MBR) {
665 return STATUS_UNSUCCESSFUL;
666 }
667
668 ULONG newLayoutSize = FIELD_OFFSET(DRIVE_LAYOUT_INFORMATION, PartitionEntry);
669 newLayoutSize += sizeof(PARTITION_INFORMATION) * Layout->PartitionCount;
670
671 PDRIVE_LAYOUT_INFORMATION oldLayout =
672 (PDRIVE_LAYOUT_INFORMATION ) malloc(newLayoutSize);
673 if (!oldLayout) {
674 goto errorout;
675 }
676
677 oldLayout->PartitionCount = Layout->PartitionCount;
678 oldLayout->Signature = Layout->Mbr.Signature;
679
680 for (DWORD i=0; i < oldLayout->PartitionCount; i++) {
681
682 oldLayout->PartitionEntry[i].StartingOffset =
683 Layout->PartitionEntry[i].StartingOffset;
684 oldLayout->PartitionEntry[i].PartitionLength =
685 Layout->PartitionEntry[i].PartitionLength;
686 oldLayout->PartitionEntry[i].PartitionNumber =
687 Layout->PartitionEntry[i].PartitionNumber;
688 oldLayout->PartitionEntry[i].RewritePartition =
689 Layout->PartitionEntry[i].RewritePartition;
690 oldLayout->PartitionEntry[i].PartitionType =
691 Layout->PartitionEntry[i].Mbr.PartitionType;
692 oldLayout->PartitionEntry[i].BootIndicator =
693 Layout->PartitionEntry[i].Mbr.BootIndicator;
694 oldLayout->PartitionEntry[i].RecognizedPartition =
695 Layout->PartitionEntry[i].Mbr.RecognizedPartition;
696 oldLayout->PartitionEntry[i].HiddenSectors =
697 Layout->PartitionEntry[i].Mbr.HiddenSectors;
698 }
699
700 status = NT::ZwDeviceIoControlFile(
701 Handle, NULL, NULL, NULL, &ioSb,
702 IOCTL_DISK_SET_DRIVE_LAYOUT,
703 (PVOID)oldLayout, newLayoutSize,
704 NULL, 0
705 );
706

Callers 1

Ext2SetPartitionTypeFunction · 0.85

Calls 1

IsWindows2000Function · 0.85

Tested by

no test coverage detected