스토리지 클래스 드라이버의 GetDescriptor 루틴
데이터 전송 작업의 경우 스토리지 클래스 드라이버는 디바이스가 연결된 버스를 운전하는 각 HBA에 대한 구성 정보가 필요합니다. 이 정보를 가져오기 위해 클래스 드라이버는 내부 GetDescriptor 루틴을 호출하거나 StartDevice 루틴에서 동일한 기능을 구현합니다. StartDevice에 대한 자세한 내용은 스토리지 클래스 드라이버에서 PnP 시작 처리를 참조하세요.
GetDescriptor 루틴은 클래스 드라이버가 디바이스 확장에 저장하는 디바이스 및 어댑터 설명자를 검색하기 위해 포트 드라이버에 대한 쿼리 속성 요청(IOCTL_STORAGE_QUERY_PROPERTY IRP_MJ_DEVICE_CONTROL)을 빌드하고 설정합니다. 클래스 드라이버는 반환된 설명자 데이터에 따라 디바이스 확장에서 드라이버 기록기 결정 플래그를 설정할 수도 있습니다.
클래스 드라이버는 반환된 STORAGE_DEVICE_DESCRIPTOR 데이터를 검사하여 SCSI 디바이스 유형과 같은 디바이스 기능(SCSI 조회 데이터 또는 비 SCSI 등가)을 확인하고, 디바이스의 미디어(있는 경우)가 이동식(RemovableMedia)인지 여부, 디바이스가 여러 미해결 명령(CommandQueueing) 및 다양한 ID 문자열을 지원하는지 여부를 확인합니다. 클래스 드라이버는 반환된 STORAGE_ADAPTER_DESCRIPTOR 데이터를 검사하여 다음을 포함한 어댑터 기능을 확인합니다.
특정 HBA가 단일 작업에서 전송할 수 있는 최대 바이트 수(MaximumTransferLength)입니다.
HBA가 연속되지 않은 물리적 페이지에서 지원하는 버퍼링된 데이터를 전송할 수 있는 경우(즉, 분산/수집을 지원하는 경우), 전송 작업당 관리할 수 있는 버퍼당 연속되지 않은 물리적 페이지 수(MaximumPhysicalPages).
클래스 드라이버가 디바이스 개체(AlignmentMask)에서 AlignmentRequirement 필드를 올바르게 설정할 수 있도록 전송에 대한 HBA의 맞춤 요구 사항입니다.
IOCTL_SCSI_PASS_THROUGH 요청을 보내는 애플리케이션도 이 필드를 사용할 수 있습니다.
디바이스 개체에서 AlignmentRequirement 를 설정하는 방법에 대한 자세한 내용은 디바이스 개체 초기화를 참조하세요.
HBA가 SCSI 태그가 지정된 큐 및/또는 논리 단위별 내부 큐(CommandQueueing)를 지원하는지 여부입니다.
HBA가 동기 전송을 지원하는지 여부(AcceleratedTransfer).
HBA가 내부적으로 데이터를 캐시하는지 여부(CachesData).
클래스 드라이버는 FDO의 디바이스 확장에 이 정보를 저장해야 하므로 디스패치 루틴을 통해 스토리지 포트 드라이버로 전송되는 모든 요청이 기본 HBA의 크기, 물리적 중단 횟수 및 맞춤 요구 사항을 준수하도록 할 수 있습니다. 클래스 드라이버 디스패치 루틴에 대한 자세한 내용은 스토리지 클래스 드라이버의 디스패치 루틴을 참조하세요. 디바이스 확장 설정에 대한 자세한 내용은 스토리지 클래스 드라이버의 디바이스 확장 설정을 참조하세요.