다음을 통해 공유


ScsiPortValidateRange 함수(srb.h)

ScsiPortValidateRange 루틴은 지정된 액세스 범위 값이 다른 드라이버에 의해 레지스트리에서 이미 클레임되었는지 여부를 나타냅니다.

참고 SCSI 포트 드라이버 및 SCSI 미니포트 드라이버 모델은 나중에 변경되거나 사용할 수 없습니다. 대신 Storport 드라이버Storport 미니포트 드라이버 모델을 사용하는 것이 좋습니다.
 

구문

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

TRUE이면 범위가 메모리가 아닌 I/O 공간에 있음을 나타냅니다. FALSE이면 범위가 메모리 공간에 있습니다.

반환 값

HwScsiFindAdapter 루틴이 매핑된 범위를 안전하게 매핑하고 사용하여 어댑터에 액세스할 수 있는 경우 ScsiPortValidateRangeTRUE를 반환합니다. 지정된 액세스 범위 값이 다른 드라이버에 의해 레지스트리에서 이미 클레임된 경우 ScsiPortValidateRangeFALSE를 반환합니다.

설명

ScsiPortValidateRange 는 미니포트 드라이버의 HwScsiFindAdapter 루틴에서만 호출할 수 있습니다. 다른 미니포트 드라이버 루틴에서 호출하면 호출자에 대한 시스템 오류 또는 잘못된 작업이 발생합니다.

운영 체제별 포트 드라이버가 미니포트 드라이버의 HwScsiFindAdapter 루틴을 호출하기 전에 PORT_CONFIGURATION_INFORMATION 구조의 AccessRanges 요소를 초기화하는 경우 미니포트 드라이버는 제공된 값을 ScsiPortGetDeviceBase에 전달하고 범위에 대해 매핑된 논리 주소를 사용하여 HBA가 지원하는지 여부를 확인해야 합니다.

포트 드라이버는 ACCESS_RANGE 형식 요소를 어댑터의 버스 상대 주소 범위에 대한 전체 설명으로 채우거나 포트 드라이버가 요소의 모든 멤버를 0으로 만듭니다.

기본값이 0으로 설정된 입력 AccessRanges 요소의 경우 HwScsiFindAdapter 루틴은 지정된 I/O 버스에서 지원하는 어댑터를 찾으려고 시도할 수 있습니다. 이러한 경우 미니포트 드라이버에는 일반적으로 HBA 유형에 대한 드라이버 결정 기본 주소 집합이 있습니다. 그러나 이전에 로드된 드라이버는 이미 이 미니포트 드라이버의 기본 주소 범위 중 하나에서 초기화된 어댑터를 사용하고 있을 수 있으며, 특히 일부 디바이스가 x86 실제 모드로 초기화되는 x86 전용 시스템에서는 더 이상 사용할 수 없습니다. 이러한 디바이스가 실수로 다시 프로그래밍되지 않도록 하기 위해 각 미니포트 드라이버의 HwScsiFindAdapter 루틴은 ScsiPortGetDeviceBase 와 드라이버 제공 주소를 매핑하기 전에 ScsiPortValidateRange 를 호출한 다음 매핑된 논리 주소를 사용하여 I/O 버스의 어댑터를 심문해야 합니다.

ScsiPortValidateRangeFALSE를 반환하는 경우 HwScsiFindAdapter는 다른 드라이버가 레지스트리의 범위를 이미 클레임했기 때문에 입력 범위 주소를 매핑하려고 시도하지 않아야 합니다.

ScsiPortValidateRangeTRUE를 반환하는 경우 HwScsiFindAdapter는 다음을 안전하게 수행할 수 있습니다.

  1. ScsiPortGetDeviceBase를 사용하여 버스 상대 범위 주소를 시스템 공간 논리 범위 주소에 매핑합니다.
  2. ScsiPortRead/WriteXxx와 함께 매핑된 논리 주소를 사용하여 어댑터가 실제로 드라이버에서 지원하는 HBA인지 여부를 확인합니다.
미니포트 드라이버가 지원하는 HBA에 대해 ScsiPortValidateRange에 성공적으로 전달된 범위를 사용하는 경우 해당 드라이버는 PORT_CONFIGURATION_INFORMATION AccessRanges 요소의 RangeInMemory 멤버를 설정하는 경우 InIoSpace 값을 반전해야 합니다.

ScsiPortValidateRangeSCSI_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

추가 정보

ACCESS_RANGE

HwScsiFindAdapter

SCSI(PORT_CONFIGURATION_INFORMATION)

ScsiPortGetDeviceBase

ScsiPortInitialize