共用方式為


PORT_CONFIGURATION_INFORMATION結構 (srb.h)

PORT_CONFIGURATION_INFORMATION (SCSI) 包含 HBA 的組態資訊。 OS 特定的埠驅動程式會配置並初始化此結構、盡可能提供 HBA 特定的設定資訊,並將結構傳遞至迷你埠驅動程式的 HwScsiFindAdapter 例程。 埠驅動程式會從迷你埠驅動程式的 HW_INITIALIZATION_DATA 結構中取得此結構的一些資訊。 迷你埠驅動程式的 HwScsiFindAdapter 例程負責判斷迷你埠驅動程式是否可以支援 HBA,如果是的話,則用來填入PORT_CONFIGURATION_INFORMATION結構中相關的剩餘資訊。

注意

未來可能會變更或無法使用 SCSI 埠驅動程式和 SCSI 迷你埠驅動程式模型。 請改用 Storport 驅動程式Storport miniport 驅動程式模型。

語法

typedef struct _PORT_CONFIGURATION_INFORMATION {
  ULONG           Length;
  ULONG           SystemIoBusNumber;
  INTERFACE_TYPE  AdapterInterfaceType;
  ULONG           BusInterruptLevel;
  ULONG           BusInterruptVector;
  KINTERRUPT_MODE InterruptMode;
  ULONG           MaximumTransferLength;
  ULONG           NumberOfPhysicalBreaks;
  ULONG           DmaChannel;
  ULONG           DmaPort;
  DMA_WIDTH       DmaWidth;
  DMA_SPEED       DmaSpeed;
  ULONG           AlignmentMask;
  ULONG           NumberOfAccessRanges;
  ACCESS_RANGE( )   *AccessRanges[];
  PVOID           Reserved;
  UCHAR           NumberOfBuses;
  UCHAR           InitiatorBusId[8];
  BOOLEAN         ScatterGather;
  BOOLEAN         Master;
  BOOLEAN         CachesData;
  BOOLEAN         AdapterScansDown;
  BOOLEAN         AtdiskPrimaryClaimed;
  BOOLEAN         AtdiskSecondaryClaimed;
  BOOLEAN         Dma32BitAddresses;
  BOOLEAN         DemandMode;
  BOOLEAN         MapBuffers;
  BOOLEAN         NeedPhysicalAddresses;
  BOOLEAN         TaggedQueuing;
  BOOLEAN         AutoRequestSense;
  BOOLEAN         MultipleRequestPerLu;
  BOOLEAN         ReceiveEvent;
  BOOLEAN         RealModeInitialized;
  BOOLEAN         BufferAccessScsiPortControlled;
  UCHAR           MaximumNumberOfTargets;
  UCHAR           ReservedUchars[2];
  ULONG           SlotNumber;
  ULONG           BusInterruptLevel2;
  ULONG           BusInterruptVector2;
  KINTERRUPT_MODE InterruptMode2;
  ULONG           DmaChannel2;
  ULONG           DmaPort2;
  DMA_WIDTH       DmaWidth2;
  DMA_SPEED       DmaSpeed2;
  ULONG           DeviceExtensionSize;
  ULONG           SpecificLuExtensionSize;
  ULONG           SrbExtensionSize;
  UCHAR           Dma64BitAddresses;
  BOOLEAN         ResetTargetSupported;
  UCHAR           MaximumNumberOfLogicalUnits;
  BOOLEAN         WmiDataProvider;
} PORT_CONFIGURATION_INFORMATION, *PPORT_CONFIGURATION_INFORMATION;

成員

Length

指定這個結構的大小,以位元組為單位。 實際上,這個成員一律由OS特定埠驅動程式初始化,表示埠驅動程式所使用的這個結構版本。

SystemIoBusNumber

指定 HBA 所連接的 I/O 總線系統指派數目。 OS 特定的埠驅動程式一律會初始化這個成員。 其值是系統指派的,因為平臺可能有數個指定 AdapterInterfaceType的 I/O 總線。

AdapterInterfaceType

