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 无效。 具体而言, 不支持 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 | 请勿映射除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) |