다음을 통해 공유


STORAGE_REQUEST_BLOCK 구조체(srb.h)

STORAGE_REQUEST_BLOCK 확장 형식 SCSI 요청 블록(SRB) 구조체입니다. 구조체는 SRB 함수와 연결된 확장 데이터를 추가합니다.

참고

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

구문

typedef struct _STORAGE_REQUEST_BLOCK {
  USHORT                               Length;
  UCHAR                                Function;
  UCHAR                                SrbStatus;
  ULONG                                ReservedUlong1;
  ULONG                                Signature;
  ULONG                                Version;
  ULONG                                SrbLength;
  ULONG                                SrbFunction;
  ULONG                                SrbFlags;
  ULONG                                ReservedUlong2;
  ULONG                                RequestTag;
  USHORT                               RequestPriority;
  USHORT                               RequestAttribute;
  ULONG                                TimeOutValue;
  union {
    ULONG SystemStatus;
    ULONG RequestTagHigh4Bytes;
  } DUMMYUNIONNAME;
  ULONG                                SystemStatus;
  ULONG                                ZeroGuard1;
  ULONG                                AddressOffset;
  ULONG                                NumSrbExData;
  ULONG                                DataTransferLength;
  PVOID POINTER_ALIGN                  DataBuffer;
  PVOID POINTER_ALIGN                  ZeroGuard2;
  PVOID POINTER_ALIGN                  OriginalRequest;
  PVOID POINTER_ALIGN                  ClassContext;
  PVOID POINTER_ALIGN                  PortContext;
  PVOID POINTER_ALIGN                  MiniportContext;
  _STORAGE_REQUEST_BLOCK POINTER_ALIGN *NextSrb;
  struct                               _STORAGE_REQUEST_BLOCK;
  ULONG                                SrbExDataOffset[ANYSIZE_ARRAY];
} STORAGE_REQUEST_BLOCK, *PSTORAGE_REQUEST_BLOCK;

멤버

Length

SCSI_REQUEST_BLOCK 구조체와의 호환성을 위해 SRB 헤더의 크기를 지정합니다. 이는 이 구조체의 Signature 멤버 오프셋과 같습니다.

Function

확장된 SRB임을 나타내려면 SRB_FUNCTION_STORAGE_REQUEST_BLOCK 로 설정합니다. SCSI_REQUEST_BLOCK 달리 SRB 함수 식별자는 대신 SrbFunction 멤버에 있습니다.

SrbStatus

완료된 요청의 상태 반환합니다. 요청Complete를 사용하여 ScsiPortNotification을 호출하여 요청이 완료되었음을 운영 체제별 드라이버에 알리기 전에 미니포트 드라이버에서 이 멤버를 설정해야 합니다. 이 멤버의 값은 다음 중 하나일 수 있습니다.

