HW_INITIALIZATION_DATA结构(storport.h)

HW_INITIALIZATION_DATA(Storport) 结构包含特定于每个微型端口驱动程序的信息以及微型端口驱动程序管理的硬件。

语法

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;
  PHW_UNIT_CONTROL            HwUnitControl;
} HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA;

成员

HwInitializationDataSize

指定此结构的大小(以字节为单位),sizeof(HW_INITIALIZATION_DATA) 返回。 实际上,此成员指示微型端口驱动程序正在使用的此结构的版本。 微型端口驱动程序的 DriverEntry 例程应为端口驱动程序设置此成员的值。

AdapterInterfaceType

Storport 驱动程序不支持旧总线。 因此,与 SCSI 端口驱动程序一起使用的大多数适配器接口类型对 Storport 无效。 特别是不支持 IsaEisaMicroChannel,不支持 TurboChannel。 此外,与 SCSI 端口情况不同,与 Storport 驱动程序配合使用的微型端口驱动程序不需要为 VendorIdLengthVendorIdDeviceIdLengthDeviceId 成员提供值。

HwInitialize

指向微型端口驱动程序 HwStorInitialize 例程的指针,这是所有微型端口驱动程序所需的入口点。

HwStartIo

指向微型端口驱动程序 HwStorStartIo 例程的指针,这是所有微型端口驱动程序所需的入口点。

HwInterrupt

指向微型端口驱动程序的 HwStorInterrupt 例程的指针,这是所有微型端口驱动程序所需的入口点。

HwFindAdapter

指向微型端口驱动程序的 HwStorFindAdapter 例程的指针,这是所有微型端口驱动程序所需的入口点。

HwResetBus

指向微型端口驱动程序 HwStorResetBus 例程的指针,这是所有微型端口驱动程序所需的入口点。

HwDmaStarted

Storport 驱动程序不支持从属模式 DMA。 因此,此成员必须 NULL

HwAdapterState

Storport 驱动程序不支持旧驱动程序。 因此,此成员必须 NULL

DeviceExtensionSize

指定微型端口驱动程序为其每个适配器设备扩展所需的大小(以字节为单位)。 微型端口驱动程序使用其设备扩展作为驱动程序确定主机总线适配器 (HBA) 信息的存储。 操作系统特定的端口驱动程序一次初始化每个设备扩展,当它首次分配扩展并用零填充它时。 它在每个对微型端口驱动程序的调用中传递指向 HBA 特定设备扩展的指针。 给定大小不包括每个逻辑单元存储请求的任何微型端口驱动程序。 本主题后面部分介绍的 SpecificLuExtensionSize 字段指定了每个逻辑单元存储的大小。

尽管每当适配器停止时,SCSIPort 将重新初始化设备扩展,因此后续调用 HwScsiFindAdapter 接收零出设备扩展,但 Storport 不会遵循该模型。 相反,Storport 仅在首次分配设备扩展时将设备扩展重置为零,因此,只有对给定适配器 HwStorFindAdapter 的第一次调用才会接收零出设备扩展。 后续调用 HwStorFindAdapter 和其他微型端口函数接收设备扩展,就像微型端口上次修改的那样。 这允许微型端口驱动程序保持对即插即用(PnP)之间适配器状态的了解,从而可能使微型端口驱动程序能够优化其初始化过程。

SpecificLuExtensionSize

指定微型端口驱动程序在其每逻辑单元存储(如果有)时所需的大小(以字节为单位)。 微型端口驱动程序可以使用其 LU 扩展作为驱动程序确定的逻辑单元信息(有关总线上的外围设备的存储)。 Storport 驱动程序使用零初始化它分配的每个 LU 扩展。 如果微型端口驱动程序不维护需要存储的每个 LU 信息,请将此成员保留为零。 此值基于 HBA 能够接收 32 位地址的假设,无论控制器实际支持什么。 如果在 LUN 或 SRB 扩展中需要额外的空间来处理 64 位地址,则必须在将此值与例程(如 StorPortGetUncachedExtension)一起使用之前对其进行适当的调整。

SrbExtensionSize

指定微型端口驱动程序对其每个请求存储(如果有)所需的大小(以字节为单位)。 微型端口驱动程序可以将 SRB 扩展用作驱动程序确定的特定于请求的信息的存储,例如处理特定请求所需的数据。 Storport 驱动程序不会初始化 SRB 扩展,而是在它发送到微型端口驱动程序的每个 SRB 中设置指向此存储的指针。 HBA 硬件可以安全地访问 SRB 扩展。 由于使用 Storport 驱动程序的微型端口驱动程序必须支持散点/收集列表,并且每个 SRB 散点/收集列表通常在 SRB 扩展中分配,因此此成员很少为零。 如果微型端口驱动程序不维护需要存储的每个 SRB 信息,请将此成员保留为零。

