다음을 통해 공유


IDE_REQUEST_BLOCK 구조체(irb.h)

IDE_REQUEST_BLOCK 구조체는 IDE 요청 블록을 정의합니다.

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

구문

typedef struct _IDE_REQUEST_BLOCK {
  USHORT Function;
  UCHAR  IrbStatus;
  UCHAR  AtaStatus;
  UCHAR  AtaError;
  UCHAR  Channel;
  UCHAR  TargetId;
  UCHAR  Lun;
  UCHAR  CdbLength;
  UCHAR  SenseInfoBufferLength;
  UCHAR  SenseInfoBufferType;
  UCHAR  QueueTag;
  ULONG  ReservedAsUlong;
  ULONG  IrbFlags;
  ULONG  TimeOutValue;
  ULONG  DataTransferLength;
  PVOID  IrbExtension;
  PVOID  DataBuffer;
  PVOID  SenseInfoBuffer;
  PVOID  NextIrb;
  PVOID  Reserved;
  union {
    IDE_TASK_FILE  IdeTaskFile;
    UCHAR          Cdb[16];
    IDE_POWER_INFO PowerChange;
    UCHAR          AsUChar[16];
  };
} IDE_REQUEST_BLOCK, *PIDE_REQUEST_BLOCK;

멤버

Function

요청이 속한 범주를 지정합니다. 아래 표에서는 I/O 요청의 분류에 대해 설명합니다.

Function 하위 명령 설명
IRB_FUNCTION_ATA_COMMAND IRB_FUNCTION_ATA_IDENTIFY

IRB_FUNCTION_ATA_READ

IRB_FUNCTION_ATA_WRITE

IRB_FUNCTION_ATA_FLUSH

IRB_FUNCTION_ATA_SMART

IRB에 ATA 명령을 설명하는 IdeTaskFile이 포함되어 있음을 나타냅니다. 하위 명령은 더 빠른 조회를 위해 요청을 더 세밀하게 그룹화함을 나타냅니다.
IRB_FUNCTION_ATAPI_COMMAND IRB_FUNCTION_REQUEST_SENSE IRB에 ATAPI 명령을 설명하는 CDB가 포함되어 있음을 나타냅니다.
IRB_FUNCTION_MINIPORT_COMMAND IRB_FUNCTION_ADAPTER_FLUSH

IRB_FUNCTION_SHUTDOWN

IRB_FUNCTION_POWER_CHANGE

IRB_FUNCTION_POWER_REBOOT

IRB_FUNCTION_LUN_RESET

IRB_FUNCTION_MINIPORT_IOCTL

IRB가 미니포트용임을 나타냅니다. 명령을 적절하게 해석하는 것은 미니포트의 책임입니다.

IrbStatus

미니포트는 지정된 작업의 상태 나타내도록 이 멤버를 설정해야 합니다. 아래 표에서는 다양한 IrbStatus 값과 그 의미를 설명합니다.

