ATA_PASS_THROUGH_DIRECT 구조체(ntddscsi.h)
ATA_PASS_THROUGH_DIRECT 구조는 포트 드라이버에 포함된 ATA 명령을 대상 디바이스로 보내도록 지시하는 IOCTL_ATA_PASS_THROUGH_DIRECT 요청과 함께 사용됩니다.
구문
typedef struct _ATA_PASS_THROUGH_DIRECT {
USHORT Length;
USHORT AtaFlags;
UCHAR PathId;
UCHAR TargetId;
UCHAR Lun;
UCHAR ReservedAsUchar;
ULONG DataTransferLength;
ULONG TimeOutValue;
ULONG ReservedAsUlong;
PVOID DataBuffer;
UCHAR PreviousTaskFile[8];
UCHAR CurrentTaskFile[8];
} ATA_PASS_THROUGH_DIRECT, *PATA_PASS_THROUGH_DIRECT;
멤버
Length
ATA_PASS_THROUGH_DIRECT 구조체의 길이(바이트)를 지정합니다.
AtaFlags
데이터 전송 방향을 나타내고 수행할 작업의 종류를 지정합니다. 이 멤버의 값은 다음 표에 있는 플래그의 일부 조합이어야 합니다.
ATA 플래그 | 의미 |
---|---|
ATA_FLAGS_DRDY_REQUIRED | 디바이스에 명령을 보내기 전에 디바이스에서 DRDY 상태 기다립니다. |
ATA_FLAGS_DATA_IN | 디바이스에서 데이터를 읽습니다. |
ATA_FLAGS_DATA_OUT | 디바이스에 데이터를 씁니다. |
ATA_FLAGS_48BIT_COMMAND | 보낼 ATA 명령은 48비트 LBA(논리 블록 주소) 기능 집합을 사용합니다. 이 플래그를 설정하면 ATA_PASS_THROUGH_DIRECT 구조체에 있는 PreviousTaskFile 멤버의 내용이 유효해야 합니다. |
ATA_FLAGS_USE_DMA | 전송 모드를 DMA로 설정합니다. |
ATA_FLAGS_NO_MULTIPLE | 단일 섹터만 읽습니다. |
PathId
요청에 대한 IDE 포트 또는 버스를 나타내는 정수입니다. 이 값은 포트 드라이버에 의해 설정됩니다.
TargetId
버스의 대상 디바이스를 나타내는 정수 를 포함합니다. 이 값은 포트 드라이버에 의해 설정됩니다.
Lun
디바이스의 논리적 단위 번호를 나타냅니다. 이 값은 포트 드라이버에 의해 설정됩니다.
ReservedAsUchar
다음에 사용하도록 예약됩니다.
DataTransferLength
데이터 버퍼의 크기(바이트)를 나타냅니다. 언더런이 발생하는 경우 미니포트 드라이버는 이 멤버를 실제로 전송된 바이트 수로 업데이트해야 합니다.
TimeOutValue
OS별 포트 드라이버가 요청 시간이 초과되었음을 결정하기 전에 요청이 실행될 수 있는 시간(초)을 나타냅니다.
ReservedAsUlong
다음에 사용하도록 예약됩니다.
DataBuffer
데이터 버퍼에 대한 포인터입니다.
PreviousTaskFile[8]
현재 통과 명령 이전의 입력 작업 파일 레지스터의 내용을 지정합니다. 이 멤버는 ATA_FLAGS_48BIT_COMMAND 플래그가 설정되지 않은 경우 사용되지 않습니다.
CurrentTaskFile[8]
입력 및 출력 모두에서 작업 파일 레지스터의 내용을 지정합니다. 입력에서 CurrentTaskFile 의 배열 값은 다음과 같은 방식으로 입력 레지스터에 매핑됩니다.
Byte | 입력 레지스터 |
---|---|
0 | 기능 등록 |
1 | 섹터 수 레지스터 |
2 | 섹터 번호 레지스터 |
3 | 실린더 로우 레지스터 |
4 | 원통 높음 레지스터 |
5 | 디바이스/헤드 레지스터 |
6 | 명령 등록 |
7 | 예약됨 |
IOCTL_ATA_PASS_THROUGH_DIRECT 완료되면 포트 드라이버는 포함된 명령이 완료될 때 디바이스의 출력 레지스터에 있는 값으로 CurrentTaskFile을 업데이트합니다. CurrentTaskFile의 배열 값은 다음 작업 파일 출력 레지스터에 해당합니다.
Byte | 출력 레지스터 |
---|---|
0 | 오류 등록 |
1 | 섹터 수 레지스터 |
2 | 섹터 번호 레지스터 |
3 | 실린더 로우 레지스터 |
4 | 원통 높음 레지스터 |
5 | 디바이스/헤드 레지스터 |
6 | 상태 등록 |
7 | 예약됨 |
설명
ATA_PASS_THROUGH_DIRECT 구조체는 IOCTL_ATA_PASS_THROUGH_DIRECT 함께 사용됩니다. 이 요청을 통해 시스템은 사용자 메모리의 버퍼를 잠그고 디바이스는 이 메모리에 직접 액세스합니다. 이 디바이스 제어 요청에 해당하는 이중 버퍼링된 항목은 IOCTL_ATA_PASS_THROUGH 및 ATA_PASS_THROUGH_EX 참조하세요.
요구 사항
요구 사항 | 값 |
---|---|
헤더 | ntddscsi.h(Ntddscsi.h 포함) |