識別 I/O 總線介面。 OS 特定的埠驅動程式一律會將這個成員設定為 HW_INITIALIZATION_DATA (SCSI) 結構中迷你埠驅動程式所指定的值。

BusInterruptLevel

指定總線相對中斷要求層級。 OS 特定的埠驅動程式不會假設 HBA 的中斷使用量,因此預設值為零。 根據指定的 AdapterInterfaceType 和 HBA,為這個成員設定的值可以對應至總線的 IRQL,例如 IsaMicroChannel 類型總線。 如果適配卡設定為區分層級中斷,Eisa HBA 的驅動程序必須將此值設定為 HBA 的總線相對 IRQL。

BusInterruptVector

指定 HBA 所傳回的總線相對向量。 OS 特定的埠驅動程式不會假設 HBA 的中斷使用量,因此預設值為零。 此成員與為 HBA 設定 BusInterruptLevel 成員的驅動程序無關。 這與使用插斷向量之 I/O 總線類型的 HBA 相關,例如 PCIBus

InterruptMode

指定 HBA 使用 LevelSensitive闩鎖(有時稱為「邊緣觸發」)中斷。 OS 特定的埠驅動程式會將此成員初始化為總線的適當值,例如,LevelSensitivePCIBusEisa HBA 的驅動程式必須重設此值,如果適配卡設定為區分層級的中斷,就如同使用層級敏感中斷之 I/O 總線上的 HBA 驅動程式,例如 MicroChannel 類型總線。

MaximumTransferLength

指定 HBA 可以在單一傳輸作業中傳輸的最大位元元數目。 根據預設,此成員的值是SP_UNINITIALIZED_VALUE,表示傳輸大小無限制。 如果 HBA 的傳輸支援有限,迷你埠驅動程式必須根據 HBA 的傳輸容量重設此成員。 如果迷你埠驅動程式的 HwScsiInterrupt 例程無法停用 HBA 上的中斷,則可以在驅動程式開發期間調整此成員,以確保花費在該迷你埠驅動程式 ISR 中的時間不會讓滑鼠「跳躍」或序列/平行輸送量下降到使用者可注意到的層級。

NumberOfPhysicalBreaks

指定 HBA 支援散佈/收集時,數據緩衝區可以擁有之位址範圍之間的中斷數目上限。 換句話說,散佈/收集清單的數目減一。 根據預設,這個成員的值是SP_UNINITIALIZED_VALUE,這表示 HBA 可以支援無限數量的實體不連續。 如果埠驅動程式為此成員設定值,迷你埠驅動程式可以調整較低的值,但不會更高。 如果此成員SP_UNINITIALIZED_VALUE,迷你埠驅動程序必須根據 HBA 的散佈/收集容量重設此成員,零代表沒有散佈/收集支援。

DmaChannel

指定次級 HBA 所使用的 DMA 通道。 根據預設,這個成員的值是SP_UNINITIALIZED_VALUE。 如果 HBA 使用系統 DMA 控制器,且指定的 AdapterInterfaceType 除了 MicroChannel以外的任何值,迷你埠驅動程式必須重設此成員。

DmaPort

指定次級 HBA 所使用的 DMA 埠。 根據預設,這個成員的值是SP_UNINITIALIZED_VALUE。 如果 HBA 使用系統 DMA 控制器,且指定的 AdapterInterfaceTypeMicroChannel,則迷你埠驅動程式必須設定此成員。

DmaWidth

如果 HBA 使用 DMA,則指定 DMA 傳輸的寬度。 根據預設,這個成員的值是零。 如果 HBA 執行 DMA,迷你連接埠驅動程式必須將此成員重設為下列其中一個:Width8BitsWidth16BitsWidth32Bits

DmaSpeed

指定 Eisa HBA 的 DMA 資料傳送速率。 根據預設,這個成員的值會指定相容性時間。 此成員可接受的值為下列任何一項:相容TypeATypeBTypeC

AlignmentMask

