// srb.h
typedef struct _HW_INITIALIZATION_DATA {
ULONG HwInitializationDataSize;
INTERFACE_TYPE AdapterInterfaceType;
PHW_INITIALIZE HwInitialize;
PHW_STARTIO HwStartIo;
PHW_INTERRUPT HwInterrupt;
PHW_FIND_ADAPTER HwFindAdapter;
PHW_RESET_BUS HwResetBus;
PHW_DMA_STARTED HwDmaStarted;
PHW_ADAPTER_STATE HwAdapterState;
ULONG DeviceExtensionSize;
ULONG SpecificLuExtensionSize;
ULONG SrbExtensionSize;
ULONG NumberOfAccessRanges;
PVOID Reserved;
BOOLEAN MapBuffers;
BOOLEAN NeedPhysicalAddresses;
BOOLEAN TaggedQueuing;
BOOLEAN AutoRequestSense;
BOOLEAN MultipleRequestPerLu;
BOOLEAN ReceiveEvent;
USHORT VendorIdLength;
PVOID VendorId;
union {
USHORT ReservedUshort;
USHORT PortVersionFlags;
};
USHORT DeviceIdLength;
PVOID DeviceId;
PHW_ADAPTER_CONTROL HwAdapterControl;
} HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA;
View the official Windows Driver Kit DDI reference
// storport.h
typedef struct _HW_INITIALIZATION_DATA {
ULONG HwInitializationDataSize;
INTERFACE_TYPE AdapterInterfaceType;
PHW_INITIALIZE HwInitialize;
PHW_STARTIO HwStartIo;
PHW_INTERRUPT HwInterrupt;
PVOID HwFindAdapter;
PHW_RESET_BUS HwResetBus;
PHW_DMA_STARTED HwDmaStarted;
PHW_ADAPTER_STATE HwAdapterState;
ULONG DeviceExtensionSize;
ULONG SpecificLuExtensionSize;
ULONG SrbExtensionSize;
ULONG NumberOfAccessRanges;
PVOID Reserved;
UCHAR MapBuffers;
BOOLEAN NeedPhysicalAddresses;
BOOLEAN TaggedQueuing;
BOOLEAN AutoRequestSense;
BOOLEAN MultipleRequestPerLu;
BOOLEAN ReceiveEvent;
USHORT VendorIdLength;
PVOID VendorId;
union {
USHORT ReservedUshort;
USHORT PortVersionFlags;
};
USHORT DeviceIdLength;
PVOID DeviceId;
PHW_ADAPTER_CONTROL HwAdapterControl;
PHW_BUILDIO HwBuildIo;
PHW_FREE_ADAPTER_RESOURCES HwFreeAdapterResources;
PHW_PROCESS_SERVICE_REQUEST HwProcessServiceRequest;
PHW_COMPLETE_SERVICE_IRP HwCompleteServiceIrp;
PHW_INITIALIZE_TRACING HwInitializeTracing;
PHW_CLEANUP_TRACING HwCleanupTracing;
PHW_TRACING_ENABLED HwTracingEnabled;
ULONG FeatureSupport;
ULONG SrbTypeFlags;
ULONG AddressTypeFlags;
ULONG Reserved1;
union {
PHW_UNIT_CONTROL HwUnitControl;
PHW_NAMESPACE_CONTROL HwNamespaceControl;
};
} HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA;
View the official Windows Driver Kit DDI reference
// strmini.h
typedef struct _HW_INITIALIZATION_DATA {
union {
ULONG HwInitializationDataSize;
struct {
USHORT SizeOfThisPacket;
USHORT StreamClassVersion;
};
};
ULONG HwInitializationDataSize;
PHW_INTERRUPT HwInterrupt;
PHW_RECEIVE_DEVICE_SRB HwReceivePacket;
PHW_CANCEL_SRB HwCancelPacket;
PHW_REQUEST_TIMEOUT_HANDLER HwRequestTimeoutHandler;
ULONG DeviceExtensionSize;
ULONG PerRequestExtensionSize;
ULONG PerStreamExtensionSize;
ULONG FilterInstanceExtensionSize;
BOOLEAN BusMasterDMA;
BOOLEAN Dma24BitAddresses;
ULONG BufferAlignment;
BOOLEAN TurnOffSynchronization;
ULONG DmaBufferSize;
ULONG NumNameExtensions;
PWCHAR *NameExtensionArray;
ULONG Reserved[2];
} HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA;
View the official Windows Driver Kit DDI reference
No description available.
Each SCSI miniport driver's DriverEntry routine must initialize with zeros and, then, fill in the relevant HW_INITIALIZATION_DATA (SCSI) information for the OS-specific port driver.
Note The SCSI port driver and SCSI miniport driver models may be altered or unavailable in the future. Instead, we recommend using the Storport driver and Storport miniport driver models.
HwInitializationDataSize
Specifies the size of this structure in bytes, as returned by sizeof(). In effect, this member indicates the version of this structure being used by the miniport driver. A miniport driver's DriverEntry routine should set this member's value for the port driver.
AdapterInterfaceType
Specifies the type of I/O bus to which the HBA is connected, which can be one of the following: Internal, Isa, Eisa, MicroChannel, TurboChannel, or PCIBus. However, additional types of buses will be supported in future. The upper bound on the types of buses supported is always MaximumInterfaceType.
If this is set to PCIBus, the miniport driver must supply values for the VendorIdLength, VendorId, DeviceIdLength, and DeviceId members, described later.
HwInitialize
Pointer to the miniport driver's HwScsiInitialize routine, which is a required entry point for all miniport drivers. The prototype for this routine is PHW_INITIALIZE.
HwStartIo
Pointer to the miniport driver's HwScsiStartIo routine, which is a required entry point for all miniport drivers. The prototype for this routine is PHW_STARTIO.
HwInterrupt
Pointer to the miniport driver's HwScsiInterrupt routine, which is a required entry point for any miniport driver of an HBA that generates interrupts. Set this to NULL if the miniport driver needs no ISR. The prototype for this routine is PHW_INTERRUPT.
HwFindAdapter
Pointer to the miniport driver's HwScsiFindAdapter routine, which is a required entry point for all miniport drivers. The prototype for this routine is PHW_FIND_ADAPTER.
HwResetBus
Pointer to the miniport driver's HwScsiResetBus routine, which is a required entry point for all miniport drivers. The prototype for this routine is PHW_RESET_BUS.
HwDmaStarted
Pointer to the miniport driver's HwScsiDmaStarted routine if its HBA uses system DMA, that is, a system DMA controller. Set this to NULL if the HBA is a bus master or uses PIO. The prototype for this routine is PHW_DMA_STARTED.
HwAdapterState
Pointer to the miniport driver's HwScsiAdapterState routine, which is a required entry point for miniport drivers of HBAs with BIOSs that are linked with an operating system-dependent, x86-platform-only port driver that must switch between x86 protected and real processor modes. If the miniport driver needs no HwScsiAdapterState routine, set this member to NULL. A miniport driver for an HBA that has a BIOS must have a HwScsiAdapterState routine in order to be compatible with the x86-only port driver and portable to an x86-only operating system environment. The prototype for this routine is PHW_ADAPTER_STATE.
DeviceExtensionSize
Specifies the size in bytes required by the miniport driver for its per-HBA device extension. A miniport driver uses its device extension as storage for driver-determined HBA information. The OS-specific port driver initializes each device extension it allocates with zeros, and passes a pointer to the HBA-specific device extension in every call to a miniport driver except to its DriverEntry routine. The given size does not include any miniport driver-requested per-logical-unit storage, described next.
SpecificLuExtensionSize
Specifies the size in bytes required by the miniport driver for its per-logical-unit storage, if any. A miniport driver can use its LU extensions as storage for driver-determined logical-unit information about SCSI peripherals on the bus. The OS-specific port driver initializes each LU extension it allocates with zeros. Leave this member set to zero if the miniport driver does not maintain per-LU information for which it requires storage. This value is based on the assumption that the HBA is able to receive 32-bit addresses, regardless of what the controller can actually support. If additional space is needed in the LUN or SRB extensions to handle 64-bit addresses, then appropriate adjustments must be made to this value before using it with routines such as ScsiPortGetUncachedExtension.
SrbExtensionSize
Specifies the size in bytes required by the miniport driver for its per-request storage, if any. A miniport driver can use SRB extensions as storage for driver-determined, request-specific information, such as data necessary to process a particular request. The OS-specific port driver does not initialize SRB extensions, but sets a pointer to this storage in each SRB it sends to the miniport driver. An SRB extension can be safely accessed by the HBA hardware. Leave this member set to zero if the miniport driver does not maintain per-SRB information for which it requires storage. This value is based on the assumption that the HBA is able to receive 32-bit addresses, regardless of what the controller can actually support. If additional space is needed in the LUN or SRB extensions to handle 64-bit addresses, then appropriate adjustments must be made to this value before using it with routines such as ScsiPortGetUncachedExtension.
NumberOfAccessRanges
Specifies how many access ranges the adapter uses. Each is a range either of memory addresses or I/O port addresses. A typical HBA uses two ranges, one for its I/O ports and another for its device memory range.
Reserved
Reserved for system use and not available for use by miniport drivers.
MapBuffers
Indicates, when TRUE, that all data buffer addresses must be mapped to virtual addresses for access by the miniport driver. When FALSE, data buffer addresses do not have to be mapped to virtual addresses.
NeedPhysicalAddresses
Indicates, when TRUE, that the miniport driver needs to translate its device, any per-LU, and any per-SRB extension addresses, as well as SRB buffer addresses, to physical addresses, as required by the HBA. When FALSE, none of these addresses have to be translated to physical addresses.
TaggedQueuing
Indicates, when TRUE, that miniport driver can support SCSI tagged queuing. When FALSE, the miniport driver cannot support SCSI-tagged queuing.
AutoRequestSense
Indicates, when TRUE, that the HBA can perform a request-sense operation without requiring an explicit request to do so. When FALSE, the HBA requires an explicit request before it can perform a request-sense operation. Only miniport drivers driving HBAs with built-in firmware to perform request-sense operations should set this member to TRUE.
MultipleRequestPerLu
Indicates, when TRUE, that the miniport driver can queue multiple requests per logical unit, in particular, within the HBA. When FALSE, the miniport driver cannot queue multiple requests per logical unit. Note that an HBA must support auto request sense for its miniport driver to enable this functionality. If a miniport driver sets this member to TRUE, it must use each SRB QueueTag member for requests of this type, but the SRB_FLAGS_QUEUE_ACTION_ENABLE is not set in the SrbFlags member of the SCSI_REQUEST_BLOCK structure.
ReceiveEvent
Indicates, when TRUE, that the miniport driver drives an HBA that can support the receive-event SRB for SCSI asynchronous events. When FALSE, the HBA cannot support the receive-event SRB for SCSI asynchronous events.
VendorIdLength
Specifies the size in bytes of the VendorId string, described next.
VendorId
Pointer to an ASCII byte string identifying the manufacturer of the HBA. This member is irrelevant for Plug and Play drivers.
If the given AdapterInterfaceType is PCIBus, the vendor ID is a USHORT value allocated by the PCI SIG, which must be converted into a byte string by the miniport driver. For example, if the assigned PCI vendor ID value is 1001, the miniport driver-supplied VendorId string would be ('1', '0', '0', '1').
ReservedUshort
Reserved for system use and is not available for use by miniport drivers.
PortVersionFlags
DeviceIdLength
Specifies the size in bytes of the DeviceId string, described next.
DeviceId
Pointer to an ASCII byte string identifying the HBA model(s) supported by the miniport driver. This member is irrelevant for Plug and Play drivers.
If the given AdapterInterfaceType is PCIBus, a device ID is a USHORT value assigned by the manufacturer of the HBA. The miniport driver must convert any PCI device ID value(s) for the HBA(s) it can support into DeviceId byte string(s), as for the VendorId member. For example, if a miniport driver can support HBAs with the PCI device IDs 8040 and 8050, it might set DeviceId with a pointer to the byte string ('8', '0').
HwAdapterControl
Pointer to the miniport driver's HwScsiAdapterControl routine, which is a required entry point for all PnP miniport drivers. Set this to NULL if the miniport driver does not support Plug and Play.
Each miniport driver must initialize the HW_INITIALIZATION_DATA structure with zeros before it sets the values of relevant members in this structure and calls ScsiPortInitialize.
The Dma64BitAddresses member of HW_INITIALIZATION_DATA has been eliminated in Windows 2000 (See the discussion under PORT_CONFIGURATION_DATA for further details).
Both HW_INITIALIZATION_DATA and PORT_CONFIGURATION_INFORMATION have a pair of members called SpecificLuExtensionSize and SrbExtensionSize whose values are handled differently than they were prior to Windows 2000. The miniport driver must calculate the initial values of SpecificLuExtensionSize and SrbExtensionSize in HW_INITIALIZATION_DATA based on the assumption that the HBA is capable of handling 32-bit addresses, regardless of what the controller can actually support. (See the discussion under PORT_CONFIGURATION_DATA for further details.)
DriverEntry of SCSI Miniport Driver
The HW_INITIALIZATION_DATA (Storport) structure contains information particular to each miniport driver and the hardware that the miniport driver manages.
HwInitializationDataSize
Specifies the size of this structure in bytes, as returned by sizeof(HW_INITIALIZATION_DATA). In effect, this member indicates the version of this structure being used by the miniport driver. A miniport driver's DriverEntry routine should set this member's value for the port driver.
AdapterInterfaceType
The Storport driver does not support legacy buses. Therefore, most of the adapter interface types used with the SCSI Port driver are invalid for Storport. In particular, Isa, Eisa, MicroChannel, and TurboChannel are not supported. Furthermore, unlike the SCSI Port case, a miniport driver that works with the Storport driver is not required to supply values for the VendorIdLength, VendorId, DeviceIdLength, and DeviceId members.
HwInitialize
Pointer to the miniport driver's HwStorInitialize routine, which is a required entry point for all miniport drivers.
HwStartIo
Pointer to the miniport driver's HwStorStartIo routine, which is a required entry point for all miniport drivers.
HwInterrupt
Pointer to the miniport driver's HwStorInterrupt routine, which is a required entry point for all miniport drivers.
HwFindAdapter
Pointer to the miniport driver's HwStorFindAdapter routine, which is a required entry point for all miniport drivers.
HwResetBus
Pointer to the miniport driver's HwStorResetBus routine, which is a required entry point for all miniport drivers.
HwDmaStarted
The Storport driver does not support subordinate-mode DMA. Therefore, this member must be NULL.
HwAdapterState
The Storport driver does not support legacy drivers. Therefore, this member must be NULL.
DeviceExtensionSize
Specifies the size, in bytes, required by the miniport driver for its per-adapter device extension. A miniport driver uses its device extension as storage for driver-determined host bus adapter (HBA) information. The operating system-specific port driver initializes each device extension one time, when it first allocates the extension and fills it with zeros. It passes a pointer to the HBA-specific device extension in every call to a miniport driver. The given size does not include any miniport driver-requested per-logical-unit storage. The size of per-logical-unit storage is specified via the SpecificLuExtensionSize field, described later in this topic.
Although SCSIPort re-initializes the device extension whenever the adapter is stopped and thus subsequent calls to HwScsiFindAdapter receive a zeroed-out device extension, Storport does not follow that model. Rather, Storport resets the device extension to zero only when it is first allocated, so only the first call to HwStorFindAdapter for a given adapter receives a zeroed-out device extension. Subsequent calls to HwStorFindAdapter and other miniport functions receive the device extension as last modified by the miniport. This allows the miniport driver to maintain knowledge about the state of the adapter between Plug and Play (PnP) stops and restarts, possibly enabling the miniport driver to optimize its initialization procedure.
SpecificLuExtensionSize
Specifies the size in bytes required by the miniport driver for its per-logical-unit storage, if any. A miniport driver can use its LU extensions as storage for driver-determined logical-unit information about peripherals on the bus. The Storport driver initializes each LU extension it allocates with zeros. Leave this member set to zero if the miniport driver does not maintain per-LU information for which it requires storage. This value is based on the assumption that the HBA is able to receive 32-bit addresses, regardless of what the controller can actually support. If additional space is needed in the LUN or SRB extensions to handle 64-bit addresses, then appropriate adjustments must be made to this value before using it with routines such as StorPortGetUncachedExtension.
SrbExtensionSize
Specifies the size, in bytes, required by the miniport driver for its per-request storage, if any. A miniport driver can use SRB extensions as storage for driver-determined, request-specific information, such as data necessary to process a particular request. The Storport driver does not initialize SRB extensions, but sets a pointer to this storage in each SRB it sends to the miniport driver. An SRB extension can be safely accessed by the HBA hardware. Because miniport drivers that work with the Storport driver must support scatter/gather lists, and the per-SRB scatter/gather lists are usually allocated in the SRB extension, this member is rarely zero. Leave this member set to zero if the miniport driver does not maintain per-SRB information for which it requires storage.
This value is based on the assumption that the HBA is able to receive 32-bit addresses, regardless of what the controller can actually support. If additional space is needed in the LUN or SRB extensions to handle 64-bit addresses, then appropriate adjustments must be made to this value before using it with routines such as StorPortGetUncachedExtension.
NumberOfAccessRanges
Specifies how many access ranges the adapter uses. Each is a range either of memory addresses or I/O port addresses.
Reserved
Reserved for system use and not available for use by miniport drivers.
MapBuffers
Indicates whether the Storport driver maps SRB data buffer addresses to system virtual addresses. The MapBuffers member can have one of the following values.
Value | Meaning |
---|---|
STOR_MAP_NO_BUFFERS (0) | Do not map for any SRB except SRB_FUNCTION_IO_CONTROL and SRB_FUNCTION_WMI. |
STOR_MAP_ALL_BUFFERS (1) | Obsolete. This value has the same effect as STOR_MAP_NON_READ_WRITE_BUFFERS. |
STOR_MAP_NON_READ_WRITE_BUFFERS (2) | Map the buffer for all I/O except for read or write requests. |
STOR_MAP_ALL_BUFFERS_INCLUDING_READ_WRITE (3) | Map the buffer for all I/O including read and write requests. This value is valid starting with Windows 8. |
NeedPhysicalAddresses
Must be set to TRUE. A value of TRUE indicates that the miniport driver must translate certain types of addresses to physical addresses. Miniport drivers that work with the Storport driver must support bus-master DMA, so they will always be required to do address translation.
TaggedQueuing
Must be set to TRUE. A value of TRUE indicates that the miniport driver supports SCSI tagged queuing. All miniport drivers that work with the Storport driver must support tagged queuing.
AutoRequestSense
Must be TRUE. A value of TRUE indicates that the HBA can perform a request-sense operation without requiring an explicit request to do so. All miniport drivers that work with the Storport driver must support SCSI Auto-Request Sense.
MultipleRequestPerLu
Must be set to TRUE. A value of TRUE indicates that the miniport driver can queue multiple requests per logical unit. Miniport drivers that work with the Storport driver must support multiple requests per logical unit.
ReceiveEvent
The Storport driver ignores this member.
VendorIdLength
The Storport driver ignores this member, because miniport drivers that work with the Storport driver must support PnP.
VendorId
The Storport driver ignores this member, because miniport drivers that work with the Storport driver must support PnP.
ReservedUshort
PortVersionFlags
Flags to indicate supported features.
DeviceIdLength
The Storport driver ignores this member, because miniport drivers that work with the Storport driver must support PnP.
DeviceId
The Storport driver ignores this member, because miniport drivers that work with the Storport driver must support PnP.
HwAdapterControl
Pointer to the miniport driver's HwStorAdapterControl routine. This is a required routine because miniport drivers that work with the Storport driver require PnP support.
HwBuildIo
Pointer to an optional HwStorBuildIo routine that the port driver calls to do unsynchronized processing prior to calling the miniport driver's HwStorStartIo routine. This callback is specific to physical miniports and should be set to NULL by virtual miniports.
HwFreeAdapterResources
A pointer to the virtual miniport driver's HwStorFreeAdapterResources routine, which is a required entry point for all virtual miniport drivers. This callback is specific to virtual miniports and is set to NULL for physical miniports.
This callback is added in Windows 8. Virtual miniports for previous versions of Windows should use VIRTUAL_HW_INITIALIZATION_DATA instead of this structure.
HwProcessServiceRequest
A pointer to the virtual miniport driver's HwStorProcessServiceRequest routine. This callback is specific to virtual miniports and is set to NULL for physical miniports.
This callback is added in Windows 8. Virtual miniports for previous versions of Windows should use VIRTUAL_HW_INITIALIZATION_DATA instead of this structure.
HwCompleteServiceIrp
A pointer to the virtual miniport driver's HwStorCompleteServiceIrp routine. This callback is specific to virtual miniports and is set to NULL for physical miniports.
This callback is added in Windows 8. Virtual miniports for previous versions of Windows should use VIRTUAL_HW_INITIALIZATION_DATA instead of this structure.
HwInitializeTracing
A pointer to the virtual miniport driver's HwStorInitializeTracing routine. This callback is specific to virtual miniports and is set to NULL for physical miniports.
This callback is added in Windows 8. Virtual miniports for previous versions of Windows should use VIRTUAL_HW_INITIALIZATION_DATA instead of this structure.
HwCleanupTracing
A pointer to the virtual miniport driver's HwStorCleanupTracing routine. This callback is specific to virtual miniports and is set to NULL for physical miniports.
This callback is added in Windows 8. Virtual miniports for previous versions of Windows should use VIRTUAL_HW_INITIALIZATION_DATA instead of this structure.
HwTracingEnabled
A pointer to an optional HwStorTracingEnabled routine that the port driver calls to notify the miniport of whether tracing is enabled or not.
FeatureSupport
Flags indicating features that are supported by the miniport. FeatureSupport is set to a combination of these values:
Value | Meaning |
---|---|
STOR_FEATURE_VIRTUAL_MINIPORT (0x00000001) | This is a virtual miniport driver. |
STOR_FEATURE_ATA_PASS_THROUGH (0x00000002) | The miniport supports ATA pass through. |
STOR_FEATURE_FULL_PNP_DEVICE_CAPABILITIES (0x00000004) | The miniport provides complete settings in its STOR_DEVICE_CAPABILITIES_EX structure. |
STOR_FEATURE_DUMP_POINTERS (0x00000008) | The miniport supports the dump pointer SRBs. |
STOR_FEATURE_DEVICE_NAME_NO_SUFFIX (0x00000010) | The miniport driver does not want the suffix "SCSI type Device" as part of the device friendly name. |
STOR_FEATURE_DUMP_RESUME_CAPABLE (0x00000020) | The miniport's dump capability is functional for resume from hibernation. |
STOR_FEATURE_DEVICE_DESCRIPTOR_FROM_ATA_INFO_VPD (0x00000040) | The Storport driver initializes the STORAGE_DEVICE_DESCRIPTOR from the ATA Information VPD page instead of from INQUIRY data. |
STOR_FEATURE_EXTRA_IO_INFORMATION (0x00000080) | The miniport driver wants SRBEX_DATA_IO_INFO in a SRBEX if available. |
STOR_FEATURE_ADAPTER_CONTROL_PRE_FINDADAPTER (0x00000100) | The miniport driver can safely process AdapterControl call from Storport before receiving HwFindAdapter. |
STOR_FEATURE_ADAPTER_NOT_REQUIRE_IO_PORT (0x00000200) | The miniport driver doesn't require IO Port resource for its adapter. |
STOR_FEATURE_DUMP_16_BYTE_ALIGNMENT (0x00000400) | The miniport driver wants its HwDeviceExtension to be 16 byte aligned in dump mode. |
STOR_FEATURE_SET_ADAPTER_INTERFACE_TYPE (0x00000800) | The miniport wants Storport to set the adapter interface type. |
STOR_FEATURE_DUMP_INFO (0x00001000) | The miniport driver supports the dump info SRBs. |
STOR_FEATURE_DMA_ALLOCATION_NO_BOUNDARY (0x00002000) | The miniport driver supports to allocate DMA to physical memory without boundaries. |
STOR_FEATURE_SUPPORTS_NVME_ADAPTER (0x00004000) | The miniport driver supports NVMe based Storage Adapters. |
STOR_FEATURE_REPORT_INTERNAL_DATA (0x00008000) | The miniport driver supports reporting internal data. |
STOR_FEATURE_EARLY_DUMP (0x00010000) | The miniport driver supports early crash dump generation. |
STOR_FEATURE_NVME_ICE (0x00020000) | The miniport driver supports NVMe ICE. |
SrbTypeFlags
Flags indicating the SRB types supported by the miniport. SrbTypeFlags is set to 0 or a combination of the following values:
Value | Meaning |
---|---|
SRB_TYPE_FLAG_SCSI_REQUEST_BLOCK (0x1) | The miniport uses standard SRBs. |
SRB_TYPE_FLAG_STORAGE_REQUEST_BLOCK (0x2) | The miniport supports extended SRBs. |
AddressTypeFlags
The address schemes supported by the miniport. Currently, the only one address scheme is supported and the miniport must set this member to ADDRESS_TYPE_FLAG_BTL8.
Value | Meaning |
---|---|
ADDRESS_TYPE_FLAG_BTL8 (0x1) | Bus, Target, and LUN (BTL) 8-bit addressing. |
Reserved1
Reserved, set to 0.
HwUnitControl
A pointer the miniport driver's HwStorUnitControl routine. The port driver calls this routine with a control request for a storage unit device.
Every Storport miniport driver's DriverEntry routine must call StorPortInitialize after the miniport driver has first zeroed and then set the members of HW_INITIALIZATION_DATA.
The HW_INITIALIZATION_DATA structure specifies the basic information the class driver needs to begin initializing the minidriver. The minidriver passes an HW_INITIALIZATION_DATA structure to the class driver when it registers itself by calling StreamClassRegisterMinidriver.
SizeOfThisPacket
StreamClassVersion
HwInitializationDataSize
Specifies the size of this data structure, in bytes.
HwInterrupt
Points to the minidriver's StrMiniInterrupt routine.
HwReceivePacket
Points to the minidriver's StrMiniReceiveDevicePacket routine.
HwCancelPacket
Points to the minidriver's StrMiniCancelPacket routine.
HwRequestTimeoutHandler
Points to the minidriver's StrMiniRequestTimeout routine.
DeviceExtensionSize
Specifies the size in bytes of the buffer the class driver should allocate for the minidriver's device extension. The minidriver may use this buffer to record private information. The class driver passes pointers to this buffer in the HwDeviceExtension member of HW_STREAM_OBJECT, HW_STREAM_REQUEST_BLOCK, HW_TIME_CONTEXT, and PORT_CONFIGURATION_INFORMATION structures it passes to the minidriver.
PerRequestExtensionSize
Specifies the size in bytes of the buffer the class driver should allocate for the buffer pointed to by SRBExtension member of HW_STREAM_REQUEST_BLOCK structures it passes to the minidriver. The class driver will allocate one buffer for each HW_STREAM_REQUEST_BLOCK.
PerStreamExtensionSize
Specifies the size in bytes of the buffer the class driver should allocate for the buffer pointed to by the HwStreamExtension member of a stream's HW_STREAM_OBJECT. The class driver will allocate one buffer for each stream.
FilterInstanceExtensionSize
Specifies the size in bytes of the buffer the class extension should allocate for the buffer pointed to by the HwInstanceExtension member of HW_STREAM_REQUEST_BLOCK structures it passes to the minidriver. The class driver allocates one buffer for each instance of the minidriver.
BusMasterDMA
If TRUE, the device can perform direct bus-master DMA to the minidriver's DMA buffer.
Dma24BitAddresses
Minidrivers should set this to TRUE if the DMA hardware the devices uses can access only the lower 24 bits of the address space.
BufferAlignment
Specifies the alignment requirement, in bytes, for DMA buffers. For example, a value of 4 indicates the DMA buffers should be aligned on 4-byte boundaries.
TurnOffSynchronization
If TRUE, the minidriver will handle its own synchronization; otherwise the class driver handles synchronization. Most minidrivers should set this value to FALSE. See Minidriver Synchronization in the Streaming Minidriver Design Guide for more information.
DmaBufferSize
Specifies the size in bytes of the DMA buffer the class driver should allocate for the minidriver. The minidriver gets a pointer to this buffer by calling StreamClassGetDmaBuffer. The class driver allocates contiguous nonpageable memory that will not be available to the operating system, or to other drivers, so this value should be as small as possible.
NumNameExtensions
NameExtensionArray
Reserved
Reserved for system use. Minidrivers should ignore this member.