storport.h) (HW_INITIALIZATION_DATA 结构

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 无效。 具体而言, 不支持 IsaEisaMicroChannelTurboChannel 。 此外,与 SCSI 端口情况不同,与 Storport 驱动程序一起使用的微型端口驱动程序不需要为 VendorIdLength、VendorIdDeviceIdLengthDeviceId 成员提供值。

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 请勿映射除SRB_FUNCTION_IO_CONTROL和SRB_FUNCTION_WMI之外的任何 SRB。
STOR_MAP_ALL_BUFFERS 已过时。 此值与 STOR_MAP_NON_READ_WRITE_BUFFERS 具有相同的效果。
STOR_MAP_NON_READ_WRITE_BUFFERS 映射除读取或写入请求以外的所有 I/O 的缓冲区。
STOR_MAP_ALL_BUFFERS_INCLUDING_READ_WRITE 映射所有 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 这是一个虚拟微型端口驱动程序。
STOR_FEATURE_ATA_PASS_THROUGH 微型端口支持 ATA 直通。
STOR_FEATURE_FULL_PNP_DEVICE_CAPABILITIES 微型端口在其 STOR_DEVICE_CAPABILITIES_EX 结构中提供完整的设置。
STOR_FEATURE_DUMP_POINTERS 微型端口支持转储指针 SRB。
STOR_FEATURE_DEVICE_NAME_NO_SUFFIX 微型端口驱动程序不希望后缀“SCSI 类型 设备”作为设备友好名称的一部分。
STOR_FEATURE_DUMP_RESUME_CAPABLE 微型端口的转储功能可用于从休眠状态恢复。
STOR_FEATURE_DEVICE_DESCRIPTOR_FROM_ATA_INFO_VPD Storport 驱动程序从 ATA 信息 VPD 页而不是 INQUIRY 数据初始化 STORAGE_DEVICE_DESCRIPTOR
STOR_FEATURE_SET_ADAPTER_INTERFACE_TYPE Storport 驱动程序设置适配器接口类型。

SrbTypeFlags

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

含义
SRB_TYPE_FLAG_SCSI_REQUEST_BLOCK 微型端口使用标准 SRB。
SRB_TYPE_FLAG_STORAGE_REQUEST_BLOCK 微型端口支持扩展 SRB。

AddressTypeFlags

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

含义
ADDRESS_TYPE_FLAG_BTL8 总线、目标和 LUN (BTL) 8 位寻址。

Reserved1

保留,设置为 0。

HwUnitControl

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

注解

每个 Storport 微型端口驱动程序的 DriverEntry 例程都必须在微型端口驱动程序先归零然后设置HW_INITIALIZATION_DATA的成员之后调用 StorPortInitialize

要求

要求
Header storport.h (包括 Storport.h)