Index: C:/ROS/reactos/drivers/usb/usbstor/scsi.c =================================================================== --- C:/ROS/reactos/drivers/usb/usbstor/scsi.c (revision 57149) +++ C:/ROS/reactos/drivers/usb/usbstor/scsi.c (working copy) @@ -1249,7 +1249,43 @@ return USBSTOR_SendRequest(DeviceObject, Irp, UFI_TEST_UNIT_CMD_LEN, (PUCHAR)&Cmd, 0, NULL, RetryCount); } +NTSTATUS +USBSTOR_SendUnknownRequest( + IN PDEVICE_OBJECT DeviceObject, + IN OUT PIRP Irp, + IN ULONG RetryCount) +{ + PPDO_DEVICE_EXTENSION PDODeviceExtension; + PIO_STACK_LOCATION IoStack; + PSCSI_REQUEST_BLOCK Request; + // + // get current stack location + // + IoStack = IoGetCurrentIrpStackLocation(Irp); + + // + // get request block + // + Request = IoStack->Parameters.Others.Argument1; + + // + // get PDO device extension + // + PDODeviceExtension = (PPDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension; + + // + // check that we're sending to the right LUN + // + ASSERT(Request->Cdb[1] == (PDODeviceExtension->LUN & MAX_LUN)); + + // + // send the request + // + return USBSTOR_SendRequest(DeviceObject, Irp, 12, Request->Cdb, Request->DataTransferLength, Request->DataBuffer, RetryCount); +} + + NTSTATUS USBSTOR_HandleExecuteSCSI( IN PDEVICE_OBJECT DeviceObject, @@ -1366,6 +1402,15 @@ // Status = USBSTOR_SendTestUnit(DeviceObject, Irp, RetryCount); } + else if (pCDB->AsByte[0] == SCSIOP_MECHANISM_STATUS) + { + DPRINT1("SCSIOP_MECHANISM_STATUS\n"); + + // + // Just send it the way it is + // + Status = USBSTOR_SendUnknownRequest(DeviceObject, Irp, RetryCount); + } else { DPRINT1("UNIMPLEMENTED Operation Code %x\n", pCDB->AsByte[0]);