Code: memset(&stScsiCmd, 0, sizeof(stScsiCmd)); memset(bRqBuf, 0, sizeof(bRqBuf)); memset(bCdb, 0, sizeof(bCdb)); bCdb[0] = MTU_REWIND; // Rewind command 01h bCdb[1] = IMMMODE; // Immed bit=0 stScsiCmd.sptd.Length = sizeof(SCSI_PASS_THROUGH_DIRECT); stScsiCmd.sptd.CdbLength = CDB_GROUP0; stScsiCmd.sptd.DataIn = SCSI_IOCTL_DATA_IN; stScsiCmd.sptd.SenseInfoLength = sizeof(stScsiCmd.ucSenseBuf); //RQLEN; stScsiCmd.sptd.DataTransferLength = sizeof(bRqBuf); stScsiCmd.sptd.TimeOutValue = g_stDeviceData.uiScsiTimeOut; stScsiCmd.sptd.DataBuffer = bRqBuf; stScsiCmd.sptd.SenseInfoOffset = offsetof(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER, ucSenseBuf); memcpy(stScsiCmd.sptd.Cdb, bCdb, CDB_GROUP0); //length = sizeof(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER); iResult = DeviceIoControl(hDevHndl, IOCTL_SCSI_PASS_THROUGH_DIRECT, &stScsiCmd, sizeof(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER), &stScsiCmd, sizeof(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER), &returned, FALSE); errCode = GetLastError(); //0 is for failure if ((iResult == 0) || (stScsiCmd.sptd.ScsiStatus != 0)) { return -1; }