HW_INITIALIZATION_DATA - NtDoc

Native API online documentation, based on the System Informer (formerly Process Hacker) phnt headers
// 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

NtDoc

No description available.

Windows Driver Kit DDI reference (ns-srb-_hw_initialization_data)

_HW_INITIALIZATION_DATA structure (srb.h)

Description

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.

Members

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.

Remarks

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.)

See also

DriverEntry of SCSI Miniport Driver

HwScsiInitialize

SCSI_REQUEST_BLOCK

ScsiPortInitialize


Windows Driver Kit DDI reference (ns-storport-_hw_initialization_data~r1)

HW_INITIALIZATION_DATA structure

Description

The HW_INITIALIZATION_DATA (Storport) structure contains information particular to each miniport driver and the hardware that the miniport driver manages.

Members

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.

Remarks

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.


Windows Driver Kit DDI reference (ns-strmini-_hw_initialization_data)

_HW_INITIALIZATION_DATA structure (strmini.h)

Description

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.

Members

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.