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 无效。 特别是不支持 Isa、Eisa、MicroChannel,不支持 TurboChannel。 此外,与 SCSI 端口情况不同,与 Storport 驱动程序配合使用的微型端口驱动程序不需要为 VendorIdLength、VendorId、DeviceIdLength和 DeviceId 成员提供值。
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
TaggedQueuing
必须设置为 true
AutoRequestSense
必须 TRUE。 值为 TRUE 表示 HBA 可以执行请求感知操作,而无需显式请求执行此操作。 使用 Storport 驱动程序的所有微型端口驱动程序都必须支持 SCSI 自动请求感知。
MultipleRequestPerLu
必须设置为 true
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) |