다음을 통해 공유


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 명령의 유효성을 확인하지 않습니다.