의미
SRB_STATUS_PENDING(0x00) 요청이 진행 중임을 나타냅니다. 운영 체제별 포트 드라이버는 SrbStatus 를 이 값으로 초기화합니다.
SRB_STATUS_SUCCESS(0x01) 요청이 성공적으로 완료되었음을 나타냅니다.
SRB_STATUS_ABORTED(0x02) 포트 드라이버의 지시에 따라 요청이 중단되었음을 나타냅니다. 미니포트 드라이버는 성공적인 SRB_FUNCTION_ABORT_COMMAND 요청에 대해 NextSrb 멤버에서 이 상태 설정합니다.
SRB_STATUS_ABORT_FAILED(0x03) 요청을 중단하지 못했음을 나타냅니다. 지정된 요청을 배치할 수 없는 경우 SRB_FUNCTION_ABORT_COMMAND 요청에 대해 이 상태 반환합니다.
SRB_STATUS_ERROR(0x04) SCSI 버스 상태 오류가 발생해 요청이 완료되었음을 나타냅니다.
SRB_STATUS_BUSY(0x05) 미니포트 드라이버 또는 대상 디바이스가 현재 요청을 수락할 수 없음을 나타냅니다. 운영 체제별 포트 드라이버는 나중에 요청을 다시 제출합니다.
SRB_STATUS_INVALID_REQUEST(0x06) 미니포트 드라이버가 지정된 요청을 지원하지 않음을 나타냅니다.
SRB_STATUS_INVALID_PATH_ID(0x07) SRB에 지정된 PathId 가 없음을 나타냅니다.
SRB_STATUS_NO_DEVICE(0x08) 디바이스가 응답하지 않았음을 나타냅니다.
SRB_STATUS_TIMEOUT(0x09) 요청 시간이 초과되었음을 나타냅니다.
SRB_STATUS_SELECTION_TIMEOUT(0x0A) SCSI 디바이스 선택 시간이 초과되었음을 나타냅니다.
SRB_STATUS_COMMAND_TIMEOUT(0x0B) 대상이 시간 제한 내에서 명령을 완료하지 않았음을 나타냅니다.
SRB_STATUS_MESSAGE_REJECTED(0x0D) 대상이 메시지를 거부했음을 나타냅니다. 이는 일반적으로 SRB_FUNCTION_TERMINATE_IO 같은 메시지 형식 요청에 대해서만 반환됩니다.
SRB_STATUS_BUS_RESET(0x0E) 이 요청이 실행되는 동안 버스 재설정이 발생했음을 나타냅니다.
SRB_STATUS_PARITY_ERROR(0x0F) SCSI 버스에서 패리티 오류가 발생했으며 재시도에 실패했음을 나타냅니다.
SRB_STATUS_REQUEST_SENSE_FAILED(0x10) 요청 감지 명령이 실패했음을 나타냅니다. HBA(호스트 버스 어댑터)가 자동 요청 센스를 수행하고 미니포트 드라이버가 이 HBA에 대한 PORT_CONFIGURATION_INFORMATIONAutoRequestSense를 TRUE로 설정한 경우에만 반환됩니다.
SRB_STATUS_NO_HBA(0x11) HBA가 응답하지 않음을 나타냅니다.
SRB_STATUS_DATA_OVERRUN(0x12) 데이터 오버런 또는 언더런 오류가 발생했음을 나타냅니다. 또한 미니포트 드라이버는 SRB의 DataTransferLength 멤버를 업데이트하여 언더런이 발생할 경우 실제로 전송된 데이터의 양을 나타내야 합니다.
SRB_STATUS_UNEXPECTED_BUS_FREE(0x13) 대상이 예기치 않게 연결 끊김을 나타냅니다.
SRB_STATUS_PHASE_SEQUENCE_FAILURE(0x14) HBA가 잘못된 단계 시퀀스 오류 오류를 감지했음을 나타냅니다.
SRB_STATUS_BAD_SRB_BLOCK_LENGTH(0x15) SRB 길이가 잘못되어 요청이 실패했음을 나타냅니다.
SRB_STATUS_REQUEST_FLUSHED(0x16) 상태 대한 요청이 중지되었음을 나타냅니다.
SRB_STATUS_INVALID_LUN(0x20) SRB의 Lun 값이 잘못되었음을 나타냅니다.
SRB_STATUS_INVALID_TARGET_ID(0x21) SRB의 TargetID 값이 잘못되었음을 나타냅니다.
SRB_STATUS_BAD_FUNCTION(0x22) SRB 함수 코드가 지원되지 않음을 나타냅니다.
SRB_STATUS_ERROR_RECOVERY(0x23) SCSI 버스 상태 오류와 함께 요청이 완료되었으며 SCSI INITIATE RECOVERY 메시지가 수신되었음을 나타냅니다.
SRB_STATUS_NOT_POWERED(0x24) 은 대상의 전원이 공급되지 않아 요청이 실패했음을 나타냅니다. SrbFlags에서 SRB_FLAGS_NO_KEEP_AWAKE 설정된 요청의 경우 전원이 다운된 LUN으로 전송된 요청은 이 상태 실패합니다.
SRB_STATUS_LINK_DOWN(0x25) 링크가 다운되어 요청이 실패했음을 나타냅니다.
SRB_STATUS_INTERNAL_ERROR(0x30) Storport 드라이버가 미니포트 드라이버 또는 대상 디바이스에 요청을 전달할 수 없음을 나타냅니다. 이러한 경우 상태 InternalStatus에 기록됩니다.
SRB_STATUS_QUEUE_FROZEN(0x40) 미니포트 드라이버는 SrbStatus 멤버를 이 값으로 설정해서는 안 됩니다. Windows 포트 드라이버는 이 값을 설정하여 스토리지 클래스 드라이버에 특정 주변 디바이스에 대한 요청 큐가 고정되었음을 알릴 수 있습니다.
SRB_STATUS_AUTOSENSE_VALID(0x80) SenseInfoBuffer에 반환된 정보가 유효함을 나타냅니다.

