Hi all,
I have written a SCSI Miniport Driver for a Fibre Channel card. The
driver is not fully done as yet but I can detect the drives, let windows
create a volume and also format the drives with the NTFS file system.
When I reactivate the drives - i.e., through windows (Control
Panel/Administrative Tools/Computer Management/Storage), I observed that
I was occasionally getting a Write(10) SCSI Command - 0x2Ah with
DataBuffer pointer in the SRB set to NULL but the DataBufferLength set
to a non zero value.
If I complete such a request with STATUS_SRB_INVALID_REQUEST Windows
complains about Delayed Write Failed. If I complete the request without
success windows complains about Delayed Write Failures. However, if I
allow the driver to go ahead with the request which completes
successfully Windows does not complain about Delayed Write Failures at
all. I can also do some write and reads from the drives and I don’t see
the bubble popping up.
I am confused about this request, as letting the driver to go ahead with
the request causes the DMA engine to read data of length
DataBufferLength from 0x00000000 address location.
At this point, I am unsure whether it is correct to assume that the
request is correct and I should just continue as it is, or whether
something is seriously wrong in the driver, or whether I should just
complete the request successfully without actually acting on it.
I would be grateful if someone could provide some advice on what I
should be looking at to better understand this issue or direct me
towards any documentation which I should probably read up.
Thanks in advance for your explanations.
-Amit
Following is the CDB for the request and SRB members - DataBuffer,
DataTransferLength
pSrb = 0x85b34fbc TgtId = 14 Cmd = 42 DataBuffer = 0x00000000 DataLength
= 4096
SRB = 0x85b34fbc TgtId = 14 Lun = 0 CDB Bytes:
[0] = 42 [1] = 0 [2] = 0 [3] = 129
[4] = 228 [5] = 63 [6] = 0 [7] = 0
[8] = 8 [9] = 0 [10] = 0 [11] = 0
[12] = 0 [13] = 0 [14] = 0 [15] = 0
pSrb = 0x85b34fbc TgtId = 14 Cmd = 42 DataBuffer = 0x00000000 DataLength
= 1024
SRB = 0x85b34fbc TgtId = 14 Lun = 0 CDB Bytes:
[0] = 42 [1] = 0 [2] = 0 [3] = 129
[4] = 230 [5] = 63 [6] = 0 [7] = 0
[8] = 2 [9] = 0 [10] = 0 [11] = 0
[12] = 0 [13] = 0 [14] = 0 [15] = 0