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;
}

Last edited by shabbir; 22Mar2007 at 00:08.. Reason: Code formating.