ReservedUlong1

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

Signature

확장된 SRB 형식의 서명입니다. 이 설정은 SRB_SIGNATURE.

Version

사용된 구조체의 버전입니다. 현재 버전이 STORAGE_REQUEST_BLOCK_VERSION_1.

SrbLength

이 구조체, 주소 및 SRB 확장 데이터를 포함하여 이 확장 SRB의 길이(바이트)입니다.

SrbFunction

수행할 작업을 지정합니다. 이 작업은 다음 값 중 하나일 수 있습니다.

의미
SRB_FUNCTION_EXECUTE_SCSI(0x00) SCSI 디바이스 I/O 요청은 대상 논리 단위에서 실행되어야 합니다. NumSrbExData> 0이면 다음 확장 요청 블록 구조 중 하나 이상이 SrbExDataOffset에 지정된 오프셋에 있습니다. SRBEX_DATA_SCSI_CDB16, SRBEX_DATA_SCSI_CDB32, SRBEX_DATA_SCSI_CDB_VAR, SRBEX_DATA_BIDIRECTIONAL, SRBEX_DATA_IO_INFO
SRB_FUNCTION_IO_CONTROL(0x02) 요청은 전용 HBA를 사용하는 사용자 모드 애플리케이션에서 시작된 I/O 제어 요청입니다. SRB DataBufferSRB_IO_CONTROL 헤더를 가리킨 다음 데이터 영역을 가리킵니다. DataBuffer의 값은 MapBuffers 값에 관계없이 드라이버에서 사용할 수 있습니다. 미니포트 드라이버가 초기화할 때 SRB 확장을 요청한 경우 SrbExtension 멤버와 함께 SRB 함수, SrbFlags, TimeOutValue, DataBufferDataTransferLength 멤버만 유효합니다. 미니포트 드라이버가 이 요청을 지원하도록 애플리케이션 전용 HBA를 제어하는 경우 미니포트 드라이버는 요청을 실행하고 SRB가 완료될 때 RequestCompleteNextRequest를 사용하여 ScsiPortNotification에 대한 일반적인 호출 메커니즘을 사용하여 운영 체제별 포트 드라이버에 알려야 합니다.
SRB_FUNCTION_RECEIVE_EVENT(0x03) HBA는 주소가 지정된 대상에서 비동기 이벤트 알림을 받을 수 있도록 준비해야 합니다. SRB DataBuffer 멤버는 데이터를 배치해야 하는 위치를 나타냅니다. 참고: 이 함수는 Storport에서 미니포트로 전송되지 않습니다.
SRB_FUNCTION_SHUTDOWN(0x07) 시스템이 종료되고 있습니다. 미니포트 드라이버는 모든 시스템 작업이 실제로 중지되기 전에 이러한 알림 중 몇 가지를 수신할 수 있습니다. 그러나 마지막 종료 알림은 마지막 시작 I/O 후에 발생합니다. 이 함수에는 확장 SRB 데이터가 필요하지 않습니다.
SRB_FUNCTION_FLUSH(0x08) 미니포트 드라이버는 대상 디바이스에 대해 캐시된 데이터를 플러시해야 합니다. 이 요청은 HBA에 대한 PORT_CONFIGURATION_INFORMATIONCachesDataTRUE로 설정한 경우에만 미니포트 드라이버로 전송됩니다. 이 함수에는 확장 SRB 데이터가 필요하지 않습니다.
SRB_FUNCTION_ABORT_COMMAND(0x10) NextSrb 멤버가 가리키는 요청을 취소하려면 SCSIMESS_ABORT 메시지를 보내야 합니다. 태그가 지정된 큐 요청인 경우 대신 SCSIMESS_ABORT_WITH_TAG 메시지를 사용해야 합니다. 표시된 요청이 완료된 경우 이 요청은 정상적으로 완료되어야 합니다. 이 함수에는 확장 SRB 데이터가 필요하지 않습니다. 참고: 이 함수는 Storport에서 미니포트로 전송되지 않습니다.
SRB_FUNCTION_RELEASE_RECOVERY(0x11) SCSIMESS_RELEASE_RECOVERY 메시지를 대상 컨트롤러로 보내야 합니다. 이 함수에는 확장 SRB 데이터가 필요하지 않습니다. 참고: 이 함수는 Storport에서 미니포트로 전송되지 않습니다.
SRB_FUNCTION_RESET_BUS(0x12) SCSI 버스는 SCSIMESS_BUS_DEVICE_RESET 메시지를 사용하여 다시 설정해야 합니다. 미니포트 드라이버는 지정된 요청의 시간이 초과되고 시간 제한 요청을 중단하라는 후속 요청도 시간이 초과된 경우에만 이 요청을 받습니다. 이 함수에는 확장 SRB 데이터가 필요하지 않습니다.
SRB_FUNCTION_TERMINATE_IO(0x14) NextSrb 멤버가 가리키는 요청을 취소하려면 SCSIMESS_TERMINATE_IO_PROCESS 메시지를 보내야 합니다. 표시된 요청이 이미 완료된 경우 이 요청은 정상적으로 완료되어야 합니다. 이 함수에는 확장 SRB 데이터가 필요하지 않습니다. 참고: 이 함수는 Storport에서 미니포트로 전송되지 않습니다.
SRB_FUNCTION_RESET_DEVICE(0x16) SCSI 대상 컨트롤러는 SCSIMESS_BUS_DEVICE_RESET 메시지를 사용하여 다시 설정해야 합니다. 미니포트 드라이버는 대상 컨트롤러에 대한 활성 요청을 완료해야 합니다. 이 함수에는 확장 SRB 데이터가 필요하지 않습니다.
SRB_FUNCTION_WMI(0x17) 요청은 SRBEX_DATA_WMI 구조로 형식이 지정된 전원 확장 요청입니다. 확장 요청 데이터에 대한 오프셋은 SrbExDataOffset[0]에 있습니다.
SRB_FUNCTION_LOCK_QUEUE(0x18) 일반적으로 전원 요청이 처리되는 동안 포트 드라이버가 특정 논리 단위에 대해 큐에 대기하는 요청을 보유합니다. SRB 길이, 함수, SrbFlagsOriginalRequest 멤버만 유효합니다. 큐가 잠겨 있으면 SRB_FLAGS_BYPASS_LOCKED_QUEUESrbFlags ORed가 있는 요청만 처리됩니다. SCSI 미니포트 드라이버는 SRB_FUNCTION_LOCK_QUEUE 요청을 처리하지 않습니다.
SRB_FUNCTION_UNLOCK_QUEUE(0x19) 이전에 SRB_FUNCTION_LOCK_QUEUE 잠긴 논리 단위에 대한 포트 드라이버 큐를 해제합니다. 잠금 해제 요청의 SrbFlagsSRB_FLAGS_BYPASS_LOCKED_QUEUE ORed여야 합니다. SRB 길이, 함수, SrbFlagsOriginalRequest 멤버만 유효합니다. SCSI 미니포트 드라이버는 SRB_FUNCTION_UNLOCK_QUEUE 요청을 처리하지 않습니다.
SRB_FUNCTION_QUIESCE_DEVICE(0x1A) 요청은 스토리지 클래스와 스토리지 포트 드라이버 사이에만 있으며 미니포트로 전송되지 않습니다. 이 함수는 클래스 드라이버에서 포트 드라이버가 미해결 I/O를 모두 완료할 때까지 대기하는 역할을 합니다.
SRB_FUNCTION_RESET_LOGICAL_UNIT(0x20) 가능한 경우 논리 단위를 다시 설정해야 합니다. HBA 미니포트 드라이버는 논리 단위에 대한 활성 요청을 완료해야 합니다. 이 함수에는 확장 SRB 데이터가 필요하지 않습니다. Storport는 이러한 유형의 재설정을 지원하지만 SCSI 포트는 지원하지 않습니다.
SRB_FUNCTION_POWER(0x24) 요청은 SRBEX_DATA_POWER 구조로 형식이 지정된 전원 확장 요청입니다. 확장 요청 데이터에 대한 오프셋은 SrbExDataOffset[0]에 있습니다.
SRB_FUNCTION_PNP(0x25) 요청은 SRBEX_DATA_PNP 구조로 형식이 지정된 PnP 확장 요청입니다. 확장 요청 데이터에 대한 오프셋은 SrbExDataOffset[0]에 있습니다.
SRB_FUNCTION_DUMP_POINTERS(0x26) 이 함수를 사용하는 요청은 크래시 덤프 데이터를 보유하는 디스크를 제어하는 데 사용되는 Storport 미니포트 드라이버로 전송됩니다. 요청은 충돌 덤프 및 최대 절전 모드를 지원하기 위해 미니포트 드라이버에서 필요한 정보를 수집합니다. MINIPORT_DUMP_POINTERS 구조를 참조하세요. 물리적 미니포트 드라이버는 이 함수를 사용하여 요청을 받으려면 HW_INITIALIZATION_DATA FeatureSupport 멤버에서 STOR_FEATURE_DUMP_POINTERS 플래그를 설정해야 합니다.
SRB_FUNCTION_FREE_DUMP_POINTERS(0x27) 이 함수를 사용하는 요청은 이전 SRB_FUNCTION_DUMP_POINTERS 요청 중에 할당된 리소스를 해제하기 위해 Storport 미니포트 드라이버로 전송됩니다.

