Hi Michal.
I’ve tried to implement some i/o control code.
But as you know, didn’t work on windows 2000.
Would you please check my code, if you are able to get a break for a
while?
The alignment of text is not good though.
case IOCTL_DISK_CHECK_VERIFY:
status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0;
break;
case IOCTL_STORAGE_CHECK_VERIFY:
status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0;
break;
case IOCTL_DISK_FORMAT_TRACKS:
if(io_stack->Parameters.DeviceIoControl.InputBufferLength <
sizeof(FORMAT_PARAMETERS))
{
status = STATUS_INVALID_PARAMETER;
Irp->IoStatus.Information = 0;
break;
}
status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0;
break;
case IOCTL_DISK_FORMAT_TRACKS_EX:
if(io_stack->Parameters.DeviceIoControl.InputBufferLength <
sizeof(FORMAT_EX_PARAMETERS))
{
status = STATUS_INVALID_PARAMETER;
Irp->IoStatus.Information = 0;
break;
}
status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0;
break;
case IOCTL_STORAGE_GET_MEDIA_TYPES_EX:
{
PGET_MEDIA_TYPES mediaTypes = Irp->AssociatedIrp.SystemBuffer;
PDEVICE_MEDIA_INFO mediaInfo = &mediaTypes->MediaInfo[0];
if(io_stack->Parameters.DeviceIoControl.OutputBufferLength <
sizeof(GET_MEDIA_TYPES))
{
status = STATUS_BUFFER_TOO_SMALL;
Irp->IoStatus.Information = 0;
break;
}
mediaTypes->DeviceType = FILE_DEVICE_DISK;
mediaTypes->MediaInfoCount = 1;
mediaInfo->DeviceSpecific.DiskInfo.Cylinders.QuadPart =
device_extension->disk_geometry.Cylinders.QuadPart;
mediaInfo->DeviceSpecific.DiskInfo.TracksPerCylinder =
device_extension->disk_geometry.TracksPerCylinder;
mediaInfo->DeviceSpecific.DiskInfo.SectorsPerTrack =
device_extension->disk_geometry.SectorsPerTrack;
mediaInfo->DeviceSpecific.DiskInfo.BytesPerSector =
device_extension->disk_geometry.BytesPerSector;
mediaInfo->DeviceSpecific.RemovableDiskInfo.NumberMediaSides = 1;
mediaInfo->DeviceSpecific.DiskInfo.MediaCharacteristics =
(MEDIA_CURRENTLY_MOUNTED | MEDIA_READ_WRITE);
mediaInfo->DeviceSpecific.DiskInfo.MediaType = FixedMedia;
status = STATUS_SUCCESS;
Irp->IoStatus.Information = sizeof(DEVICE_MEDIA_INFO);
break;
}
case IOCTL_DISK_GET_DRIVE_LAYOUT:
{
PDRIVE_LAYOUT_INFORMATION DriveLayout =
(PDRIVE_LAYOUT_INFORMATION)Irp->AssociatedIrp.SystemBuffer;
ULONG TotalSize = 0;
NTSTATUS Status;
DriveLayout = (PDRIVE_LAYOUT_INFORMATION)
Irp->AssociatedIrp.SystemBuffer;
DriveLayout->PartitionCount = 1;
DriveLayout->Signature = 0;
DriveLayout->PartitionEntry->BootIndicator = FALSE;
DriveLayout->PartitionEntry->RecognizedPartition = TRUE;
DriveLayout->PartitionEntry->RewritePartition = FALSE;
DriveLayout->PartitionEntry->PartitionNumber = 0;
DriveLayout->PartitionEntry->StartingOffset.QuadPart = (ULONGLONG) 0;
DriveLayout->PartitionEntry->PartitionLength.QuadPart =
Extension->partition_information.PartitionLength.QuadPart;
DriveLayout->PartitionEntry->HiddenSectors = 0;
DriveLayout->PartitionEntry->PartitionType = 0;
Irp->IoStatus.Information = sizeof(PDRIVE_LAYOUT_INFORMATION);
break;
}
case IOCTL_DISK_SET_DRIVE_LAYOUT:
status = STATUS_SUCCESS;
Irp->IoStatus.Information =
io_stack->Parameters.DeviceIoControl.InputBufferLength;
break;
case IOCTL_DISK_GET_MEDIA_TYPES:
status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0;
break;
case IOCTL_DISK_INTERNAL_SET_VERIFY:
status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0;
break;
case IOCTL_DISK_INTERNAL_CLEAR_VERIFY:
status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0;
break;
case IOCTL_STORAGE_MEDIA_REMOVAL:
status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0;
break;
case IOCTL_STORAGE_EJECT_MEDIA:
status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0;
break;
case IOCTL_STORAGE_GET_MEDIA_TYPES:
status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0;
break;
case IOCTL_DISK_MEDIA_REMOVAL:
status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0;
break;
You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com