包含遮罩,指出 HBA 針對傳輸作業所需的緩衝區對齊限制。 有效遮罩值也會受到不同 Windows 版本記憶體管理員的特性所限制。 在 Windows 95 或 Windows 98 下允許的遮罩值是 0(位元組對齊)、1(文字對齊)或 3(DWORD 對齊)。 在 Windows NT 和 Windows 2000 下,有效的遮罩值是 0(位元組對齊)、1 (字對齊)、3 (DWORD 對齊) 和 7 (雙 DWORD 對齊)。 如果 HBA 支援散佈/收集,迷你埠驅動程式應該設定此遮罩。

NumberOfAccessRanges

指定陣列中 AccessRanges 元素的數目,如下所述。 當名為 ScsiPortInitialize 的迷你埠驅動程式時,OS 特定埠驅動程式一律會將這個成員設定為傳入HW_INITIALIZATION_DATA 結構中的值。

AccessRanges

Reserved

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

NumberOfBuses

指定 HBA 所控制的 SCSI 總線數目。 根據預設,這個成員的值是零。

InitiatorBusId[8]

表示啟動器總線標識碼。 如果輸入 InitiatorBusId[0] 的值為零,則如果迷你埠驅動程式不需要使用 HBA 所決定的特定值,則可以指派預設值。 否則,迷你埠驅動程序應該盡可能使用埠驅動程式指派的任何非零值。 每個迷你埠驅動程式都必須更新 InitiatorBusId 規格,以符合其 HBA 使用的內容,如有必要,請查詢 HBA 以判斷適當的值。

迷你埠驅動程序必須設定 HBA 所支援之每個 SCSI 總線的專案,如 numberOfBuses 值所指示。

ScatterGather

指出 HBA 支援散佈/收集 TRUEFALSE HBA 不支援散佈/收集。 根據預設,這個成員的值會 FALSE

Master

指出 HBA 是總線主機 TRUE。 當 FALSE時,HBA 不是公共汽車主機。 根據預設,這個成員的值會 FALSE

CachesData

指出 TRUE HBA 快取數據或維護周邊上的快取狀態。 FALSE HBA 不會快取數據或維護周邊上的快取狀態。 根據預設,這個成員的值會 FALSE。 如果這會重設為 TRUE,OS 特定的埠驅動程式會在發生特定系統事件時通知迷你埠驅動程式,例如文件系統快取排清和系統關機。 例如,如果總線上的控制器鏡像兩個磁碟,迷你埠驅動程式通常會將此成員設定為 TRUE

AdapterScansDown

指出 TRUE HBA 的 BIOS 掃描 SCSI 總線目標從 7 到零。 當 FALSE時,HBA 的 BIOS 會尋找 SCSI 總線目標,從標識元零開始,並向上掃描到 (但不包括)MaximumTargetIds。 根據預設,AdapterScansDown 的值會 FALSE

AtdiskPrimaryClaimed

指出 TRUE 主要 「AT」 (WD1003 相容) 磁碟位址範圍,0x1F0 0x1FF,已由另一個驅動程式在其裝置的登錄中宣告。 OS 特定的埠驅動程式一律會初始化這個成員。 如果這個成員的輸入值 TRUE,迷你埠驅動程式應該假設已載入的驅動程式已宣告裝置範圍。 如果輸入值 FALSE,則迷你埠驅動程式可以宣告模擬 “AT” 磁碟控制器的 HBA 位址範圍,並將此成員重設為 TRUE,藉此防止由 “AT” 磁碟驅動器或後續載入的迷你埠驅動程式存取此範圍。

AtdiskSecondaryClaimed

指出何時 TRUE 次要 AT 磁碟位址範圍,0x170 0x17F已被另一個驅動程式在其裝置的登錄中宣告。 當 FALSE 時, 另一個驅動程式尚未在登錄中宣告次要 AT 磁碟位址範圍。 OS 特定的埠驅動程式一律會初始化這個成員。 迷你連接埠驅動程式應將此成員視為 AtdiskPrimaryClaimed

Dma32BitAddresses