SrbFlags

요청에 대한 다양한 매개 변수 및 옵션을 나타냅니다. SrbFlagsSRB_FLAGS_UNSPECIFIED_DIRECTION 설정되고 하위 DMA 어댑터의 미니포트 드라이버가 SRB_FLAGS_DATA_IN 또는SRB_FLAGS_DATA_OUT 업데이트해야 하는 경우를 제외하고 읽기 전용입니다. 이 멤버는 이러한 플래그 중 하나 이상을 설정할 수 있습니다.

플래그 의미
SRB_FLAGS_NO_DATA_TRANSFER(0x00000000) 이 요청을 사용하여 데이터 전송이 없음을 나타냅니다. 이 설정이 설정되면 플래그 SRB_FLAGS_DATA_OUT, SRB_FLAGS_DATA_INSRB_FLAGS_UNSPECIFIED_DIRECTION 명확합니다.
SRB_FLAGS_QUEUE_ACTION_ENABLE(0x00000002) 태그가 지정된 큐 작업을 사용하도록 설정해야 했음을 나타냅니다.
SRB_FLAGS_DISABLE_DISCONNECT(0x00000004) HBA가 이 요청을 처리하는 동안 대상이 SCSI 버스에서 연결을 끊을 수 없도록 허용해서는 안 됨을 나타냅니다.
SRB_FLAGS_DISABLE_SYNCH_TRANSFER(0x00000008) 가능한 경우 HBA가 이 전송 요청에 대해 비동기 I/O를 수행해야 했음을 나타냅니다. 이전에 동기 I/O가 협상된 경우 HBA는 전송을 수행하기 전에 비동기 I/O에 대해 재협상해야 합니다.
SRB_FLAGS_BYPASS_FROZEN_QUEUE(0x00000010) 이 플래그는 드라이버를 최소화하는 것은 관련이 없습니다.
SRB_FLAGS_DISABLE_AUTOSENSE(0x00000020) 요청 감지 정보를 반환해서는 안 됨을 나타냅니다.
SRB_FLAGS_DATA_IN(0x00000040) 데이터가 디바이스에서 시스템으로 전송됨을 나타냅니다.
SRB_FLAGS_DATA_OUT(0x00000080) 데이터가 시스템에서 디바이스로 전송됨을 나타냅니다.
SRB_FLAGS_UNSPECIFIED_DIRECTION(SRB_FLAGS_DATA_IN | SRB_FLAGS_DATA_OUT) ASPI/CAM SCSI 인터페이스와의 이전 버전과의 호환성을 위해 정의된 이 플래그는 이전 플래그가 모두 설정되었기 때문에 전송 방향이 이전 중 하나일 수 있음을 나타냅니다. 이 플래그가 설정된 경우 미니포트 드라이버는 SCSI 버스의 대상에 대한 데이터 단계를 검사하여 전송 방향을 결정해야 합니다.
SRB_FLAGS_NO_QUEUE_FREEZE(0x00000100) 이 플래그는 미니포트 드라이버와 관련이 없습니다.
SRB_FLAGS_ADAPTER_CACHE_ENABLE(0x00000200) 어댑터가 데이터를 캐시할 수 있음을 나타냅니다.
SRB_FLAGS_FREE_SENSE_BUFFER(0x00000400) 포트 또는 미니포트 드라이버가 센스 데이터에 대한 버퍼를 할당했음을 나타냅니다. 이렇게 하면 클래스 드라이버가 데이터를 추출한 후 센스 데이터 버퍼를 해제해야 함을 알 수 있습니다.
SRB_FLAGS_D3_PROCESSING(0x00000800) 요청이 D3 처리의 일부임을 나타냅니다. 런타임 전원 제어를 지원하는 미니포트는 이러한 요청으로 StorPortPoFxActivateComponent 또는 StorPortPoFxIdleComponent 를 호출해서는 안 됩니다.
SRB_FLAGS_SEQUENTIAL_REQUIRED(0x00001000) LBA 범위가 순차 쓰기 필수 영역에 속한다는 것을 나타냅니다.
SRB_FLAGS_IS_ACTIVE(0x00010000) 이 플래그는 미니포트 드라이버와 관련이 없습니다.
SRB_FLAGS_ALLOCATED_FROM_ZONE(0x00020000) 이 플래그는 미니포트 드라이버와 관련이 없으며 새 Windows 클래스 드라이버에는 사용되지 않습니다. Windows 레거시 클래스 드라이버에 대해 이는 SRB가 영역 버퍼에서 할당되었는지 여부를 나타냅니다. 이 플래그가 설정된 경우 클래스 드라이버는 ExInterlockedFreeToZone 을 호출하여 SRB를 해제해야 합니다. 그렇지 않으면 ExFreePool을 호출해야 합니다. 새 클래스 드라이버는 영역 버퍼 대신 lookaside 목록을 사용해야 합니다.
SRB_FLAGS_SGLIST_FROM_POOL(0x00040000) 이 플래그는 미니포트 드라이버와 관련이 없습니다. 클래스 드라이버에 대해 분산/수집 목록에 대한 메모리가 페이지가 없는 풀에서 할당되었음을 나타냅니다. 이 플래그가 설정된 경우 클래스 드라이버는 ExFreePool 을 호출하여 SRB가 완료된 후 메모리를 해제해야 합니다.
SRB_FLAGS_BYPASS_LOCKED_QUEUE(0x00080000) 이 플래그는 미니포트 드라이버와 관련이 없습니다. 포트 드라이버에 이 플래그는 논리 단위 큐가 잠겨 있는지 여부에 관계없이 요청을 처리해야 했음을 나타냅니다. 상위 수준 드라이버는 SRB_FUNCTION_UNLOCK_QUEUE 요청을 보내려면 이 플래그를 설정해야 합니다.
SRB_FLAGS_NO_KEEP_AWAKE(0x00100000) 이 플래그는 미니포트 드라이버와 관련이 없습니다. Windows 클래스 드라이버는 이 플래그를 사용하여 이 요청을 처리하도록 디바이스에 전원을 공급하는 대신 포트 드라이버에 요청 실패를 나타냅니다.
SRB_FLAGS_PORT_DRIVER_ALLOCSENSE(0x00200000) 포트 드라이버는 SRB에 대한 센스 버퍼를 할당해야 합니다.
SRB_FLAGS_PORT_DRIVER_SENSEHASPORT(0x00400000) 사용되지 않습니다. 사용하지 마십시오.
SRB_FLAGS_DONT_START_NEXT_PACKET(0x00800000) 사용되지 않습니다. 사용하지 마십시오.
SRB_FLAGS_PORT_DRIVER_RESERVED(0x0F000000) 시스템에서 사용하도록 예약되었습니다.
SRB_FLAGS_CLASS_DRIVER_RESERVED(0xF0000000) 시스템에서 사용하도록 예약되었습니다.

