SCSI_PASS_THROUGH

Q1: Does SCSI_PASS_THROUGH still work under Win2000?

If yes, why does this initial INQ cmd (after successfully opening
‘scsi2:’) fail with INCORRECT_FUNCTION?

// prepare SPTI for Inquiry command
psptdwb->sptd.Length = sizeof(SCSI_PASS_THROUGH_DIRECT);
psptdwb->sptd.PathId = 0;
psptdwb->sptd.CdbLength = CDB6GENERIC_LENGTH;
psptdwb->sptd.SenseInfoLength = 32;
psptdwb->sptd.DataIn = SCSI_IOCTL_DATA_IN;
psptdwb->sptd.DataTransferLength = sizeof(InqData);
psptdwb->sptd.TimeOutValue = 2;
psptdwb->sptd.DataBuffer = InqData;
psptdwb->sptd.SenseInfoOffset = offsetof
(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER, ucSenseBuf);
ZeroMemory(&psptdwb->sptd.Cdb[0], 16);
psptdwb->sptd.Cdb[0] = 0x12;
psptdwb->sptd.Cdb[1] = psptdwb->sptd.Lun << 5;
psptdwb->sptd.Cdb[4] = sizeof(InqData);

length = sizeof(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER);
status = DeviceIoControl(
fileHandle,
IOCTL_SCSI_PASS_THROUGH_DIRECT,
psptdwb,
length,
psptdwb,
length,
&returned,
FALSE
);

>> FAILS WITH INCORRECT FUNCTION - ???

Bill Casey

The difference is in access flags when opening a scsi port.


??: Bill Casey[SMTP:xxxxx@advstor.com]
???: NT Developers Interest List
???: 26 ??? 2000 ?. 21:09
???: NT Developers Interest List
???: [ntdev] SCSI_PASS_THROUGH

Q1: Does SCSI_PASS_THROUGH still work under Win2000?

If yes, why does this initial INQ cmd (after successfully opening
‘scsi2:’) fail with INCORRECT_FUNCTION?

// prepare SPTI for Inquiry command
psptdwb->sptd.Length = sizeof(SCSI_PASS_THROUGH_DIRECT);
psptdwb->sptd.PathId = 0;
psptdwb->sptd.CdbLength = CDB6GENERIC_LENGTH;
psptdwb->sptd.SenseInfoLength = 32;
psptdwb->sptd.DataIn = SCSI_IOCTL_DATA_IN;
psptdwb->sptd.DataTransferLength = sizeof(InqData);
psptdwb->sptd.TimeOutValue = 2;
psptdwb->sptd.DataBuffer = InqData;
psptdwb->sptd.SenseInfoOffset = offsetof
(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER, ucSenseBuf);
ZeroMemory(&psptdwb->sptd.Cdb[0], 16);
psptdwb->sptd.Cdb[0] = 0x12;
psptdwb->sptd.Cdb[1] = psptdwb->sptd.Lun << 5;
psptdwb->sptd.Cdb[4] = sizeof(InqData);

length = sizeof(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER);
status = DeviceIoControl(
fileHandle,
IOCTL_SCSI_PASS_THROUGH_DIRECT,
psptdwb,
length,
psptdwb,
length,
&returned,
FALSE
);

>> FAILS WITH INCORRECT FUNCTION - ???

Bill Casey


You are currently subscribed to ntdev as: xxxxx@paragon.ru
To unsubscribe send a blank email to $subst(‘Email.Unsub’)

Hi:

Yes is still works under windows 2000. The first thing to check
is the access level you choose when creating the handle. Windows 2000
scsi pass through must have a specific access level set. Both
GENERIC_READ and GENERIC_WRITE must be set.

-----Original Message-----
From: Bill Casey [SMTP:xxxxx@advstor.com]
Sent: Friday, May 26, 2000 10:21 AM
To: David Jones; Wyler Furgeson
Subject: [ntdev] SCSI_PASS_THROUGH

Q1: Does SCSI_PASS_THROUGH still work under Win2000?

If yes, why does this initial INQ cmd (after successfully opening
‘scsi2:’) fail with INCORRECT_FUNCTION?

// prepare SPTI for Inquiry command
psptdwb->sptd.Length = sizeof(SCSI_PASS_THROUGH_DIRECT);
psptdwb->sptd.PathId = 0;
psptdwb->sptd.CdbLength = CDB6GENERIC_LENGTH;
psptdwb->sptd.SenseInfoLength = 32;
psptdwb->sptd.DataIn = SCSI_IOCTL_DATA_IN;
psptdwb->sptd.DataTransferLength = sizeof(InqData);
psptdwb->sptd.TimeOutValue = 2;
psptdwb->sptd.DataBuffer = InqData;
psptdwb->sptd.SenseInfoOffset = offsetof
(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER, ucSenseBuf);
ZeroMemory(&psptdwb->sptd.Cdb[0], 16);
psptdwb->sptd.Cdb[0] = 0x12;
psptdwb->sptd.Cdb[1] = psptdwb->sptd.Lun << 5;
psptdwb->sptd.Cdb[4] = sizeof(InqData);

length = sizeof(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER);
status = DeviceIoControl(
fileHandle,
IOCTL_SCSI_PASS_THROUGH_DIRECT,
psptdwb,
length,
psptdwb,
length,
&returned,
FALSE
);

>>> FAILS WITH INCORRECT FUNCTION - ???

Bill Casey


You are currently subscribed to ntdev as: xxxxx@Charismac.com
To unsubscribe send a blank email to $subst(‘Email.Unsub’)