指出 TRUE HBA 有 32 個位址行,而且可以使用大於 0x00FFFFFF 的實體位址來存取記憶體。 當 FALSE HBA 有 32 以外的 DMA 位址行數目。 根據預設,這個成員的值會 FALSE。 如果迷你連接埠驅動程式設定 Dma64BitAddresses,這個成員必須 FALSE

DemandMode

指出何時 TRUE 系統 DMA 控制器應該針對需求模式進行程序設計,而不是單一循環作業。 如果 HBA 不是次級裝置,則此成員應該 FALSE

MapBuffers

指出 TRUE 數據緩衝區必須對應至系統虛擬位址範圍。 FALSE 數據緩衝區不需要對應至系統虛擬位址。 當小型埠驅動程式呼叫 ScsiPortInitialize時,OS 特定的埠驅動程式一律會將這個成員設定為傳入 HW_INITIALIZATION_DATA (SCSI) 結構中的值。 迷你埠驅動程式可以針對它所控制的任何特定 HBA 重設此值。 如果 FALSE,迷你埠驅動程式就不能直接存取 Srb.DataBuffer

NeedPhysicalAddresses

指出 TRUE 迷你埠驅動程式必須視 HBA 的要求,將虛擬位址轉譯為實體位址。 當 FALSE時,迷你埠驅動程式不需要將虛擬位址轉譯為實體位址。 當小型埠驅動程式呼叫 ScsiPortInitialize時,OS 特定的埠驅動程式一律會將這個成員設定為傳入 HW_INITIALIZATION_DATA (SCSI) 結構中的值。 迷你埠驅動程式可以針對它所控制的任何特定 HBA 重設此值。

TaggedQueuing

指出 TRUE HBA 支援使用 SCSI 標籤佇列多個要求。 FALSE時,HBA 不支援 SCSI 標記的佇列。 當小型埠驅動程式呼叫 ScsiPortInitialize時,OS 特定的埠驅動程式一律會將這個成員設定為傳入 HW_INITIALIZATION_DATA (SCSI) 結構中的值。 迷你埠驅動程式可以針對它所控制的任何特定 HBA 重設此值。

AutoRequestSense

指出 HBA 支援自動要求感知 TRUEFALSE HBA 不支援自動要求感知。 當小型埠驅動程式呼叫 ScsiPortInitialize時,OS 特定的埠驅動程式一律會將這個成員設定為傳入 HW_INITIALIZATION_DATA (SCSI) 結構中的值。 迷你埠驅動程式可以針對它所控制的任何特定 HBA 重設此值。 在總線主機 HBA 的驅動程式 ScsiPortGetUncachedExtension之前,這個成員必須設定為 TRUE

MultipleRequestPerLu

指出 HBA 支援每個邏輯單元多個要求 TRUE。 當 FALSE HBA 不支援每個邏輯單元的多個要求。 配接器快取要求的機制是配接器定義的。 當小型埠驅動程式呼叫 ScsiPortInitialize時,OS 特定的埠驅動程式一律會將這個成員設定為傳入 HW_INITIALIZATION_DATA (SCSI) 結構中的值。 迷你埠驅動程式可以針對它所控制的任何特定 HBA 重設此值。

ReceiveEvent

指出 HBA 支援 SCSI 接收事件作業 TRUEFALSE HBA 不支援 SCSI 接收事件作業。 當小型埠驅動程式呼叫 ScsiPortInitialize時,OS 特定的埠驅動程式一律會將這個成員設定為傳入 HW_INITIALIZATION_DATA (SCSI) 結構中的值。 迷你埠驅動程式可以針對它所控制的任何特定 HBA 重設此值。

RealModeInitialized

指出 TRUE 已初始化 HBA 的僅限 x86 實模式驅動程式。 當 FALSE HBA 之前尚未由真實模式驅動程式初始化。 OS 相依埠驅動程式一律會初始化這個成員。 如果設定為 TRUE,則如果驅動程式的初始化順序與實際模式 HBA 初始化相同,迷你埠驅動程式就不得初始化其 HBA;在這些情況下,不會重新初始化 HBA,使得迷你埠驅動程式載入的速度會更快。 這個成員的值與任何在 x86 型平臺上以受保護模式執行時一律初始化其 HBA 的迷你埠驅動程式,以及不論它們是在 CISC 或 RISC 型平臺上執行,都無關緊要。