ReservedUlong2

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

RequestTag

운영 체제별 포트 드라이버에서 할당한 큐 태그 값을 포함합니다. 이 멤버가 태그가 지정된 큐에 사용되는 경우 HBA는 논리 단위(RU)에 대한 요청의 내부 큐를 지원하고 미니포트 드라이버는 이 HBA에 대한 PORT_CONFIGURATION_INFORMATION TaggedQueueing을TRUE 로 설정합니다.

RequestPriority

SRB에 대한 우선 순위 할당입니다. 다음 _STOR_IO_PRIORITY_HINT 값 중 하나입니다.

의미
StorIoPriorityVeryLow (0) 매우 낮은 우선 순위.
StorIoPriorityLow (1) 낮은 우선 순위.
StorIoPriorityNormal(2) 일반 우선 순위입니다.
StorIoPriorityHigh (3) 높은 우선 순위.
StorIoPriorityCritical(4) 중요 우선 순위입니다.

RequestAttribute

SRB_FLAGS_QUEUE_ACTION_ENABLE 플래그를 설정할 때 사용할 태그가 지정된 큐 메시지를 나타냅니다. 값은 SRB_SIMPLE_TAG_REQUEST, SRB_HEAD_OF_QUEUE_TAG_REQUEST 또는 SRB_ORDERED_QUEUE_TAG_REQUEST 중 하나일 수 있습니다.

