共用方式為


HW_INITIALIZATION_DATA結構 (srb.h)

每個 SCSI 迷你埠驅動程式的 DriverEntry 例程都必須以零初始化,然後填入 OS 特定埠驅動程式的相關HW_INITIALIZATION_DATA (SCSI) 資訊。

注意 SCSI 連接埠驅動程式和 SCSI 迷你埠驅動程式模型未來可能會改變或無法使用。 相反地,我們建議使用 Storport 驅動程式Storport miniport 驅動程式模型。
 

語法

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;

成員

HwInitializationDataSize

指定這個結構的大小,以位元組為單位,如 sizeof() 所傳回。 實際上,這個成員表示迷你埠驅動程式所使用的這個結構版本。 迷你埠驅動程式的 DriverEntry 例程應該為埠驅動程式設定此成員的值。

AdapterInterfaceType

指定 HBA 連接的 I/O 總線類型,可以是下列其中一項:內部IsaEisaMicroChannelTurboChannelPCIBus。 不過,未來將支援其他類型的公交車。 支援的總線類型上限一律 MaximumInterfaceType

如果設定為 PCIBus,迷你埠驅動程式就必須提供 VendorIdLengthVendorIdDeviceIdLength,以及 DeviceId 成員的值。

HwInitialize

迷你埠驅動程式 HwScsiInitialize 例程的指標,這是所有迷你埠驅動程式的必要進入點。 此例程的原型 PHW_INITIALIZE

HwStartIo

迷你埠驅動程式 HwScsiStartIo 例程的指標,這是所有迷你埠驅動程式的必要進入點。 此例程的原型 PHW_STARTIO

HwInterrupt

迷你埠驅動程式 HwScsiInterrupt 例程的指標,這是產生中斷之 HBA 之任何迷你埠驅動程式的必要進入點。 如果迷你埠驅動程式不需要ISR,請將此設定為 NULL。 此例程的原型 PHW_INTERRUPT

HwFindAdapter

迷你埠驅動程式 HwScsiFindAdapter 例程的指標,這是所有迷你埠驅動程式的必要進入點。 此例程的原型 PHW_FIND_ADAPTER

HwResetBus

迷你埠驅動程式 HwScsiResetBus 例程的指標,這是所有迷你埠驅動程式的必要進入點。 此例程的原型 PHW_RESET_BUS

HwDmaStarted

如果迷你埠驅動程式的 HwScsiDmaStarted 例程的指標,其 HBA 使用系統 DMA,也就是系統 DMA 控制器。 如果 HBA 是總線主機或使用 PIO,請將此設定為 NULL。 此例程的原型 PHW_DMA_STARTED

HwAdapterState

迷你埠驅動程式的 HwScsiAdapterState 例程的指標,這是 HBA 迷你埠驅動程式的必要進入點,其與作系統相依、僅限 x86 平臺的埠驅動程式必須在 x86 受保護和實際處理器模式之間切換。 如果迷你埠驅動程式不需要 HwScsiAdapterState 例程,請將此成員設定為 NULL。 具有 BIOS 的 HBA 迷你埠驅動程式必須具有 HwScsiAdapterState 例程,才能與僅限 x86 的埠驅動程式相容,並可移植到僅限 x86 的作系統環境。 此例程的原型 PHW_ADAPTER_STATE

DeviceExtensionSize

指定迷你埠驅動程序針對每個 HBA 裝置擴充功能所需的位元組大小。 迷你埠驅動程式會使用其裝置擴充功能作為驅動程序決定 HBA 資訊的記憶體。 OS 特定埠驅動程式會使用零來初始化它配置的每個裝置擴充功能,並在每次呼叫迷你埠驅動程式時,將指標傳遞給 HBA 特定裝置擴充功能,但 DriverEntry 例程除外。 指定的大小不包含每個邏輯單元記憶體要求的任何迷你埠驅動程式,如下所述。

SpecificLuExtensionSize

指定迷你埠驅動程序針對其每個邏輯單元記憶體所需的位元組大小,如果有的話。 迷你埠驅動程式可以使用其 LU 擴充功能作為驅動程式決定之邏輯單元資訊,以取得有關總線上 SCSI 周邊的記憶體。 OS 特定的埠驅動程式會使用零來初始化它配置的每個 LU 擴充功能。 如果迷你埠驅動程序不維護需要記憶體的每個 LU 資訊,則此成員保持為零。 此值是以 HBA 能夠接收 32 位位址的假設為基礎,而不論控制器可實際支持什麼。 如果 LUN 或 SRB 擴充功能中需要額外的空間來處理 64 位位址,則必須先對此值進行適當的調整,才能將它與 ScsiPortGetUncachedExtension等例程搭配使用。

SrbExtensionSize

指定迷你埠驅動程序針對每個要求記憶體所需的位元組大小,如果有的話。 迷你埠驅動程式可以使用 SRB 擴充功能作為驅動程式決定、要求特定資訊的記憶體,例如處理特定要求所需的數據。 OS 特定的埠驅動程式不會初始化 SRB 擴充功能,而是在傳送至迷你埠驅動程式的每個 SRB 中設定此記憶體的指標。 HBA 硬體可以安全地存取 SRB 擴充功能。 如果迷你埠驅動程式不維護需要記憶體的每個SRB資訊,請將此成員設定為零。 此值是以 HBA 能夠接收 32 位位址的假設為基礎,而不論控制器可實際支持什麼。 如果 LUN 或 SRB 擴充功能中需要額外的空間來處理 64 位位址,則必須先對此值進行適當的調整,才能將它與 ScsiPortGetUncachedExtension等例程搭配使用。

