다음을 통해 공유


SCSI_PASS_THROUGH 구조체(ntddscsi.h)

SCSI_PASS_THROUGH 구조는 포트 드라이버에 포함된 SCSI 명령을 대상 디바이스로 보내도록 지시하는 IOCTL_SCSI_PASS_THROUGH 요청과 함께 사용됩니다.

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

구문

typedef struct _SCSI_PASS_THROUGH {
  USHORT    Length;
  UCHAR     ScsiStatus;
  UCHAR     PathId;
  UCHAR     TargetId;
  UCHAR     Lun;
  UCHAR     CdbLength;
  UCHAR     SenseInfoLength;
  UCHAR     DataIn;
  ULONG     DataTransferLength;
  ULONG     TimeOutValue;
  ULONG_PTR DataBufferOffset;
  ULONG     SenseInfoOffset;
  UCHAR     Cdb[16];
} SCSI_PASS_THROUGH, *PSCSI_PASS_THROUGH;

멤버

Length

sizeof(SCSI_PASS_THROUGH)의 값을 포함합니다.

ScsiStatus

HBA 또는 대상 디바이스에서 반환된 SCSI 상태 보고합니다.

PathId

요청에 대한 SCSI 포트 또는 버스를 나타냅니다.

TargetId

버스의 대상 컨트롤러 또는 디바이스를 나타냅니다.

Lun

디바이스의 논리적 단위 번호를 나타냅니다.

CdbLength

SCSI 명령 설명자 블록의 크기(바이트)를 나타냅니다.

SenseInfoLength

요청 감지 버퍼의 크기(바이트)를 나타냅니다.

DataIn

이 필드에는 다음 세 가지 값 중 하나가 있어야 합니다.

#######

DataTransferLength

데이터 버퍼의 크기(바이트)를 나타냅니다. 많은 디바이스가 미리 정의된 길이의 데이터 청크를 전송합니다. DataTransferLength의 값은 디바이스에서 지정한 미리 정의된 최소 길이의 정수 배수여야 합니다. 언더런이 발생하는 경우 미니포트 드라이버는 이 멤버를 실제로 전송된 바이트 수로 업데이트해야 합니다.

TimeOutValue

포트 드라이버가 시간 초과를 고려하기 전에 요청을 실행할 수 있는 간격(초)을 나타냅니다.

DataBufferOffset

이 구조체의 시작부터 데이터 버퍼까지의 오프셋을 포함합니다. 오프셋은 디바이스의 데이터 정렬 요구 사항을 준수해야 합니다.

SenseInfoOffset

이 구조체의 시작 부분에서 요청 감지 버퍼로 오프셋됩니다.

Cdb[16]

대상 디바이스로 보낼 SCSI 명령 설명자 블록을 지정합니다.

설명

SCSI_PASS_THROUGH 구조는 버퍼링된 디바이스 제어 요청인 IOCTL_SCSI_PASS_THROUGH 사용됩니다. 시스템 메모리에서 버퍼링을 무시하려면 호출자는 IOCTL_SCSI_PASS_THROUGH_DIRECT 사용해야 합니다. IOCTL_SCSI_PASS_THROUGH_DIRECT 요청을 처리할 때 시스템은 사용자 메모리의 버퍼를 잠그고 디바이스는 이 메모리에 직접 액세스합니다.

SCSI_PASS_THROUGH 멤버는 대략 SCSI_REQUEST_BLOCK 구조체의 멤버에 해당합니다. DataIn 멤버의 값은 SCSI_REQUEST_BLOCK SrbFlags 멤버에 할당된 SCSI_IOCTL_DATA_IN, SCSI_IOCTL_DATA_OUT 및 SCSI_IOCTL_DATA_UNSPECIFIED 플래그에 해당합니다.

요구 사항

요구 사항
헤더 ntddscsi.h(Ntddscsi.h 포함)

추가 정보

IOCTL_SCSI_PASS_THROUGH

IOCTL_SCSI_PASS_THROUGH_DIRECT

SCSI_PASS_THROUGH_DIRECT

SCSI_REQUEST_BLOCK