A.2.2 Supporting SCSI-Specific Functionality

Depending on the nature of its device, an SFD also might (or must) be responsible for the following SCSI-specific functionality:

·Translating data from or into a device-specific format before or after sending a transfer request to lower driver(s) if the device processes data in a nonstandard format

·Setting up IRPs with SRBs for port-driver-supported I/O control requests, for driver-defined I/O control requests, or for pass-through requests, as necessary for its device and sending those IRPs through the class driver to the port driver

·Establishing time-out values for requests

·Supplying one or more IoCompletion routines and, like the underlying SCSI class driver, handling certain SCSI error conditions and retries for device-specific requests that require special handling

In general, an SFD has the same responsibilities as a SCSI class driver for those requests that require device-specific handling. For a discussion of the functionality required of SCSI class drivers, see Section A.1.

The following subsections describe how SFDs provide this SCSI-specific functionality in the context of each standard routine that a SCSI filter driver commonly has.