SCSI Pass-Through 요청 처리

IOCTL_SCSI_PASS_THROUGH 요청 또는 IOCTL_SCSI_PASS_THROUGH_DIRECT요청을 생성하는 클래스 드라이버는 다음을 담당합니다.

  • Parameters.DeviceIoControl.InputBufferLength에서 사용자 버퍼의 길이를 적어도 sizeof(SCSI_PASS_THROUGH) 또는 sizeof(SCSI_PASS_THROUGH_DIRECT)로 설정

  • 평소와 같이 스토리지 포트 드라이버의 I/O 스택 위치 설정

  • IRP의 MinorFunction 을 IRP_MJ_DEVICE_CONTROL 설정하여 스토리지 클래스 드라이버에서 요청을 처리한 것으로 표시합니다.

상위 수준 드라이버에서 IOCTL_SCSI_PASS_THROUGH 또는 IOCTL_SCSI_PASS_THROUGH_DIRECT 요청을 수신할 때 스토리지 클래스 드라이버의 DispatchDeviceControl 루틴은 포함된 SCSI 명령(CDB)의 유효성을 확인하고 명령이 해당 디바이스에 유효한 경우 스토리지 포트 드라이버에 요청을 보냅니다.

IOCTL_SCSI_PASS_THROUGH 또는 IOCTL_SCSI_PASS_THROUGH_DIRECT 요청에 대한 포트 드라이버의 I/O 스택 위치에 IRP_MJ_DEVICE_CONTROL 로 설정된 MinorFunction 필드가 없는 경우 포트 드라이버는 요청이 애플리케이션에서 직접 제공되었으며 대상 디바이스 유형에 대한 클래스 드라이버가 없다고 가정합니다. 스토리지 클래스 드라이버에서 요청한 디바이스에 대해 포트 드라이버에 직접 이러한 요청을 보내는 것은 애플리케이션 오류입니다.

포트 드라이버는 이러한 통과 요청에 포함된 SCSI 명령의 유효성을 검사 않습니다.