Author: pschweitzer Date: Wed Oct 29 18:25:30 2014 New Revision: 65105
URL: http://svn.reactos.org/svn/reactos?rev=65105&view=rev Log: [DISK] Revert r65097 and r65090. Thanks to r65104, now the FSCTLs go to the right place: the FSDs!
Thanks to Thomas for pointing out that NTFSinfo was really talking with the FSD on Windows and not to disk.sys
CORE-8725
Modified: trunk/reactos/drivers/storage/class/disk/disk.c
Modified: trunk/reactos/drivers/storage/class/disk/disk.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/storage/class/disk/... ============================================================================== --- trunk/reactos/drivers/storage/class/disk/disk.c [iso-8859-1] (original) +++ trunk/reactos/drivers/storage/class/disk/disk.c [iso-8859-1] Wed Oct 29 18:25:30 2014 @@ -384,11 +384,6 @@ InitializationData.ClassDeviceControl = ScsiDiskDeviceControl; InitializationData.ClassShutdownFlush = ScsiDiskShutdownFlush; InitializationData.ClassCreateClose = NULL; - - // - // HACK! Please check below to the implementation of the function - // - DriverObject->MajorFunction[IRP_MJ_FILE_SYSTEM_CONTROL] = ScsiDiskFileSystemControl;
// // Call the class init routine @@ -5214,116 +5209,3 @@
} // end UpdateDeviceObjects()
-// -// This function is supposed only to support NTFS tools -// from M. Russinovich. This is kind of huge hack and is -// totally undocumented :-). -// -NTSTATUS -NtfsRussinovichism(PDEVICE_OBJECT DeviceObject, - PIRP Irp) -{ -#define FSCTL_GET_VOLUME_INFORMATION 0x90064 - typedef struct { - LARGE_INTEGER SerialNumber; - LARGE_INTEGER NumberOfSectors; - LARGE_INTEGER TotalClusters; - LARGE_INTEGER FreeClusters; - LARGE_INTEGER Reserved; - ULONG BytesPerSector; - ULONG BytesPerCluster; - ULONG BytesPerMFTRecord; - ULONG ClustersPerMFTRecord; - LARGE_INTEGER MFTLength; - LARGE_INTEGER MFTStart; - LARGE_INTEGER MFTMirrorStart; - LARGE_INTEGER MFTZoneStart; - LARGE_INTEGER MFTZoneEnd; - } NTFS_VOLUME_DATA_BUFFER, *PNTFS_VOLUME_DATA_BUFFER; - - PIO_STACK_LOCATION Stack; - NTSTATUS Status; - PDEVICE_EXTENSION deviceExtension = DeviceObject->DeviceExtension; - PDISK_DATA diskData; - - DPRINT1("NtfsRussinovichism(%p, %p)\n", DeviceObject, Irp); - - Stack = IoGetCurrentIrpStackLocation(Irp); - - switch (Stack->Parameters.FileSystemControl.FsControlCode) - { - case FSCTL_GET_VOLUME_INFORMATION: - // - // Check we received something we understand - // - if (Stack->Parameters.FileSystemControl.OutputBufferLength < sizeof(NTFS_VOLUME_DATA_BUFFER) || - Irp->UserBuffer == NULL) - { - DPRINT1("Invalid output! %d %p\n", Stack->Parameters.FileSystemControl.OutputBufferLength, Irp->UserBuffer); - Status = STATUS_INVALID_PARAMETER; - break; - } - - // - // Now, quickly check we are supposed to have a NTFS volume - // - diskData = (PDISK_DATA)(deviceExtension + 1); - if (diskData->PartitionType != PARTITION_IFS) - { - DPRINT1("Invalid partition type! %x\n", diskData->PartitionType); - Status = STATUS_INVALID_PARAMETER; - break; - } - - UNIMPLEMENTED; - Status = STATUS_NOT_IMPLEMENTED; - break; - - default: - Status = STATUS_INVALID_DEVICE_REQUEST; - break; - } - - return Status; -#undef FSCTL_GET_VOLUME_INFORMATION -} - -// -// Hack: this function is not supposed to be implemented -// Even though it's required to enable some M. Russinovich -// to directly request disks so that they can dump NTFS data -// without going through the driver. -// We don't expect doing more from here, hence the limited -// implementation and support. -// -NTSTATUS -NTAPI -ScsiDiskFileSystemControl(PDEVICE_OBJECT DeviceObject, - PIRP Irp) -{ - PIO_STACK_LOCATION Stack; - NTSTATUS Status; - - DPRINT1("ScsiDiskFileSystemControl(%p, %p)\n", DeviceObject, Irp); - - Stack = IoGetCurrentIrpStackLocation(Irp); - - switch (Stack->MinorFunction) - { - case IRP_MN_USER_FS_REQUEST: - Status = NtfsRussinovichism(DeviceObject, Irp); - break; - - default: - DPRINT("MinorFunction %d\n", Stack->MinorFunction); - Status = STATUS_INVALID_DEVICE_REQUEST; - break; - } - - Irp->IoStatus.Status = Status; - Irp->IoStatus.Information = 0; - - IoCompleteRequest(Irp, IO_NO_INCREMENT); - - return Status; -}