Storport's SRB Interface with the Storage Class Driver
Storage class drivers and other higher-level components communicate with the Storport driver by building SCSI Request Blocks (SRBs). An SRB contains a SCSI command descriptor block (CDB) and a pointer to the data buffer that is to be used to transfer data to or from the device (if any). It may contain a pointer to a sense buffer that is used to hold SCSI sense data in the event the SCSI command fails with Check Condition status. For more information about SRBs, see SCSI_REQUEST_BLOCK. Storage class drivers pass the SRBs that they create to Storport in an IRP with the MajorFunction member set to IRP_MJ_SCSI. For a description of the steps that a storage class driver must take to build an SRB before passing it to a port driver, see Storage Class Driver's BuildRequest Routine.
Before forwarding an SRB down the stack, Storport sets certain values in the SRB, such as the path, the target number, and the logical unit number of the target device.
Unlike other port drivers, such as the system-supplied port drivers for the IDE/ATAPI and IEEE 1394 buses, Storport does not have to translate the command descriptor block (CDB) in the SRBs that it receives into a different format before forwarding it to the underlying adapter. Storport simply adds some target-specific information to the SRB and passes it to the miniport driver with the CDB unaltered. Therefore, Storport simply passes SRBs that contain CDBs down the stack.
For this reason, most aspects of the SRB interface between the storage class driver and Storport are covered in the general documentation for storage class and storage miniport drivers and their accompanying reference materials. For a list of sections related to the SRB interface between the storage class driver and the Storport-miniport driver pair, see Storport's Interface with Storport Miniport Drivers.