BufferAccessScsiPortControlled

指出 TRUE 迷你埠驅動程式一律會呼叫 ScsiPortXxx,以存取 SRB 中的數據緩衝區和/或要求感知資訊,藉此讓 OS 特定的埠驅動程式優化 I/O 要求處理。 當 FALSE 迷你埠驅動程式不需要呼叫 ScsiPortXxx 例程來存取數據緩衝區或要求感知資訊。 將此成員設定為 FALSE 可能會降低 HBA 的 I/O 效能。 呼叫 ScsiPortXxx 以外的例程,讓小型埠驅動程式無法跨Microsoft作系統移植。

MaximumNumberOfTargets

指定 HBA 可以控制的目標周邊數目。 根據預設,此成員的值會根據 SCSI 標準SCSI_MAXIMUM_TARGETS。 如果 HBA 的功能有限或值較大,迷你埠驅動程式可以將這個成員重設為較小的值,表示 HBA 具有寬 SCSI 或光纖通道功能。 此值限制為 SCSI_MAXIMUM_TARGETS_PER_BUS。

ReservedUchars[2]

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

SlotNumber

指定 HBA 的插槽編號,其值與 VendorIdDeviceId,當名為 ScsiPortInitialize時,HW_INITIALIZATION_DATA (SCSI) 結構中所指定的 DeviceId。

BusInterruptLevel2

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

BusInterruptVector2

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

InterruptMode2

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

DmaChannel2

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

DmaPort2

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

DmaWidth2

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

DmaSpeed2

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

DeviceExtensionSize

指定迷你埠驅動程序針對每個 HBA 裝置擴充功能所需的位元組大小,以處理大於 64K 的數據傳輸,這可能需要比此驅動程式登錄中定義的大小更大的散佈/收集清單。

SpecificLuExtensionSize

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

SrbExtensionSize

指定迷你埠驅動程序針對每個要求記憶體所需的位元組大小,如果有的話,處理大於 64K 的數據傳輸。 先設定此成員,再呼叫 ScsiPortGetUncachedExtension,以根據 numberOfPhysicalBreaks numberOfPhysicalBreaks變更每個要求記憶體的大小。 如果迷你埠驅動程式不維護需要記憶體的每個SRB資訊,請將此成員設定為零。 此值是以 HBA 能夠接收 32 位位址的假設為基礎,而不論控制器可實際支持什麼。 如果 LUN 或 SRB 擴充功能中需要額外的空間來處理 64 位位址,則必須先對此值進行適當的調整,才能將它與 ScsiPortGetUncachedExtension等例程搭配使用。

Dma64BitAddresses

指出 HBA 能夠存取大於 4 GB 的位址,或0x0FFFFFFFF如果 Dma64BitAddresses 包含值SCSI_DMA64_MINIPORT_SUPPORTED。 在 Windows 2000 之前,ScsiPort 會根據 HW_INITIALIZATION_DATA (SCSI)的內容來設定此值。 情況不再是這樣。 在 Windows 2000 中,Dma64BitAddresses 的值是由單獨 HwScsiFindAdapter 迷你埠驅動程式回呼所決定。 如果作系統支援 64 位位址空間,埠驅動程式會將 SCSI_DMA64_SYSTEM_SUPPORTED 的值傳遞給此成員中的迷你埠驅動程式。 如果PORT_CONFIGURATION_INFORMATION所述的 HBA 也支援大於 32 位的地址空間,則需要埠/迷你埠驅動程式才能支援完整的 64 位尋址, 和迷你埠驅動程式的回呼 HwScsiFindAdapter 會藉由將SCSI_DMA64_MINIPORT_SUPPORTED值指派給 Dma64BitAddresses,以寫入埠驅動程式指派的任何先前值來表示這個值。 在迷你埠驅動程式呼叫 ScsiPortGetUncachedExtension之前,必須將正確的值指派給 Dma64BitAddresses 成員。