TimeOutValue

운영 체제별 포트 드라이버에서 시간 초과를 고려하기 전에 요청이 실행될 수 있는 간격(초)을 나타냅니다. 포트 드라이버가 이미 수행하므로 미니포트 드라이버는 요청 시간을 초과할 필요가 없습니다.

DUMMYUNIONNAME

포함된 공용 구조체.

DUMMYUNIONNAME.SystemStatus

SrbStatus 오류 조건(예: SRB_STATUS_INTERNAL_ERROR)에 시스템 오류 상태 정보를 저장하는 데 사용됩니다.

DUMMYUNIONNAME.RequestTagHigh4Bytes

고유 태그 기능을 사용하는 경우 고유 태그의 상위 4바이트를 저장하는 데 사용됩니다.

SystemStatus

SrbStatus 대신 Storport 드라이버에서 요청이 미니포트 드라이버에 전달될 수 없을 때마다 완료된 요청의 상태 보고하는 데 사용됩니다. 이러한 경우 SrbStatusSRB_STATUS_INTERNAL_ERROR 설정됩니다. 이 멤버는 Storport와 클래스 드라이버 간의 통신에만 사용되며 미니포트 드라이버에서 사용하면 안 됩니다.

ZeroGuard1

이 구조를 SCSI_REQUEST_BLOCK 해석하는 드라이버로부터 보호하기 위한 보호 영역입니다. 0으로 설정합니다.

