+
+static VOID
+AtapiScsiSrbToAtapi (PSCSI_REQUEST_BLOCK Srb)
+{
+ DPRINT("AtapiConvertScsiToAtapi() called\n");
+
+ Srb->CdbLength = 12;
+
+ switch (Srb->Cdb[0])
+ {
+ case SCSIOP_FORMAT_UNIT:
+ Srb->Cdb[0] = ATAPI_FORMAT_UNIT;
+ break;
+
+ case SCSIOP_MODE_SELECT:
+ {
+ PATAPI_MODE_SELECT12 AtapiModeSelect;
+ UCHAR Length;
+
+ AtapiModeSelect = (PATAPI_MODE_SELECT12)Srb->Cdb;
+ Length = ((PCDB)Srb->Cdb)->MODE_SELECT.ParameterListLength;
+
+ RtlZeroMemory (Srb->Cdb,
+ MAXIMUM_CDB_SIZE);
+ AtapiModeSelect->OperationCode = ATAPI_MODE_SELECT;
+ AtapiModeSelect->PFBit = 1;
+ AtapiModeSelect->ParameterListLengthMsb = 0;
+ AtapiModeSelect->ParameterListLengthLsb = Length;
+ }
+ break;
+
+ case SCSIOP_MODE_SENSE:
+ {
+ PATAPI_MODE_SENSE12 AtapiModeSense;
+ UCHAR PageCode;
+ UCHAR Length;
+
+ AtapiModeSense = (PATAPI_MODE_SENSE12)Srb->Cdb;
+ PageCode = ((PCDB)Srb->Cdb)->MODE_SENSE.PageCode;
+ Length = ((PCDB)Srb->Cdb)->MODE_SENSE.AllocationLength;
+
+ RtlZeroMemory (Srb->Cdb,
+ MAXIMUM_CDB_SIZE);
+ AtapiModeSense->OperationCode = ATAPI_MODE_SENSE;
+ AtapiModeSense->PageCode = PageCode;
+ AtapiModeSense->ParameterListLengthMsb = 0;
+ AtapiModeSense->ParameterListLengthLsb = Length;
+ }
+ break;
+ }
+}
+