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
TRUE이면 범위가 메모리가 아닌 I/O 공간에 있음을 나타냅니다. FALSE이면 범위가 메모리 공간에 있습니다.
반환 값
HwScsiFindAdapter 루틴이 매핑된 범위를 안전하게 매핑하고 사용하여 어댑터에 액세스할 수 있는 경우 ScsiPortValidateRange는 TRUE를 반환합니다. 지정된 액세스 범위 값이 다른 드라이버에 의해 레지스트리에서 이미 클레임된 경우 ScsiPortValidateRange는 FALSE를 반환합니다.
설명
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 버스의 어댑터를 심문해야 합니다.
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 |