Функция 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, в этом расширении, например состояние адаптера шины и сопоставленные диапазоны доступа. Эта область доступна драйверу мини-порта в элементе DeviceExtension-HwDeviceExtension> объекта устройства HBA сразу после того, как драйвер минипорта вызывает ScsiPortInitialize. Драйвер порта освобождает эту память при удалении устройства.
[in] BusType
Задает значение члена AdapterInterfaceType в структуре PORT_CONFIGURATION_INFORMATION при вызове HwScsiFindAdapter .
[in] SystemIoBusNumber
Указывает значение элемента SystemIoBusNumber в сведениях о конфигурации при вызове HwScsiFindAdapter .
[in] IoAddress
Указывает базовый адрес относительно шины для диапазона портов или памяти устройства, который необходимо проверить , прежде чем подпрограмма HwScsiFindAdapter драйвера мини-порта попытается сопоставить диапазон доступа для адаптера по указанному адресу.
[in] NumberOfBytes
Задает размер в байтах или количество элементов в диапазоне.
[in] InIoSpace
Указывает значение true, что диапазон находится в пространстве ввода-вывода, а не в памяти. При значении FALSE диапазон находится в памяти.
Возвращаемое значение
ScsiPortValidateRange возвращает значение TRUE , если подпрограмма HwScsiFindAdapter может безопасно сопоставлять и использовать сопоставленный диапазон для доступа к адаптеру. ScsiPortValidateRange возвращает значение FALSE , если указанные значения диапазона доступа уже были запрошены в реестре другим драйвером.
Комментарии
ScsiPortValidateRange можно вызывать только из подпрограммы HwScsiFindAdapter драйвера мини-порта. Вызовы из других подпрограмм драйвера минипорта приведут к сбою системы или неправильной работе вызывающего объекта.
Если драйвер порта для конкретной операционной системы инициализирует любой элемент AccessRanges структуры PORT_CONFIGURATION_INFORMATION перед вызовом подпрограммы HwScsiFindAdapter драйвера мини-порта, драйвер минипорта должен передать предоставленные значения в ScsiPortGetDeviceBase и использовать сопоставленные логические адреса для диапазона, чтобы определить, является ли адаптер HBA поддерживаемым.
Драйвер порта либо заполняет элемент типа ACCESS_RANGE полным описанием диапазона адресов адаптера относительно шины, либо драйвер порта обнуляет все элементы элемента.
Для входных элементов AccessRanges , заданных с нулями по умолчанию, подпрограмма HwScsiFindAdapter может попытаться найти адаптер, поддерживаемый в заданной шине ввода-вывода. В таких случаях драйвер минипорта обычно имеет набор определяемых драйвером адресов по умолчанию для его типов HBA. Однако ранее загруженный драйвер может уже использовать инициализированный адаптер в одном из диапазонов адресов по умолчанию этого драйвера минипорта, особенно в системах только x86, в которых некоторые устройства инициализируются в реальном режиме x86. Чтобы предотвратить непреднамеренное перепрограммированное устройство, подпрограмма HwScsiFindAdapter каждого драйвера мини-порта должна вызвать ScsiPortValidateRange , прежде чем сопоставлять любые адреса, предоставленные драйвером, с ScsiPortGetDeviceBase , а затем использовать сопоставленные логические адреса для опроса адаптеров в шине ввода-вывода.
Если 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 |