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을 반환합니다.

설명

버스 master HBA의 미니포트 드라이버는 ScsiPortGetPhysicalAddress를 호출하여 DMA 작업 중에 사용할 매핑된 실제 주소 범위를 가져옵니다. 예를 들어 ScsiPortGetPhysicalAddress 를 사용하여 페이지에 걸쳐 있는 데이터 전송에 대한 분산/수집 목록을 작성할 수 있습니다. 반환되는 Length 는 지정된 SRB의 DataBuffer 크기보다 클 수 있습니다.

NULL이 아닌 Srb가 전달되는 경우 VirtualAddress는 SRB의 DataBuffer 범위 내에 있거나 SenseInfoBuffer의 포인터여야 합니다. 그렇지 않으면 지정된 VirtualAddress 가 미니포트 드라이버의 캐시되지 않은 확장, SrbExtension 또는 SenseInfoBuffer에 있어야 합니다.

미니포트 드라이버는 ScsiPortGetPhysicalAddress를 호출하여 해당 미니포트 드라이버의 DriverEntry 루틴이 ScsiPortInitialize를 호출할 때 HW_INITIALIZATION_DATA NeedPhysicalAddressesTRUE로 설정한 경우에만 확장 주소를 변환할 수 있습니다.

ISA와 같은 일부 버스의 제약 조건으로 인해 이 루틴에서 반환된 주소는 유사한 외부 루틴(예: MmGetPhysicalAddress)에서 반환된 주소와 일치하도록 보장되지 않습니다. 미니포트 드라이버는 이식 가능하도록 ScsiPortXxx 루틴만 호출해야 합니다.

ScsiPortGetPhysicalAddressSCSI_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 미니포트 드라이버의 DriverEntry

HW_INITIALIZATION_DATA(SCSI)

SCSI_REQUEST_BLOCK

ScsiPortGetUncachedExtension

ScsiPortGetVirtualAddress