ResetTargetSupported

過時。 ScsiPort 驅動程式不再將SRB_FUNCTION_RESET_DEVICE要求傳送至其迷你埠驅動程式。 請勿使用此成員。

MaximumNumberOfLogicalUnits

指定 HBA 可以控制的每個目標邏輯單元數目上限。 根據預設,這個成員的值是SCSI_MAXIMUM_LOGICAL_UNITS。 如果 HBA 的功能有限或值較大,迷你埠驅動程式可以將這個成員重設為較小的值,表示 HBA 具有 SCSI-3 功能。

WmiDataProvider

指出 TRUE 迷你埠驅動程序回應 Windows Management Instrumentation (WMI) 要求。 FALSE 迷你埠驅動程式不會回應 Windows Management Instrumentation (WMI) 要求。 根據預設,這個成員的值會 FALSE

言論

初始化的特定成員取決於 HBA 迷你埠驅動程式,以及 OS 特定埠驅動程式可用的組態資訊。 OS 特定的埠驅動程式會在無法提供組態資訊給迷你埠驅動程式 HwScsiFindAdapter 例程的所有成員中設定預設值。

如果 OS 特定埠驅動程式未傳入所有已初始化的值,則所有 HBA 迷你埠驅動程式至少應該有一組預設值可供相關成員使用。

HwScsiFindAdapter 例程必須更新與驅動程式支援的 HBA 相關的所有成員。

載入比迷你埠驅動程式晚的 Windows NT 儲存類別驅動程式,取決於每個迷你埠驅動程式 HwScsiFindAdapter 所提供的資訊, 例程來設定其後續的 I/O 要求。 例如,MaximumTransferLengthNumberOfPhysicalBreaks 每個迷你埠驅動程式所提供的值會控制類別驅動程式是否必須將大型傳輸要求分割成一組部分傳輸,以符合 HBA 的限制。

Dma64BitAddresses PORT_CONFIGURATION_INFORMATION 成員不應再視為 BOOLEAN 值。 SCSI_DMA64_SYSTEM_SUPPORTED值表示埠/迷你埠驅動程式需要支援 64 位尋址,但 ScsiPortGetUncachedExtension 例程仍會解譯任何非零值 Dma64BitAddresses,表示需要 64 位支援。 這表示 ScsiPortGetUncachedExtension 在舊版驅動程式呼叫時仍可正常運作,此驅動程式會將 BOOLEAN 值指派給 Dma64BitAddresses

除了 Dma64BitAddresses之外,PORT_CONFIGURATION_INFORMATION 和 HW_INITIALIZATION_DATA 還有一組名為 SpecificLuExtensionSizeSrbExtensionSize 的成員,其值現在必須以不同的方式處理。 迷你埠驅動程序必須根據 HBA 能夠接收 32 位位址的假設,計算 SpecificLuExtensionSizeSrbExtensionSize HW_INITIALIZATION_DATA 的初始值。 PORT_CONFIGURATION_INFORMATION 中 SpecificLuExtensionSizeSrbExtensionSize 的預設值也會以 32 位尋址的假設為基礎,因為PORT_CONFIGURATION_INFORMATION中的值衍生自HW_INITIALIZATION_DATA中的值。

這表示如果迷你連接埠驅動程式在 LUN 擴充功能或 SRB 擴充功能中需要額外的空間,才能處理 64 位實體位址, 它必須修改 SpecificLuExtensionSize 的值,並在 PORT_CONFIGURATION_INFORMATION 中 SrbExtensionSize 來考慮此值,再將PORT_CONFIGURATION_INFORMATION傳遞至 ScsiPortGetUncachedExtension

要求

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

另請參閱

ACCESS_RANGE

HW_INITIALIZATION_DATA (SCSI)

HwScsiFindAdapter

ScsiPortGetDeviceBase

ScsiPortGetUncachedExtension

ScsiPortInitialize

ScsiPortValidateRange