NumberOfAccessRanges

指定配接器使用的存取範圍數目。 每個都是記憶體位址或 I/O 埠地址的範圍。 典型的 HBA 會使用兩個範圍,一個用於其 I/O 連接埠,另一個用於其裝置記憶體範圍。

Reserved

保留供系統使用,且無法供迷你埠驅動程式使用。

MapBuffers

指出當 TRUE時,所有數據緩衝區位址都必須對應至虛擬位址,以供迷你埠驅動程式存取。 當 FALSE時,數據緩衝區位址不需要對應至虛擬位址。

NeedPhysicalAddresses

指出,當 TRUE時,迷你埠驅動程式必須視 HBA 的要求,將其裝置、任何 LU 和任何個別 SRB 擴充位址,以及 SRB 緩衝區地址轉譯為實體位址。 當 FALSE時,這些位址都不必轉譯為實體位址。

TaggedQueuing

指出當 TRUE時,迷你埠驅動程式可以支援 SCSI 標記的佇列。 當 FALSE時,迷你埠驅動程式無法支援 SCSI 標記的佇列。

AutoRequestSense

指出當 TRUE時,HBA 可以執行要求感知作業,而不需要明確要求。 當 FALSE時,HBA 需要明確要求,才能執行要求感知作業。 只有驅動具有內建韌體執行要求感知作業之 HBA 的迷你埠驅動程式,應將此成員設定為 TRUE

MultipleRequestPerLu

指出當 TRUE時,迷你埠驅動程式可以為每個邏輯單元排入多個要求佇列,特別是 HBA 內的多個要求。 當 FALSE時,迷你埠驅動程式無法為每個邏輯單元排入多個要求佇列。 請注意,HBA 必須支援其迷你埠驅動程序的自動要求感知,才能啟用此功能。 如果迷你埠驅動程式將此成員設定為 TRUE,則必須針對此類型的要求使用每個 SRB QueueTag 成員,但SRB_FLAGS_QUEUE_ACTION_ENABLE未在SCSI_REQUEST_BLOCK結構的 SrbFlags 成員中設定。

ReceiveEvent

指出當 TRUE時,迷你埠驅動程式會驅動 HBA 以支援 SCSI 異步事件的接收事件 SRB。 當 FALSE時,HBA 無法支援 SCSI 異步事件的接收事件 SRB。

VendorIdLength

指定 VendorId 字串的大小,如下所述。

VendorId

識別 HBA 製造商的 ASCII 位元組字串指標。 此成員與隨插即用驅動程序無關。

如果指定的 AdapterInterfaceTypePCIBus,則廠商標識元是由 PCI SIG 配置的 USHORT 值,而此值必須由迷你埠驅動程式轉換成位元組字元串。 例如,如果指派的PCI廠商標識碼值為1001,則迷你埠驅動程式提供的 VendorId 字串會是 ('1', '0', '0', '0', '0', '1')。

ReservedUshort

保留供系統使用,且無法供迷你埠驅動程式使用。

PortVersionFlags

DeviceIdLength

指定 DeviceId 字串的大小,如下所述。

DeviceId

識別迷你埠驅動程式所支援 HBA 模型的 ASCII 位元組字串指標。 此成員與隨插即用驅動程序無關。

如果指定的 AdapterInterfaceTypePCIBus,則裝置識別碼是由 HBA 製造商指派的 USHORT 值。 迷你埠驅動程序必須將 HBA 支援的任何 PCI 裝置識別碼值轉換為 DeviceId 位元組字串,至於 VendorId 成員。 例如,如果迷你埠驅動程式可以使用PCI裝置標識碼8040和8050來支援HBA,它可能會使用位元組位元串指標設定 DeviceId ('8', '0')。

HwAdapterControl

迷你埠驅動程式 HwScsiAdapterControl 例程的指標,這是所有 PnP 迷你埠驅動程式的必要進入點。 如果迷你埠驅動程式不支援隨插即用,請將此值設定為 NULL

言論

每個迷你埠驅動程式都必須使用零初始化HW_INITIALIZATION_DATA結構,才能設定此結構中相關成員的值,並呼叫 ScsiPortInitialize

Dma64BitAddresses 成員HW_INITIALIZATION_DATA已在 Windows 2000 中淘汰(如需進一步詳細數據,請參閱PORT_CONFIGURATION_DATA下的討論)。

HW_INITIALIZATION_DATA和PORT_CONFIGURATION_INFORMATION都有一組名為 SpecificLuExtensionSizeSrbExtensionSize 其值處理方式與 Windows 2000 之前不同的成員。 迷你埠驅動程序必須根據 HBA 能夠處理 32 位位址的假設,計算 SpecificLuExtensionSize 的初始值,並在 HW_INITIALIZATION_DATA 中 計算 SrbExtensionSize 的初始值。 (如需詳細資訊,請參閱PORT_CONFIGURATION_DATA下的討論。

要求

要求 價值
標頭 srb.h (包括 Srb.h、 Strmini.h)

另請參閱

SCSI 迷你埠驅動程式的 DriverEntry

HwScsiInitialize

SCSI_REQUEST_BLOCK

ScsiPortInitialize