共用方式為


ScsiPortGetPhysicalAddress 函式 (srb.h)

ScsiPortGetPhysicalAddress 例程會將指定的虛擬位址範圍轉換為 DMA 作業的實體地址範圍。

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

語法

SCSIPORT_API SCSI_PHYSICAL_ADDRESS ScsiPortGetPhysicalAddress(
  [in]  PVOID               HwDeviceExtension,
  [in]  PSCSI_REQUEST_BLOCK Srb,
  [in]  PVOID               VirtualAddress,
  [out] ULONG               *Length
);

參數

[in] HwDeviceExtension

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

[in] Srb

如果要轉換的 VirtualAddress 來自該 SRB DataBuffer 成員,或可能來自 SenseInfoBuffer,則 SCSI 要求區塊的指標。 否則,此參數必須 NULL

[in] VirtualAddress

要轉換之基底虛擬位址的指標。 如果此虛擬位址落在 SRB 提供的 DataBuffer範圍內,則呼叫端也必須提供 Srb 指標。

[out] Length

傳回對應位元組數目,從傳回的實體地址開始。

傳回值

ScsiPortGetPhysicalAddress 會傳回指定 VirtualAddress的對應實體位址。 如果無法轉換指定的位址,它會傳回 null

言論

總線主機 HBA 的迷你埠驅動程式會呼叫 ScsiPortGetPhysicalAddress,以取得在 DMA 作業期間要使用的對應實體位址範圍。 例如,ScsiPortGetPhysicalAddress 可用來建置散佈/收集清單,以用於跨越頁面的數據傳輸。 請注意,傳回 長度 可以大於指定 SRB 中 DataBuffer 的大小。

如果傳遞非NULLSrbVirtualAddress 必須位於 SRB DataBuffer 的範圍內,或必須是來自 SenseInfoBuffer的指標。 否則,指定的 VirtualAddress 必須位於迷你埠驅動程式的未快取擴充功能、SrbExtension SenseInfoBuffer中。

小型埠驅動程式只能呼叫 ScsiPortGetPhysicalAddress,只有當該迷你埠驅動程式的 DriverEntry 例程設定為 NeedPhysicalAddresses,以在呼叫 ScsiPortInitialize時,才能呼叫 HW_INITIALIZATION_DATA 中的 TRUE

由於某些公交車的限制,例如 ISA,此例程傳回的地址不保證符合類似外部例程傳回的位址(例如 MmGetPhysicalAddress)。 迷你埠驅動程序應該只呼叫 ScsiPortXxx 例程才能移植。

ScsiPortGetPhysicalAddress 會使用 SCSI_PHYSICAL_ADDRESS 來代表實體位址。

typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS, *PSCSI_PHYSICAL_ADDRESS;

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

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

要求

要求 價值
目標平臺 桌面
標頭 srb.h (include Miniport.h, Scsi.h)
連結庫 Scsiport.lib

另請參閱

SCSI 迷你埠驅動程式的 DriverEntry

HW_INITIALIZATION_DATA (SCSI)

SCSI_REQUEST_BLOCK

ScsiPortGetUncachedExtension

ScsiPortGetVirtualAddress