AddressOffset

이 구조체의 시작 부분에서 스토리지 요청 주소의 오프셋입니다. 이 오프셋은 요청에 대한 주소를 포함하는 STOR_ADDRESS 구조를 찾습니다.

NumSrbExData

이 요청에 대한 확장 SRB 데이터 블록의 수입니다.

DataTransferLength

데이터 버퍼의 크기(바이트)를 나타냅니다. 언더런이 발생하는 경우 미니포트 드라이버는 이 멤버를 실제로 전송된 바이트 수로 업데이트해야 합니다.

DataBuffer

데이터 버퍼를 가리킵니다. 미니포트 드라이버가 HBA에 대한 PORT_CONFIGURATION_INFORMATIONMapBuffersTRUE로 설정하지 않는 한 미니포트 드라이버는 이 값을 데이터 포인터로 사용하면 안 됩니다. 그러나 SRB_FUNCTION_IO_CONTROL 요청의 경우 미니포트 드라이버는 MapBuffers 값에 관계없이 이 값을 데이터 포인터로 사용할 수 있습니다.

ZeroGuard2

이 구조를 SCSI_REQUEST_BLOCK 해석하는 드라이버로부터 보호하기 위한 보호 영역입니다. 0으로 설정합니다.

OriginalRequest

이 요청에 대한 IRP를 가리킵니다. 이 멤버는 미니포트 드라이버와 관련이 없습니다.

