574{
579
581
583 {
587 }
588
590 {
591
593 {
595 {
597 break;
598 }
599
601
602
604 {
607 break;
608 }
609
611
616 .HiddenSectors = partExt->
Mbr.HiddenSectors,
618 .BootIndicator = partExt->
Mbr.BootIndicator,
619 .RecognizedPartition = partExt->
Mbr.RecognizedPartition,
620 .RewritePartition =
FALSE,
621 };
622
624
625 Irp->IoStatus.Information =
sizeof(*partInfo);
627 break;
628 }
630 {
632 {
634 break;
635 }
636
638
640
645 .PartitionStyle = fdoExtension->
DiskData.PartitionStyle,
646 .RewritePartition =
FALSE,
647 };
648
650 {
653 .HiddenSectors = partExt->
Mbr.HiddenSectors,
654 .BootIndicator = partExt->
Mbr.BootIndicator,
655 .RecognizedPartition = partExt->
Mbr.RecognizedPartition,
656 };
657 }
658 else
659 {
662 .PartitionId = partExt->
Gpt.PartitionId,
663 .Attributes = partExt->
Gpt.Attributes,
664 };
665
669 }
670
672
673 Irp->IoStatus.Information =
sizeof(*partInfoEx);
675 break;
676 }
678 {
681 {
683 break;
684 }
685
687
688
690 fdoExtension->
DiskData.BytesPerSector,
693
695 {
697 }
698
700
701 Irp->IoStatus.Information = 0;
702 break;
703 }
705 {
706 PSET_PARTITION_INFORMATION_EX inputBuffer =
Irp->AssociatedIrp.SystemBuffer;
708 {
710 break;
711 }
712
714
715
718 inputBuffer);
719
721 {
723 {
724 partExt->
Mbr.PartitionType = inputBuffer->Mbr.PartitionType;
725 }
726 else
727 {
728 partExt->
Gpt.PartitionType = inputBuffer->Gpt.PartitionType;
729 partExt->
Gpt.PartitionId = inputBuffer->Gpt.PartitionId;
730 partExt->
Gpt.Attributes = inputBuffer->Gpt.Attributes;
731
733 inputBuffer->Gpt.Name,
734 sizeof(partExt->
Gpt.Name));
735 }
736 }
737
739
740 Irp->IoStatus.Information = 0;
741 break;
742 }
744 {
747 {
749 break;
750 }
751
753
755
757
759 Irp->IoStatus.Information =
sizeof(*lengthInfo);
760 break;
761 }
763 {
766 {
768 break;
769 }
770
771
774 }
776 {
779
781 break;
782 }
784 {
787 {
789 break;
790 }
791
793
797
799
801 Irp->IoStatus.Information =
sizeof(*deviceNumber);
802 break;
803 }
805 {
807 }
808
810 {
812
813
815 {
817 break;
818 }
819
821
822
823
824
827 .Extents = {{
828 .DiskNumber = fdoExtension->
DiskData.DeviceNumber,
831 }}
832 };
833
835
837 Irp->IoStatus.Information =
sizeof(*volExts);
838 break;
839 }
841 {
844 {
846 break;
847 }
848
850
855
857
859 Irp->IoStatus.Information =
sizeof(*volNum);
860 break;
861 }
863 {
864
865
866
867
868
870 break;
871 }
873 {
875 break;
876 }
878 {
881 {
883 break;
884 }
885
886
888 {
890 break;
891 }
892
894
896 Irp->IoStatus.Information =
sizeof(*gptAttrs);
897 break;
898 }
899
901 {
903
905 {
907 break;
908 }
909
911
912
914 {
915 Irp->IoStatus.Information =
sizeof(
USHORT);
917 break;
918 }
919
921
923 Irp->IoStatus.Information =
sizeof(
USHORT) +
name->NameLength;
924 break;
925 }
927 {
932
933
935 {
937 break;
938 }
939
941
945
946
949 {
951 }
953 {
955 }
956 else
957 {
958 if (!InterfaceName->Buffer || !InterfaceName->Length)
959 {
962 break;
963 }
965 }
966
967
969 {
971 Irp->IoStatus.Information = headerSize;
973 break;
974 }
975
976
977
978
979
980
981
982
983
984
985
986
987
990 {
991 basicVolId->
Mbr.Signature = fdoExtension->
DiskData.Mbr.Signature;
993 }
995 {
997 basicVolId->
Gpt.PartitionGuid = partExt->
Gpt.PartitionId;
998 }
999 else
1000 {
1002 InterfaceName->Buffer,
1004 }
1005
1007
1010 break;
1011 }
1015#if (NTDDI_VERSION >= NTDDI_WS03)
1016
1017
1020#endif
1023 {
1024 WARN(
"Ignored MountMgr notification: 0x%lX\n",
1027 break;
1028 }
1029 default:
1031 }
1032
1036}
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
NTSTATUS FASTCALL IoSetPartitionInformation(IN PDEVICE_OBJECT DeviceObject, IN ULONG SectorSize, IN ULONG PartitionNumber, IN ULONG PartitionType)
#define IOCTL_DISK_VERIFY
#define STATUS_NOT_IMPLEMENTED
#define IOCTL_DISK_GET_PARTITION_INFO_EX
NTSTATUS NTAPI IoSetPartitionInformationEx(IN PDEVICE_OBJECT DeviceObject, IN ULONG PartitionNumber, IN PSET_PARTITION_INFORMATION_EX PartitionInfo)
DRIVER_DISPATCH ForwardIrpAndForget
#define IOCTL_MOUNTDEV_LINK_CREATED
#define IOCTL_MOUNTDEV_QUERY_DEVICE_NAME
#define IOCTL_MOUNTDEV_QUERY_SUGGESTED_LINK_NAME
#define IOCTL_MOUNTDEV_QUERY_STABLE_GUID
struct _PARTITION_INFORMATION_EX PARTITION_INFORMATION_EX
#define IOCTL_DISK_GET_LENGTH_INFO
#define MOUNTDEVCONTROLTYPE
#define IOCTL_MOUNTDEV_QUERY_UNIQUE_ID
#define IOCTL_MOUNTDEV_UNIQUE_ID_CHANGE_NOTIFY
struct _PARTITION_INFORMATION_MBR PARTITION_INFORMATION_MBR
#define IOCTL_MOUNTDEV_LINK_DELETED
struct _PARTITION_INFORMATION_GPT PARTITION_INFORMATION_GPT
#define CTL_CODE(DeviceType, Function, Method, Access)
#define IOCTL_DISK_SET_PARTITION_INFO
#define IOCTL_DISK_SET_PARTITION_INFO_EX
struct _PARTITION_INFORMATION PARTITION_INFORMATION
#define IOCTL_DISK_GET_PARTITION_INFO
#define IOCTL_DISK_UPDATE_PROPERTIES
#define IOCTL_STORAGE_GET_DEVICE_NUMBER
#define IOCTL_STORAGE_MEDIA_REMOVAL
#define IOCTL_VOLUME_QUERY_VOLUME_NUMBER
#define IOCTL_VOLUME_GET_GPT_ATTRIBUTES
struct _VOLUME_DISK_EXTENTS VOLUME_DISK_EXTENTS
#define IOCTL_VOLUME_ONLINE
#define IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS
#define IOCTL_VOLUME_IS_PARTITION
#define IoCompleteRequest
#define STATUS_DEVICE_DOES_NOT_EXIST
union _BASIC_VOLUME_UNIQUE_ID * PBASIC_VOLUME_UNIQUE_ID
FORCEINLINE VOID PartMgrReleaseLayoutLock(_In_ PFDO_EXTENSION FDOExtension)
FORCEINLINE VOID PartMgrAcquireLayoutLock(_In_ PFDO_EXTENSION FDOExtension)
FORCEINLINE BOOLEAN VerifyIrpInBufferSize(_In_ PIRP Irp, _In_ SIZE_T Size)
#define DMIO_ID_SIGNATURE
FORCEINLINE BOOLEAN VerifyIrpOutBufferSize(_In_ PIRP Irp, _In_ SIZE_T Size)
VOID NTAPI IoInvalidateDeviceRelations(IN PDEVICE_OBJECT DeviceObject, IN DEVICE_RELATION_TYPE Type)
#define STATUS_BUFFER_TOO_SMALL
#define STATUS_BUFFER_OVERFLOW
PDEVICE_OBJECT PhysicalDiskDO
struct _FDO_EXTENSION::@1334 DiskData
PDEVICE_OBJECT LowerDevice
UNICODE_STRING DiskInterfaceName
struct _IO_STACK_LOCATION::@1584::@1585 DeviceIoControl
union _IO_STACK_LOCATION::@1584 Parameters
UNICODE_STRING VolumeInterfaceName
ULONG NumberOfDiskExtents
WCHAR VolumeManagerName[8]
#define FIELD_OFFSET(t, f)
#define RtlMoveMemory(Destination, Source, Length)
#define STATUS_INVALID_DEVICE_REQUEST
#define STATUS_INVALID_PARAMETER
#define STATUS_INFO_LENGTH_MISMATCH
struct _BASIC_VOLUME_UNIQUE_ID::@1332 Mbr
struct _BASIC_VOLUME_UNIQUE_ID::@1333 Gpt
_In_ PDEVICE_OBJECT DeviceObject