此值基于 HBA 能够接收 32 位地址的假设,无论控制器实际支持什么。 如果在 LUN 或 SRB 扩展中需要额外的空间来处理 64 位地址,则必须在将此值与例程(如 StorPortGetUncachedExtension)一起使用之前对其进行适当的调整。

NumberOfAccessRanges

指定适配器使用的访问范围。 每个地址都是内存地址或 I/O 端口地址的范围。

Reserved

保留供系统使用,不能供微型端口驱动程序使用。

MapBuffers

指示 Storport 驱动程序是否将 SRB 数据缓冲区地址映射到系统虚拟地址。 MapBuffers 成员可以具有以下值之一。

价值 意义
STOR_MAP_NO_BUFFERS (0) 请勿映射除SRB_FUNCTION_IO_CONTROL和SRB_FUNCTION_WMI以外的任何 SRB。
STOR_MAP_ALL_BUFFERS (1) 过时。 此值的效果与STOR_MAP_NON_READ_WRITE_BUFFERS相同。
STOR_MAP_NON_READ_WRITE_BUFFERS (2) 映射除读取或写入请求之外的所有 I/O 的缓冲区。
STOR_MAP_ALL_BUFFERS_INCLUDING_READ_WRITE (3) 映射所有 I/O 的缓冲区,包括读取和写入请求。 此值从 Windows 8 开始有效。

NeedPhysicalAddresses

必须设置为 true。 值为 TRUE 表示微型端口驱动程序必须将特定类型的地址转换为物理地址。 使用 Storport 驱动程序的微型端口驱动程序必须支持总线主 DMA,因此它们始终需要执行地址转换。

TaggedQueuing

必须设置为 true。 值为 TRUE 指示微型端口驱动程序支持 SCSI 标记队列。 使用 Storport 驱动程序的所有微型端口驱动程序都必须支持带标记的队列。

AutoRequestSense

必须 TRUE。 值为 TRUE 表示 HBA 可以执行请求感知操作,而无需显式请求执行此操作。 使用 Storport 驱动程序的所有微型端口驱动程序都必须支持 SCSI 自动请求感知。

MultipleRequestPerLu

必须设置为 true。 值为 TRUE 指示微型端口驱动程序可以为每个逻辑单元排队多个请求。 适用于 Storport 驱动程序的微型端口驱动程序必须支持每个逻辑单元的多个请求。

ReceiveEvent

Storport 驱动程序忽略此成员。

VendorIdLength

Storport 驱动程序忽略此成员,因为使用 Storport 驱动程序的微型端口驱动程序必须支持 PnP。

VendorId

Storport 驱动程序忽略此成员,因为使用 Storport 驱动程序的微型端口驱动程序必须支持 PnP。

ReservedUshort

PortVersionFlags

用于指示受支持的功能的标志。

DeviceIdLength

Storport 驱动程序忽略此成员,因为使用 Storport 驱动程序的微型端口驱动程序必须支持 PnP。

DeviceId

Storport 驱动程序忽略此成员,因为使用 Storport 驱动程序的微型端口驱动程序必须支持 PnP。

HwAdapterControl

指向微型端口驱动程序 HwStorAdapterControl 例程的指针。 这是一个必需的例程,因为使用 Storport 驱动程序的微型端口驱动程序需要 PnP 支持。

HwBuildIo

指向可选 HwStorBuildIo 例程的指针,端口驱动程序在调用微型端口驱动程序的 HwStorStartIo 例程之前调用该例程来执行非同步处理。 此回调特定于物理微型端口,应通过虚拟微型端口设置为 NULL。

HwFreeAdapterResources

指向虚拟微型端口驱动程序 HwStorFreeAdapterResources 例程的指针,这是所有虚拟微型端口驱动程序所需的入口点。 此回调特定于虚拟微型端口,设置为 物理微型端口的 NULL

此回调在 Windows 8 中添加。 早期版本的 Windows 虚拟微型端口应使用 VIRTUAL_HW_INITIALIZATION_DATA 而不是此结构。

HwProcessServiceRequest

指向虚拟微型端口驱动程序 HwStorProcessServiceRequest 例程的指针。 此回调特定于虚拟微型端口,设置为 物理微型端口的 NULL

此回调在 Windows 8 中添加。 早期版本的 Windows 虚拟微型端口应使用 VIRTUAL_HW_INITIALIZATION_DATA 而不是此结构。

HwCompleteServiceIrp

指向虚拟微型端口驱动程序 HwStorCompleteServiceIrp 例程的指针。 此回调特定于虚拟微型端口,设置为 物理微型端口的 NULL

此回调在 Windows 8 中添加。 早期版本的 Windows 虚拟微型端口应使用 VIRTUAL_HW_INITIALIZATION_DATA 而不是此结构。

HwInitializeTracing

指向虚拟微型端口驱动程序 HwStorInitializeTracing 例程的指针。 此回调特定于虚拟微型端口,设置为 物理微型端口的 NULL