ClassContext

이 요청에 대한 클래스 드라이버 컨텍스트 데이터를 가리킵니다. 이 멤버는 미니포트 드라이버와 관련이 없습니다.

PortContext

이 요청에 대한 포트 드라이버 컨텍스트 데이터를 가리킵니다. 이 멤버는 미니포트 드라이버와 관련이 없습니다.

MiniportContext

Srb 확장을 가리킵니다. 미니포트 드라이버는 HW_INITIALIZATION_DATA SrbExtensionSize를 0으로 설정한 경우 이 멤버를 사용하지 않아야 합니다. MiniportContext의 메모리는 운영 체제별 포트 드라이버에 의해 초기화되지 않으며, 미니포트 드라이버 결정 데이터는 HBA에서 직접 액세스할 수 있습니다. 해당 물리적 주소는 MiniportContext 포인터를 사용하여 ScsiPortGetPhysicalAddress를 호출하여 가져올 수 있습니다.

NextSrb

이 요청이 적용되는 STORAGE_REQUEST_BLOCK 나타냅니다. 요청의 작은 하위 집합만 두 번째 SRB를 사용합니다(예: SRB_FUNCTION_ABORT_COMMAND).

_STORAGE_REQUEST_BLOCK

SrbExDataOffset[ANYSIZE_ARRAY]

SRB에 대한 확장 데이터 블록의 위치를 지정하는 오프셋 배열입니다. NumSrbExData = 0인 경우 이 배열은 비어 있습니다.

설명

Windows 8 시작하여 확장된 SRB 형식은 STORAGE_REQUEST_BLOCK 구조를 사용하여 지원됩니다. STORAGE_REQUEST_BLOCK SRB 함수를 확장하여 SRB 함수에 대한 확장 데이터 블록을 요청에 추가할 수 있도록 합니다. SCSI_REQUEST_BLOCK 구조를 사용하는 SRB 요청에 대한 지원은 계속됩니다.

NumSrbExData> 0인 경우 SRB 확장 데이터 블록의 오프셋은 SrbExDataOffset 배열에 있습니다. 각 오프셋은 이 구조체의 시작 부분을 기준으로 하며 확장된 데이터 블록을 포함하는 SRBEX_DATA 구조를 가리킵니다.

SRB의 대상 디바이스 주소는 AddressOffset으로 표시된 STOR_ADDRESS 구조에 있습니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 8
머리글 srb.h(Storport.h, Srb.h, Minitape.h 포함)

추가 정보