共用方式為


ScsiPortGetPhysicalAddress 函式 (srb.h)

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

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

語法

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 之後,立即提供給 HBA 裝置物件的 DeviceExtension-HwDeviceExtension> 成員。 埠驅動程式會在移除裝置時釋放此記憶體。

[in] Srb

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

[in] VirtualAddress

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

[out] Length

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

傳回值

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

備註

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

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

迷你埠驅動程式可以呼叫 ScsiPortGetPhysicalAddress,只有在該迷你埠驅動程式的 DriverEntry 例程將 NeedPhysicalAddresses 設定為 TRUE 時,才會在 HW_INITIALIZATION_DATA呼叫 ScsiPortInitialize 時呼叫 ScsiPortInitialize

由於某些總線的條件約束,例如 ISA,此例程所傳回的位址不保證符合類似外部例程所傳回的位址 (,例如 MmGetPhysicalAddress) 。 迷你埠驅動程序應該只呼叫 ScsiPortXxx 例程才能移植。

ScsiPortGetPhysicalAddress 會使用 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

另請參閱

SCSI Miniport 驅動程式的 DriverEntry

HW_INITIALIZATION_DATA (SCSI)

SCSI_REQUEST_BLOCK

ScsiPortGetUncachedExtension

ScsiPortGetVirtualAddress