다음을 통해 공유


IOCTL_ATA_PASS_THROUGH_DIRECT IOCTL(ntddscsi.h)

IOCTL_ATA_PASS_THROUGH_DIRECT 애플리케이션은 다음과 같은 제한 사항으로 거의 모든 ATA 명령을 대상 디바이스에 보낼 수 있습니다.

  • 대상 디바이스 유형에 대한 클래스 드라이버가 있는 경우 애플리케이션은 클래스 드라이버에 요청을 보내야 합니다. 따라서 애플리케이션은 디바이스에 대한 클래스 드라이버가 없는 경우에만 대상 논리 단위에 대한 시스템 포트 드라이버로 직접 이 요청을 보낼 수 있습니다.

  • 포함된 ATA 명령에 기본 미니포트 드라이버가 메모리에 직접 액세스해야 하는 경우 애플리케이션은 IOCTL_ATA_PASS_THROUGH 대신 이 요청을 사용해야 합니다.

ATA 명령이 데이터 전송 작업을 요청하는 경우 호출자는 드라이버가 직접 데이터를 전송할 수 있는 캐시 정렬 버퍼를 설정해야 합니다. 호출자는 다음을 확인해야 합니다.

  • 데이터 전송 길이는 디바이스의 I/O 맞춤 요구 사항을 충족합니다. 그렇지 않으면 이 IOCTL이 STATUS_INVALID_PARAMETER 실패합니다.
  • 데이터 전송 길이는 디바이스의 최대 I/O 전송 길이보다 크지 않아야 합니다. 그렇지 않으면 디바이스가 요청에 실패할 것으로 예상됩니다.

IOCTL_ATA_PASS_THROUGH_DIRECT 요청은 일반적으로 대량의 데이터(16KB 이상)를 전송하는 데 사용됩니다.

주 코드

IRP_MJ_DEVICE_CONTROL

입력 버퍼

Irp-AssociatedIrp.SystemBuffer>의 버퍼에는 수행할 명령의 종류를 나타내는 작업 파일 입력 레지스터 집합을 포함하는 ATA_PASS_THROUGH_DIRECT 구조체가 포함되어 있습니다. 호출자는 포트 드라이버가 채우는 PathId, TargetIdLun을 제외하고 이 구조체의 모든 멤버를 초기화해야 합니다. 데이터 출력 명령의 경우 ATA_PASS_THROUGH_DIRECTDataBuffer 멤버는 기록할 데이터가 포함된 캐시 정렬 버퍼를 가리킵니다.

입력 버퍼 길이

Parameters.DeviceIoControl.InputBufferLengthIrp-AssociatedIrp.SystemBuffer에서 버퍼의 크기(바이트)>를 나타냅니다. InputBufferLength 값은 고정되며 전송되는 데이터의 양에 따라 달라지지 않습니다. sizeof(ATA_PASS_THROUGH_DIRECT)와 같습니다. 버퍼의 크기가 sizeof(ATA_PASS_THROUGH_DIRECT)보다 작으면 포트 드라이버가 I/O 요청에 실패하고 오류를 반환합니다.

출력 버퍼

포트 드라이버는 Irp-AssociatedIrp.SystemBuffer>의 버퍼에 저장하는 ATA_PASS_THROUGH_DIRECT 구조를 사용하여 반환 데이터의 형식을 지정합니다.

포트 드라이버는 전송된 데이터를 ATA_PASS_THROUGH_DIRECTDataBuffer 멤버가 가리키는 캐시 정렬 버퍼에 저장합니다.

포트 드라이버는 ATA 명령이 완료될 때 디바이스의 출력 레지스터에 있는 값으로 ATA_PASS_THROUGH_DIRECT CurrentTaskFile 멤버를 채웁니다. 애플리케이션은 출력 레지스터의 내용을 해석하여 디바이스에서 반환된 오류(있는 경우)를 결정합니다.

출력 버퍼 길이

포트 드라이버는 ATA_PASS_THROUGH_DIRECT 구조체의 DataTransferLength 멤버를 업데이트하여 디바이스에서 전송된 데이터의 양을 나타냅니다.

입력/출력 버퍼

없음

입력/출력 버퍼 길이

해당 사항 없음

상태 블록

정보 멤버는 Irp-AssociatedIrp.SystemBuffer>의 출력 버퍼에 반환된 바이트 수로 설정됩니다. Status 멤버는 STATUS_SUCCESS 또는 ATA_PASS_THROUGH_DIRECT 입력 Length 값이 잘못 설정된 경우 STATUS_BUFFER_TOO_SMALL 또는 STATUS_INVALID_PARAMETER 설정됩니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Server 2003
머리글 ntddscsi.h(Ntddscsi.h 포함)

추가 정보

ATA_PASS_THROUGH_DIRECT

IOCTL_ATA_PASS_THROUGH