此回调在 Windows 8 中添加。 早期版本的 Windows 虚拟微型端口应使用 VIRTUAL_HW_INITIALIZATION_DATA 而不是此结构。

HwCleanupTracing

指向虚拟微型端口驱动程序 HwStorCleanupTracing 例程的指针。 此回调特定于虚拟微型端口,设置为 物理微型端口的 NULL

此回调在 Windows 8 中添加。 早期版本的 Windows 虚拟微型端口应使用 VIRTUAL_HW_INITIALIZATION_DATA 而不是此结构。

HwTracingEnabled

指向可选 HwStorTracingEnabled 例程的指针,端口驱动程序调用该例程来通知微型端口是否启用跟踪。

FeatureSupport

指示微型端口支持的功能的标志。 FeatureSupport 设置为以下值的组合:

价值 意义
STOR_FEATURE_VIRTUAL_MINIPORT(0x00000001) 这是一个虚拟微型端口驱动程序。
STOR_FEATURE_ATA_PASS_THROUGH(0x00000002) 微型端口支持 ATA 传递。
STOR_FEATURE_FULL_PNP_DEVICE_CAPABILITIES(0x00000004) 微型端口在其 STOR_DEVICE_CAPABILITIES_EX 结构中提供完整的设置。
STOR_FEATURE_DUMP_POINTERS(0x00000008) 微型端口支持转储指针 SRB。
STOR_FEATURE_DEVICE_NAME_NO_SUFFIX(0x00000010) 微型端口驱动程序不希望将后缀“SCSI 类型 设备”作为设备友好名称的一部分。
STOR_FEATURE_DUMP_RESUME_CAPABLE(0x00000020) 微型端口的转储功能可用于从休眠状态恢复。
STOR_FEATURE_DEVICE_DESCRIPTOR_FROM_ATA_INFO_VPD(0x00000040) Storport 驱动程序从 ATA 信息 VPD 页而不是 INQUIRY 数据初始化 STORAGE_DEVICE_DESCRIPTOR
STOR_FEATURE_EXTRA_IO_INFORMATION (0x00000080) 微型端口驱动程序希望在 SRBEX 中SRBEX_DATA_IO_INFO(如果可用)。
STOR_FEATURE_ADAPTER_CONTROL_PRE_FINDADAPTER(0x00000100) 微型端口驱动程序可以在接收 HwFindAdapter 之前安全地处理 Storport 的 AdapterControl 调用。
STOR_FEATURE_ADAPTER_NOT_REQUIRE_IO_PORT(0x00000200) 微型端口驱动程序不需要其适配器的 IO 端口资源。
STOR_FEATURE_DUMP_16_BYTE_ALIGNMENT(0x00000400) 微型端口驱动程序希望其 HwDeviceExtension 在转储模式下保持 16 字节对齐。
STOR_FEATURE_SET_ADAPTER_INTERFACE_TYPE(0x00000800) 微型端口希望 Storport 设置适配器接口类型。
STOR_FEATURE_DUMP_INFO(0x00001000) 微型端口驱动程序支持转储信息 SRB。
STOR_FEATURE_DMA_ALLOCATION_NO_BOUNDARY(0x00002000) 微型端口驱动程序支持在没有边界的情况下将 DMA 分配给物理内存。
STOR_FEATURE_SUPPORTS_NVME_ADAPTER(0x00004000) 微型端口驱动程序支持基于 NVMe 的存储适配器。
STOR_FEATURE_REPORT_INTERNAL_DATA(0x00008000) 微型端口驱动程序支持报告内部数据。
STOR_FEATURE_EARLY_DUMP(0x00010000) 微型端口驱动程序支持早期故障转储生成。
STOR_FEATURE_NVME_ICE(0x00020000) 微型端口驱动程序支持 NVMe ICE。

SrbTypeFlags

指示微型端口支持的 SRB 类型的标志。 SrbTypeFlags 设置为 0 或以下值的组合:

价值 意义
SRB_TYPE_FLAG_SCSI_REQUEST_BLOCK(0x1) 微型端口使用标准 SRB。
SRB_TYPE_FLAG_STORAGE_REQUEST_BLOCK(0x2) 微型端口支持扩展 SRB。

AddressTypeFlags

微型端口支持的地址方案。 目前,仅支持一个地址方案,微型端口必须将此成员设置为ADDRESS_TYPE_FLAG_BTL8。

价值 意义
ADDRESS_TYPE_FLAG_BTL8(0x1) 总线、目标和 LUN (BTL) 8 位寻址。

Reserved1

保留,设置为 0。

HwUnitControl

微型端口驱动程序的 HwStorUnitControl 例程的指针。 端口驱动程序使用存储单元设备的控制请求调用此例程。

言论

每个 Storport 微型端口驱动程序的 DriverEntry 例程都必须在微型端口驱动程序首次为零后调用 StorPortInitialize,然后设置 HW_INITIALIZATION_DATA的成员。

要求

要求 价值
标头 storport.h (包括 Storport.h)