共用方式為


ScsiPortGetDeviceBase 函式 (srb.h)

ScsiPortGetDeviceBase 例程會傳回可用來與 HBA 通訊的對應邏輯基位址。 每個迷你埠驅動程式都必須將對應的邏輯存取範圍位址傳遞至 ScsiPort。埠XxxScsiPort..註冊Xxx 例程,以與其 HBA () 通訊。

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

語法

SCSIPORT_API PVOID ScsiPortGetDeviceBase(
  [in] PVOID                 HwDeviceExtension,
  [in] INTERFACE_TYPE        BusType,
  [in] ULONG                 SystemIoBusNumber,
  [in] SCSI_PHYSICAL_ADDRESS IoAddress,
  [in] ULONG                 NumberOfBytes,
  [in] BOOLEAN               InIoSpace
);

參數

[in] HwDeviceExtension

硬體裝置擴充功能的指標。 這是埠驅動程式代表迷你埠驅動程式配置和初始化的每個 HBA 儲存區域。 迷你埠驅動程式通常會在此延伸模組中儲存 HBA 特定資訊,例如 HBA 的狀態和 HBA 的對應存取範圍。 此區域可在迷你埠驅動程式呼叫 ScsiPortInitialize 之後,立即提供給 HBA 裝置物件的 DeviceExtension-HwDeviceExtension> 成員。 埠驅動程式會在移除裝置時釋放此記憶體。

[in] BusType

指定 HBA 所連接之 I/O 總線的介面類型。 迷你埠驅動程式的 HwScsiFindAdapter 例程會從輸入PORT_CONFIGURATION_INFORMATION的 AdapterInterfaceType 成員取得此參數的值。

[in] SystemIoBusNumber

指定 HBA 所連接之 I/O 總線的系統指派號碼。 HwScsiFindAdapter 例程會從輸入PORT_CONFIGURATION_INFORMATION的 SystemIoBusNumber 成員取得此參數的值。

[in] IoAddress

指定 HBA 所使用範圍的總線相對基位址。 如果埠驅動程式提供範圍設定資訊, HwScsiFindAdapter 例程會從 PORT_CONFIGURATION_INFORMATION其中一個 AccessRanges 元素取得此參數的值。 否則,這個位址可以是 ScsiPortGetBusData 或迷你埠驅動程式提供的預設值所傳回的值。 避免使用零的基位址,因為其成功傳回狀態可能會與 NULL) (錯誤狀態衝突。

[in] NumberOfBytes

指定對應應涵蓋的範圍位元組大小。 如果埠驅動程式提供範圍設定資訊,HwScsiFindAdapter 例程會從與 IoAddress 相同的 AccessRanges 元素取得此參數的值。 否則, ScsiPortGetBusData 或提供迷你埠驅動程序的預設值可以傳回此值。 在任何情況下,驅動程式都不能存取傳回、對應範圍以外的硬體。

[in] InIoSpace

TRUE 表示要對應的範圍位於 I/O 空間中,而迷你埠驅動程式會將此範圍內的對應位址傳遞至 ScsiPort...要與 HBA 通訊的埠 XxxHwScsiFindAdapter 例程會從與 IoAddress 相同的 AccessRanges 元素取得此參數的值。 請注意,迷你埠驅動程式在傳遞至 ScsiPortGetDeviceBase 做為 InIoSpace 自變數之前,必須在ACCESS_RANGE類型元素中反轉InMemorySpace 成員的值。 FALSE 表示要對應的範圍位於記憶體空間中。

傳回值

如果指定的 IoAddress 成功將指定範圍從 IoAddress 對應至 NumberOfBytes,ScsiPortGetDeviceBase 會傳回所指定 IoAddress 的對應邏輯基位址。 如果無法對應指定的範圍, ScsiPortGetDeviceBase 會傳回 NULL

備註

NT 型作業系統平臺可以有數種類型的 I/O 總線,以及相同類型的數個 I/O 總線。 此外,HAL 可以將 I/O 空間對應至某些平臺中的記憶體。

因此,迷你埠驅動程序無法使用總線相對存取範圍位址與其 HBA 通訊。 若要維護 CISC 和 RISC 型機器之間的迷你埠驅動程式可移植性,必須使用 ScsiPortGetDeviceBase 轉譯它們用來存取 HBA 的位址。

每個迷你埠驅動程式都必須使用 ScsiPortGetDeviceBase 所對應的系統空間邏輯範圍位址,與其 HBA (s) 通訊。 對 ScsiPort 的呼叫...埠/註冊Xxx 例程需要這些對應的邏輯位址。

ScsiPortGetDeviceBase 可以呼叫數次,視迷你埠驅動程序支援多少 HBA,以及每個 HBA 所需的存取範圍數目而定。 每個對應的範圍都會對應至 AccessRanges 陣列的 ACCESS_RANGE 類型專案中指定的總線相對裝置地址範圍。

只有在控件類型為 ScsiSetRunningConfig 時,才能從迷你埠驅動程式的 HwScsiFindAdapter 例程或從 HwScsiAdapterControl 呼叫 ScsiPortGetDeviceBase。 來自其他迷你埠驅動程式例程的呼叫會導致系統失敗或呼叫端的作業不正確。

請遵循下列指導方針來呼叫 ScsiPortGetDeviceBase

  • 如果 HwScsiFindAdapter 使用一組迷你埠驅動程式提供的預設總線相對存取範圍或 ScsiPortGetBusData 所傳回的值,它應該先呼叫 ScsiPortValidateRange ,再嘗試呼叫 ScsiPortGetDeviceBase
  • 如果 HwScsiFindAdapter 判斷特定 HBA 不是迷你埠驅動程式支援的 HBA,則必須呼叫 ScsiPortFreeDeviceBase 來釋放對應 (s) 它設定為與該 HBA 通訊。
ScsiPortGetDeviceBase 所傳回的邏輯位址應該用於對硬體進行的所有後續參考,但不應該新增至PORT_CONFIGURATION_INFORMATION中的任何 AccessRanges 規格。 迷你埠驅動程式寫入器不應該假設 ScsiPortGetDeviceBase 所傳回的邏輯基位址中使用多少位。

ScsiPortGetDeviceBase 會使用 SCSI_PHYSICAL_ADDRESS 來代表總線相對位址。

typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS, *PSCSI_PHYSICAL_ADDRESS;

SCSI_PHYSICAL_ADDRESS類型是操作系統無關的數據類型,SCSI 迷你埠驅動程式用來代表實體位址或總線相對位址。

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

規格需求

需求
目標平台 桌面
標頭 srb.h (包括 Miniport.h、Scsi.h)
程式庫 Scsiport.lib

另請參閱

ACCESS_RANGE

HwScsiFindAdapter

PORT_CONFIGURATION_INFORMATION (SCSI)

ScsiPortFreeDeviceBase

ScsiPortGetBusData

ScsiPortValidateRange