SCSI_PASS_THROUGH_DIRECT 구조체(ntddscsi.h)
SCSI_PASS_THROUGH_DIRECT 구조는 포트 드라이버에 포함된 SCSI 명령을 대상 디바이스로 보내도록 지시하는 IOCTL_SCSI_PASS_THROUGH_DIRECT 요청과 함께 사용됩니다.
참고
SCSI 포트 드라이버 및 SCSI 미니포트 드라이버 모델은 나중에 변경되거나 사용할 수 없습니다. 대신 Storport 드라이버 및 Storport 미니포트 드라이버 모델을 사용하는 것이 좋습니다.
구문
typedef struct _SCSI_PASS_THROUGH_DIRECT {
USHORT Length;
UCHAR ScsiStatus;
UCHAR PathId;
UCHAR TargetId;
UCHAR Lun;
UCHAR CdbLength;
UCHAR SenseInfoLength;
UCHAR DataIn;
ULONG DataTransferLength;
ULONG TimeOutValue;
PVOID DataBuffer;
ULONG SenseInfoOffset;
UCHAR Cdb[16];
} SCSI_PASS_THROUGH_DIRECT, *PSCSI_PASS_THROUGH_DIRECT;
멤버
Length
sizeof(SCSI_PASS_THROUGH_DIRECT)의 값을 포함합니다.
ScsiStatus
HBA 또는 대상 디바이스에서 반환된 SCSI 상태 보고합니다.
PathId
요청에 대한 SCSI 포트 또는 버스를 나타냅니다.
TargetId
버스의 대상 컨트롤러 또는 디바이스를 나타냅니다.
Lun
디바이스의 논리적 단위 번호를 나타냅니다.
CdbLength
SCSI 명령 설명자 블록의 크기(바이트)를 나타냅니다.
SenseInfoLength
요청 감지 버퍼의 크기(바이트)를 나타냅니다.
DataIn
SCSI 명령이 데이터를 읽거나 쓸지 여부를 나타냅니다. 이 필드에는 다음 세 가지 값 중 하나가 있어야 합니다.
데이터 전송 형식 | 의미 |
---|---|
SCSI_IOCTL_DATA_IN | 디바이스에서 데이터를 읽습니다. |
SCSI_IOCTL_DATA_OUT | 디바이스에 데이터를 씁니다. |
SCSI_IOCTL_DATA_UNSPECIFIED | 전송된 데이터가 없습니다. |
DataTransferLength
데이터 버퍼의 크기(바이트)를 나타냅니다. 많은 디바이스가 미리 정의된 길이의 데이터 청크를 전송합니다. DataTransferLength의 값은 디바이스에서 지정한 미리 정의된 최소 길이의 정수 배수여야 합니다. 언더런이 발생하는 경우 미니포트 드라이버는 이 멤버를 실제로 전송된 바이트 수로 업데이트해야 합니다.
TimeOutValue
OS 관련 포트 드라이버에서 시간 초과를 고려할 수 있기 전에 요청이 실행될 수 있는 간격(초)을 나타냅니다.
DataBuffer
데이터 버퍼에 대한 포인터입니다.
SenseInfoOffset
이 구조체의 시작부터 요청 감지 버퍼까지의 오프셋을 포함합니다.
Cdb[16]
대상 디바이스로 보낼 SCSI 명령 설명자 블록을 지정합니다.
설명
SCSI_PASS_THROUGH_DIRECT 구조체는 IOCTL_SCSI_PASS_THROUGH_DIRECT 함께 사용됩니다. 이 요청을 통해 시스템은 사용자 메모리의 버퍼를 잠그고 디바이스는 이 메모리에 직접 액세스합니다. 이 디바이스 제어 요청에 해당하는 이중 버퍼링은 IOCTL_SCSI_PASS_THROUGH 및 SCSI_PASS_THROUGH 참조하세요.
SCSI_PASS_THROUGH_DIRECT 멤버는 대략 SCSI_REQUEST_BLOCK 구조체의 멤버에 해당합니다. DataIn 멤버의 값은 SCSI_REQUEST_BLOCK SrbFlags 멤버에 할당된 SCSI_IOCTL_DATA_IN, SCSI_IOCTL_DATA_OUT 및 SCSI_IOCTL_DATA_UNSPECIFIED 플래그에 해당합니다.
요구 사항
요구 사항 | 값 |
---|---|
헤더 | ntddscsi.h(Ntddscsi.h 포함) |