ScsiPortValidateRange 函式 (srb.h)
ScsiPortValidateRange 例程指出指定的存取範圍值是否已由另一個驅動程式在登錄中宣告。
語法
SCSIPORT_API BOOLEAN ScsiPortValidateRange(
[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
指定呼叫 HwScsiFindAdapter 時,PORT_CONFIGURATION_INFORMATION 結構中 AdapterInterfaceType 成員的值。
[in] SystemIoBusNumber
指定呼叫 HwScsiFindAdapter 時,組態資訊中的 SystemIoBusNumber 成員值。
[in] IoAddress
指定在迷你埠驅動程式的 HwScsiFindAdapter 例程嘗試對應適配卡存取範圍之前,要驗證埠或裝置記憶體範圍的總線相對基位址。
[in] NumberOfBytes
以位元組為單位或範圍中的元素數目指定大小。
[in] InIoSpace
指出範圍在 I/O 空間中,而不是記憶體中的 TRUE。 當為 FALSE 時,範圍會位於記憶體空間中。
傳回值
如果 HwScsiFindAdapter 例程可以安全地對應並使用對應的範圍來存取配接器,ScsiPortValidateRange 會傳回 TRUE。 如果指定的存取範圍值已經由另一個驅動程式在登錄中宣告,ScsiPortValidateRange 會傳回 FALSE。
備註
ScsiPortValidateRange 只能從迷你埠驅動程式的 HwScsiFindAdapter 例程呼叫。 來自其他迷你埠驅動程式例程的呼叫會導致呼叫端的系統失敗或不正確的作業。
如果操作系統特定的埠驅動程式在呼叫 miniport 驅動程式的 HwScsiFindAdapter 例程之前,初始化 PORT_CONFIGURATION_INFORMATION 結構的任何 AccessRanges 元素,則迷你埠驅動程式必須將所提供的值傳遞至 ScsiPortGetDeviceBase,並使用該範圍的對應邏輯位址來判斷 HBA 是否為它支援的值。
埠驅動程式會填入ACCESS_RANGE類型專案,並完整描述適配卡的總線相對位址範圍,或埠驅動程式會零元素的所有成員。
針對以預設零設定的輸入 AccessRanges 元素, HwScsiFindAdapter 例程可以嘗試找出在指定的 I/O 總線上支援的適配卡。 在這些情況下,迷你埠驅動程式通常會有一組驅動程式決定的默認位址,其類型 (HBA) 。 不過,先前載入的驅動程式可能已經在此迷你埠驅動程序的預設位址範圍之一使用初始化的適配卡,特別是在某些裝置在 x86 實際模式中初始化的僅限 x86 系統中。 為了防止這類裝置不小心重新撰寫程式,每個迷你埠驅動程式的 HwScsiFindAdapter 例程都應該呼叫 ScsiPortValidateRange ,再將任何驅動程式提供的位址與 ScsiPortGetDeviceBase 對應,然後使用對應的邏輯地址來查詢 I/O 總線上的適配卡。
如果 ScsiPortValidateRange 傳回 FALSE,HwScsiFindAdapter 不得嘗試對應輸入範圍地址,因為另一個驅動程式已經宣告登錄中的範圍。
如果 ScsiPortValidateRange 傳回 TRUE,HwScsiFindAdapter 可以安全地執行下列動作:
- 使用 ScsiPortGetDeviceBase 將總線相對範圍地址對應至系統空間邏輯範圍位址。
- 使用對應邏輯位址搭配 ScsiPortRead/WriteXxx ,判斷適配卡是否實際上是驅動程式支援的 HBA。
ScsiPortValidateRange 會使用 SCSI_PHYSICAL_ADDRESS 來表示總線相對位址。
typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS, *PSCSI_PHYSICAL_ADDRESS;
SCSI_PHYSICAL_ADDRESS類型是操作系統無關的數據類型,SCSI 迷你埠驅動程式用來代表實體位址或總線相對位址。
規格需求
需求 | 值 |
---|---|
目標平台 | 桌面 |
標頭 | srb.h (包括 Miniport.h、Scsi.h) |
程式庫 | Scsiport.lib |