Required and Optional SCSI Miniport Driver Routines

A miniport driver's HwScsiXxx routines can have any name chosen by the driver writer. DriverEntry is a required name.

Every SCSI miniport driver must have at least the following system-defined routines:

Required Routine Description
DriverEntry Initializes the miniport driver
HwScsiFindAdapter Determines how (or whether) driver-supported host bus adapter(s) (HBAs) are configured in the machine
HwScsiInitialize Initializes supported HBA(s)
HwScsiStartIo Starts operations on the miniport's HBA(s) for incoming requests
HwScsiResetBus Handles bus reset requests

Depending on each HBA and the driver designer, SCSI miniport drivers also have some or all of the following system-defined routines:

Routine Description
HwScsiInterrupt Handles HBA-generated interrupts, which is optional if and only if the HBA does not generate interrupts so the miniport driver manages all I/O operations on its HBA by polling. However, using polling exclusively has an adverse effect on a miniport driver's performance and on its HBA's I/O throughput. Such a miniport driver should also have an HwScsiTimer routine.
HwScsiDisableInterruptsCallback and HwScsiEnableInterruptsCallback Handle deferred I/O processing if interrupt-driven I/O operations take a long time.
HwScsiTimer Times operations that require long delays on the HBA, or for any other purpose determined by the driver designer. A miniport driver should have a HwScsiTimer routine if it has no HwScsiInterrupt routine so it can use the HwScsiTimer routine for efficient polling of its HBA.
HwScsiDmaStarted Required if the HBA uses a system DMA controller, to set up an HBA transfer after the system DMA controller has been programmed by the port driver.
HwScsiAdapterState Optional if and only if the HBA has no BIOS or x86-real-mode driver and/or will never run in x86-only Microsoft Windows systems.
HwScsiAdapterControl Required if the miniport driver supports Plug and Play.
HwScsiWmiExecuteMethod Executes a method associated with a data block. This routine is optional.
HwScsiWmiFunctionControl Enables or disables notification of events, and also enables or disables data collection for data blocks that the miniport driver designated as expensive to collect. Optional.
HwScsiWmiQueryDataBlock Obtains either a single instance or all instances of a data block. Required.
HwScsiWmiQueryReginfo Obtains information about the data and event blocks to be registered on behalf of the miniport driver by the SCSI port driver. Required.
HwScsiWmiSetDataBlock Changes all data items in a single instance of a data block. Optional.
HwScsiWmiSetDataItem Changes a single data item in an instance of a data block. Optional.

Each of the preceding miniport driver routines, except DriverEntry, has a name chosen to describe its functionality. Except for DriverEntry, which is a required name for every miniport driver's initial entry point, names for miniport driver routines can be anything the driver writer chooses.

Error Handling in SCSI Miniport Drivers describes error-handling requirements for SCSI miniport drivers.