의미
IRB_STATUS_PENDING 요청이 진행 중임을 나타냅니다. 포트 드라이버는 IrbStatus 를 이 값으로 초기화합니다. 미니포트 드라이버는 IrbStatus 멤버를 이 값으로 설정해서는 안 됩니다.
IRB_STATUS_SUCCESS 요청이 성공적으로 완료되었음을 나타냅니다.
IRB_STATUS_DATALENGTH_MISMATCH 데이터 언더런 또는 오버런 오류가 발생했음을 나타냅니다. 미니포트는 언더런의 경우 전송된 실제 데이터 양을 나타내기 위해 IRB의 DataTransferLength 필드를 업데이트해야 합니다.
IRB_STATUS_DEVICE_ERROR 디바이스에서 오류를 반환했음을 나타냅니다. 미니포트 드라이버는 Irb의 AtaStatusAtaError 필드를 명령이 완료될 때 디바이스 ATA 상태 및 오류 레지스터의 내용으로 업데이트해야 합니다.
IRB_STATUS_INVALID_REQUEST 미니포트가 지정된 요청을 지원하지 않음을 나타냅니다.
IRB_STATUS_BUS_RESET 지정된 요청을 처리하는 동안 버스 재설정이 발생했음을 나타냅니다.
IRB_STATUS_SELECTION_TIMEOUT 대상 디바이스를 선택할 수 없음을 나타냅니다.
IRB_STATUS_BUSY 디바이스가 사용 중임을 나타냅니다. 포트 드라이버는 이 상태 완료된 모든 요청을 다시 시도합니다. 사용 중인 상태 완료된 요청은 한 번만 다시 시도됩니다. 디바이스가 특정 기간 동안 요청을 처리할 수 없는 경우 AtaPortDeviceBusy 를 사용하여 요청 큐를 일시 중지하는 것은 미니포트 드라이버의 책임입니다.
IRB_STATUS_AUTOSENSE_VALID IRB_STATUS_AUTOSENSE_VALID IRB의 SenseInfoBuffer 멤버에서 유효한 센스 데이터를 나타내는 비트 마스크입니다.
IRB_STATUS_RETURN_TASKFILE_VALID IRB_STATUS_RETURN_TASKFILE_VALID IRB의 SenseInfoBuffer 멤버에 있는 유효한 반환 작업 파일을 나타내는 비트 마스크입니다.

AtaStatus

상태 레지스터에서 디바이스가 반환한 상태 나타냅니다. 미니포트 드라이버는 IRB_STATUS_DEVICE_ERROR IRB를 완료할 때 이 필드를 업데이트해야 합니다.

AtaError

디바이스가 오류 레지스터에서 반환한 오류 값을 나타냅니다. 미니포트 드라이버는 IRB_STATUS_DEVICE_ERROR IRB를 완료할 때 이 필드를 업데이트해야 합니다.

Channel

채널 번호를 지정합니다.

TargetId

디바이스의 대상 ID를 지정합니다.

Lun

디바이스의 논리적 단위 번호를 지정합니다.

CdbLength

Cdb에서 가리키는 버퍼의 길이(바이트)를 지정합니다.

SenseInfoBufferLength

SenseInfoBuffer가 가리키는 버퍼의 길이(바이트)를 지정합니다.

SenseInfoBufferType

SenseInfoBuffer에서 반환되는 데이터 구조의 형식을 지정합니다. ATA 명령에는 요청 센스 명령이 필요하지 않으므로 ATA_PASS_THROUGH 명령은 SenseInfoBuffer 를 사용하여 작업 파일 정보를 반환합니다. IrbFlags 멤버에서 식별된 ATA_PASS_THROUGH 명령의 경우 적절한 반환 TaskFile 크기를 SENSE_INFO_BUFFER_RETURN_TYPE_28BIT_TASKFILE 또는 로 보고해야 합니다.

SENSE_INFO_BUFFER_RETURN_TYPE_48BIT_TASKFILE.

QueueTag

이 IRB의 큐 태그입니다. 포트 드라이버는 이 필드를 0으로 설정합니다.

ReservedAsUlong

다음에 사용하도록 예약됩니다.

IrbFlags

수행해야 하는 특정 작업으로 요청을 한정합니다. 아래 표에서는 자세히 설명합니다.

