Функция 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. Эта область доступна для мини-драйвера в элементе DeviceExtension-HwDeviceExtension> объекта устройства HBA сразу после вызова драйвера мини-порта ScsiPortInitialize. Драйвер порта освобождает эту память при удалении устройства.

[in] Srb

Указатель на блок запроса SCSI, если объект VirtualAddress для преобразования поступает из этого элемента DataBuffer SRB или, возможно, из SenseInfoBuffer. В противном случае этот параметр должен иметь значение NULL.

[in] VirtualAddress

Указатель на преобразуемый базовый виртуальный адрес. Если этот виртуальный адрес попадает в диапазон для предоставленного SRB DataBuffer, вызывающий объект также должен предоставить указатель Srb .

[out] Length

Возвращает число сопоставленных байтов, начиная с возвращенного физического адреса.

Возвращаемое значение

ScsiPortGetPhysicalAddress возвращает соответствующий физический адрес для заданного VirtualAddress. Если указанный адрес не может быть преобразован, он возвращает значение NULL.

Комментарии

Мини-портовые драйверы главного контроллера нагрузки вызывают ScsiPortGetPhysicalAddress , чтобы получить сопоставленные диапазоны физических адресов, которые будут использоваться во время операций DMA. Например, ScsiPortGetPhysicalAddress можно использовать для создания точечных и сборных списков для передачи данных, охватывающих страницы. Обратите внимание, что возвращаемая длина может быть больше размера DataBuffer в заданном SRB.

Если передается Srb, отличный от NULL, VirtualAddress должен находиться в диапазоне DataBuffer SRB или должен быть указателем из SenseInfoBuffer. В противном случае указанный VirtualAddress должен находиться в некэшированном расширении драйвера мини-порта, SrbExtension или SenseInfoBuffer.

Драйвер минипорта может вызвать ScsiPortGetPhysicalAddress для преобразования адреса расширения только в том случае, если в HW_INITIALIZATION_DATA при вызове ScsiPortInitialize в драйвере DriverEntry этого минипорта для параметра NeedPhysicalAddressesзадано значение 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 .
 

Требования

   
Целевая платформа Рабочий стол
Заголовок srb.h (include Miniport.h, Scsi.h)
Библиотека Scsiport.lib

См. также раздел

DriverEntry драйвера минипорта SCSI

HW_INITIALIZATION_DATA (SCSI)

SCSI_REQUEST_BLOCK

ScsiPortGetUncachedExtension

ScsiPortGetVirtualAddress