다음을 통해 공유


SCSI_PASS_THROUGH_DIRECT_EX 구조체(ntddscsi.h)

SCSI_PASS_THROUGH_DIRECT_EX 구조는 포트 드라이버에 포함된 SCSI 명령을 대상 디바이스로 보내도록 지시하는 IOCTL_SCSI_PASS_THROUGH_DIRECT_EX 요청과 함께 사용됩니다. SCSI_PASS_THROUGH_DIRECT_EX 양방향 데이터 전송 및 가변 길이 명령 데이터 블록을 포함할 수 있습니다.   

참고

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

구문

typedef struct _SCSI_PASS_THROUGH_DIRECT_EX {
  ULONG Version;
  ULONG Length;
  ULONG CdbLength;
  ULONG StorAddressLength;
  UCHAR ScsiStatus;
  UCHAR SenseInfoLength;
  UCHAR DataDirection;
  UCHAR Reserved;
  ULONG TimeOutValue;
  ULONG StorAddressOffset;
  ULONG SenseInfoOffset;
  ULONG DataOutTransferLength;
  ULONG DataInTransferLength;
  VOID  *DataOutBuffer;
  VOID  *DataInBuffer;
  UCHAR Cdb[ANYSIZE_ARRAY];
} SCSI_PASS_THROUGH_DIRECT_EX, *PSCSI_PASS_THROUGH_DIRECT_EX;

멤버

Version

이 구조체의 버전입니다. 0으로 설정합니다.

Length

이 구조체의 크기입니다. sizeof(SCSI_PASS_THROUGH_DIRECT_EX)로 설정합니다.

CdbLength

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

StorAddressLength

이 구조체 뒤의 StorAddressOffset 오프셋 에 있는 스토리지 디바이스 주소 구조체의 길이입니다. sizeof(STOR_ADDR_BTL8)로 설정됩니다.

ScsiStatus

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

SenseInfoLength

요청 감지 버퍼의 크기(바이트)를 나타냅니다. 이 멤버는 선택 사항이며 0으로 설정할 수 있습니다.

DataDirection

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

데이터 전송 형식 의미
SCSI_IOCTL_DATA_IN 디바이스에서 데이터를 읽습니다.
SCSI_IOCTL_DATA_OUT 디바이스에 데이터를 씁니다.
SCSI_IOCTL_DATA_UNSPECIFIED 데이터가 전송되지 않습니다.
SCSI_IOCTL_DATA_BIDIRECTIONAL 데이터는 입력 및 출력 모두에 유효합니다.

Reserved

예약되어 있습니다. 0으로 설정합니다.

TimeOutValue

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

StorAddressOffset

이 구조체의 시작 부분에서 대상 디바이스의 STOR_ADDR_BTL8 주소 구조의 위치(바이트)입니다.

SenseInfoOffset

이 구조체의 시작 부분에서 요청 감지 버퍼로 오프셋됩니다. 요청 감지 버퍼가 없으면 0으로 설정합니다.

DataOutTransferLength

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

DataInTransferLength

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

DataOutBuffer

출력 데이터 버퍼에 대한 포인터입니다.

DataInBuffer

입력 데이터 버퍼에 대한 포인터입니다.

Cdb[ANYSIZE_ARRAY]

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

설명

SCSI_PASS_THROUGH_DIRECT_EX 구조체는 IOCTL_SCSI_PASS_THROUGH_DIRECT_EX 함께 사용됩니다. 이 요청을 통해 시스템은 사용자 메모리의 버퍼를 잠그고 디바이스는 이 메모리에 직접 액세스합니다. 이 디바이스 제어 요청에 해당하는 이중 버퍼링은 IOCTL_SCSI_PASS_THROUGH_EXSCSI_PASS_THROUGH_EX 참조하세요.

참고

64비트 버전의 Windows에서 실행되는 드라이버는 32비트 프로세스에서 IOCTL_SCSI_PASS_THROUGH_DIRECT_EX 요청을 처리할 때 SCSI_PASS_THROUGH_DIRECT32_EX 구조를 요청 데이터 형식으로 사용해야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 8 사용하여 사용할 수 있습니다.
머리글 ntddscsi.h(Ntddscsi.h 포함)

추가 정보

IOCTL_SCSI_PASS_THROUGH_DIRECT_EX

IOCTL_SCSI_PASS_THROUGH_DIRECT_EX

SCSI_PASS_THROUGH_DIRECT

STOR_ADDR_BTL8