플래그 설명
IRB_FLAGS_DRDY_REQUIRED 미니포트 드라이버는 이 명령을 실행하기 전에 디바이스가 ATA 상태 레지스터에서 DRDY 비트를 설정할 때까지 기다려야 했음을 나타냅니다.
IRB_FLAGS_USE_DMA 요청에 연결된 분산/수집 목록이 있고 미니포트 드라이버가 DMA를 사용하여 이 요청에 대한 데이터를 전송할 수 있음을 나타냅니다.
IRB_FLAGS_MAP_BUFFERS IRB의 DataBuffer 필드가 매핑되었음을 나타냅니다. 이 플래그가 설정되면 미니포트가 DataBuffer 에 안전하게 액세스할 수 있습니다. 플래그가 설정되지 않은 경우 미니포트 드라이버는 DataBuffer 에 액세스하지 않아야 합니다. 미니포트 드라이버는 IdeHwBuildIo 루틴에서 IRB에서 이 플래그를 설정하여 포트 드라이버에 데이터 버퍼를 매핑하도록 요청할 수 있습니다.
IRB_FLAGS_48BIT IRB의 ATA 명령이 48비트 LBA 기능 집합에 속한다는 것을 나타냅니다. 이 플래그가 설정되면 _IDE_TASK_FILE 구조체의 이전 필드가 유효합니다.
IRB_FLAGS_PIO_MULTIPLE ATA PIO 다중 메서드를 사용하여 ATA 명령을 전송할 것임을 나타냅니다.
IRB_FLAGS_RETURN_RESULTS ATA 반환 작업 파일을 SenseInfoBuffer에 복사할 것임을 나타냅니다.
IRB_FLAGS_DATA_IN 데이터가 디바이스에서 호스트 시스템(읽기 작업)으로 전송될 것임을 나타냅니다.
IRB_FLAGS_DATA_OUT 데이터가 호스트 시스템(쓰기 작업)에서 디바이스로 전송될 것임을 나타냅니다.
IRB_FLAGS_DISCARDABLE 명령이 최선의 방법으로 수행되어야 했음을 나타냅니다. (참고: 현재 ATAport에서 사용하지 않습니다.)
IRB_FLAGS_HIGH_PRIORITY 이 IRB는 현재 ATA 미니포트에 있는 우선 순위가 높지 않은 IRB 전에 가능한 한 빨리 처리되어야 했음을 나타냅니다.

TimeOutValue

요청 시간이 초과되는 시간(초)을 나타냅니다.

DataTransferLength

전송할 데이터가 포함된 데이터 버퍼의 길이(바이트)를 포함합니다.

IrbExtension

포트 드라이버에서 할당한 요청당 확장에 대한 포인터입니다.

DataBuffer

데이터가 있는 버퍼에 대한 포인터입니다.

SenseInfoBuffer

센스 데이터를 보유하는 버퍼에 대한 포인터입니다.

NextIrb

처리할 다음 IRB에 대한 포인터입니다. 포트 드라이버는 이를 NULL로 설정합니다. 미니포트 드라이버는 이 필드를 사용하여 IRB를 함께 연결할 수 있습니다.

Reserved

다음에 사용하도록 예약됩니다.

IdeTaskFile

표시된 컨트롤러에 대한 IDE 작업 파일을 보유하는 형식 IDE_TASK_FILE 구조체를 포함합니다. 이 멤버는 함수 멤버와 IRB_FUNCTION_ATA_COMMAND 사이의 비트 AND 결과가 0이 아닌 경우 정의됩니다.

Cdb[16]

명령 설명자 블록(CDB)을 포함합니다. 함수 멤버와 IRB_FUNCTION_ATAPI_COMMAND 사이의 비트 AND 결과가 0이 아닌 경우 이 멤버가 정의됩니다.

PowerChange

전원 상태 전환을 정의하는 POWER_CHANGE_INFO 형식의 열거형 값을 나타냅니다. 이 멤버는 Function 이 IRB_FUNCTION_POWER_CHANGE 같을 때마다 정의됩니다.

AsUChar[16]

멤버 IdeTaskFile, PowerChangeCdb에 서명되지 않은 문자 데이터로 액세스하는 방법을 제공합니다.

설명

IDE_REQUEST_BLOCK 구조는 SCSI_REQUEST_BLOCK 유사하지만 IDE 버스에서 디바이스를 관리하는 데 더 적합한 특성을 제공합니다.

요구 사항

요구 사항
헤더 irb.h(Irb.h 포함)

추가 정보

AtaportDeviceBusy

IDE_TASK_FILE

POWER_CHANGE_INFO

SCSI_REQUEST_BLOCK