SCSI_REQUEST_BLOCK 구조체(srb.h)
SCSI_REQUEST_BLOCK 구조체는 SRB 함수와 연결됩니다.
참고
SCSI 포트 드라이버 및 SCSI 미니포트 드라이버 모델은 나중에 변경되거나 사용할 수 없습니다. 대신 Storport 드라이버 및 Storport 미니포트 드라이버 모델을 사용하는 것이 좋습니다.
구문
typedef struct _SCSI_REQUEST_BLOCK {
USHORT Length;
UCHAR Function;
UCHAR SrbStatus;
UCHAR ScsiStatus;
UCHAR PathId;
UCHAR TargetId;
UCHAR Lun;
UCHAR QueueTag;
UCHAR QueueAction;
UCHAR CdbLength;
UCHAR SenseInfoBufferLength;
ULONG SrbFlags;
ULONG DataTransferLength;
ULONG TimeOutValue;
PVOID DataBuffer;
PVOID SenseInfoBuffer;
struct _SCSI_REQUEST_BLOCK *NextSrb;
PVOID OriginalRequest;
PVOID SrbExtension;
union {
ULONG InternalStatus;
ULONG QueueSortKey;
ULONG LinkTimeoutValue;
};
ULONG Reserved;
UCHAR Cdb[16];
} SCSI_REQUEST_BLOCK, *PSCSI_REQUEST_BLOCK;
멤버
Length
이 구조체의 크기(바이트)를 지정합니다.
Function
수행할 작업을 지정합니다. 이 작업은 다음 값 중 하나일 수 있습니다.
값 | 작업 |
---|---|
SRB_FUNCTION_EXECUTE_SCSI(0x00) | SCSI 디바이스 I/O 요청은 대상 논리 단위에서 실행되어야 합니다. |
SRB_FUNCTION_ABORT_COMMAND(0x10) | NextSrb 멤버가 가리키는 요청을 취소하려면 SCSIMESS_ABORT 메시지를 보내야 합니다. 태그가 지정된 큐 요청인 경우 대신 SCSIMESS_ABORT_WITH_TAG 메시지를 사용해야 합니다. 표시된 요청이 완료된 경우 이 요청은 정상적으로 완료되어야 합니다. SRB 함수, PathId, TargetId, Lun 및 NextSrb 멤버만 유효합니다. |
SRB_FUNCTION_RESET_DEVICE(0x13) | ScsiPort 드라이버는 더 이상 이 SRB를 미니포트로 보내지 않습니다. Storport 미니포트 드라이버만 이 SRB를 사용합니다. SCSI 대상 컨트롤러는 SCSIMESS_BUS_DEVICE_RESET 메시지를 사용하여 다시 설정해야 합니다. 미니포트 드라이버는 대상 컨트롤러에 대한 활성 요청을 완료해야 합니다. SRB 함수, TargetId 및 PathId 멤버만 유효합니다. |
SRB_FUNCTION_RESET_LOGICAL_UNIT(0x20) | 가능한 경우 논리 단위를 다시 설정해야 합니다. HBA 미니포트 드라이버는 논리 단위에 대한 활성 요청을 완료해야 합니다. SRB의 함수, PathId, TargetId 및 Lun 멤버만 유효합니다. Storport는 이러한 유형의 재설정을 지원하지만 SCSI 포트는 지원하지 않습니다. |
SRB_FUNCTION_RESET_BUS(0x12) | SCSI 버스는 SCSIMESS_BUS_DEVICE_RESET 메시지를 사용하여 다시 설정해야 합니다. 미니포트 드라이버는 지정된 요청의 시간이 초과되고 시간 제한 요청을 중단하라는 후속 요청도 시간이 초과된 경우에만 이 요청을 받습니다. SRB 함수 및 PathId 멤버만 유효합니다. |
SRB_FUNCTION_TERMINATE_IO(0x14) | NextSrb 멤버가 가리키는 요청을 취소하려면 SCSIMESS_TERMINATE_IO_PROCESS 메시지를 보내야 합니다. 표시된 요청이 이미 완료된 경우 이 요청은 정상적으로 완료되어야 합니다. SRB 함수, PathId, TargetId, Lun 및 NextSrb 멤버만 유효합니다. |
SRB_FUNCTION_RELEASE_RECOVERY(0x11) | SCSIMESS_RELEASE_RECOVERY 메시지를 대상 컨트롤러로 보내야 합니다. SRB 함수, PathId, TargetId 및 Lun 멤버만 유효합니다. |
SRB_FUNCTION_RECEIVE_EVENT(0x03) | HBA는 주소가 지정된 대상에서 비동기 이벤트 알림을 받을 수 있도록 준비해야 합니다. SRB DataBuffer 멤버는 데이터를 배치해야 하는 위치를 나타냅니다. |
SRB_FUNCTION_SHUTDOWN(0x07) | 시스템이 종료되고 있습니다. 이 요청은 HBA에 대한 PORT_CONFIGURATION_INFORMATION CachesData 를 TRUE 로 설정한 경우에만 미니포트 드라이버로 전송됩니다. 이러한 미니포트 드라이버는 모든 시스템 작업이 실제로 중지되기 전에 이러한 알림 중 몇 가지를 수신할 수 있습니다. 그러나 마지막 종료 알림은 마지막 시작 I/O 후에 발생합니다. SRB 함수, PathId, TargetId 및 Lun 멤버만 유효합니다. |
SRB_FUNCTION_FLUSH(0x08) | 미니포트 드라이버는 대상 디바이스에 대해 캐시된 데이터를 플러시해야 합니다. 이 요청은 HBA에 대한 PORT_CONFIGURATION_INFORMATION CachesData 를 TRUE 로 설정한 경우에만 미니포트 드라이버로 전송됩니다. SRB 함수, PathId, TargetId 및 Lun 멤버만 유효합니다. |
SRB_FUNCTION_IO_CONTROL(0x02) | 요청은 전용 HBA를 사용하는 사용자 모드 애플리케이션에서 시작된 I/O 제어 요청입니다. SRB DataBuffer 는 SRB_IO_CONTROL 헤더와 데이터 영역을 가리킵니다. DataBuffer의 값은 MapBuffers 값에 관계없이 드라이버에서 사용할 수 있습니다. 미니포트 드라이버가 초기화할 때 SRB 확장을 요청한 경우 SrbExtension 멤버와 함께 SRB 함수, SrbFlags, TimeOutValue, DataBuffer 및 DataTransferLength 멤버만 유효합니다. 미니포트 드라이버가 이 요청을 지원하도록 애플리케이션 전용 HBA를 제어하는 경우 미니포트 드라이버는 요청을 실행하고 SRB가 완료될 때 RequestComplete 및 NextRequest를 사용하여 ScsiPortNotification에 대한 일반적인 호출 메커니즘을 사용하여 OS 관련 포트 드라이버에 알립니다. |
SRB_FUNCTION_LOCK_QUEUE(0x18) | 일반적으로 전원 요청이 처리되는 동안 포트 드라이버가 특정 논리 단위에 대해 큐에 대기하는 요청을 보유합니다. SRB 길이, 함수, SrbFlags 및 OriginalRequest 멤버만 유효합니다. 큐가 잠기면 SRB_FLAGS_BYPASS_LOCKED_QUEUE SrbFlags ORed가 있는 요청만 처리됩니다. SCSI 미니포트 드라이버는 SRB_FUNCTION_LOCK_QUEUE 요청을 처리하지 않습니다. |
SRB_FUNCTION_UNLOCK_QUEUE(0x19) | 이전에 SRB_FUNCTION_LOCK_QUEUE 잠긴 논리 단위에 대한 포트 드라이버 큐를 해제합니다. 잠금 해제 요청의 SrbFlags 는 SRB_FLAGS_BYPASS_LOCKED_QUEUE ORed여야 합니다. SRB 길이, 함수, SrbFlags 및 OriginalRequest 멤버만 유효합니다. SCSI 미니포트 드라이버는 SRB_FUNCTION_UNLOCK_QUEUE 요청을 처리하지 않습니다. |
SRB_FUNCTION_UNLOCK_QUEUE(0x19) | 이전에 SRB_FUNCTION_LOCK_QUEUE 잠긴 논리 단위에 대한 포트 드라이버 큐를 해제합니다. 잠금 해제 요청의 SrbFlags 는 SRB_FLAGS_BYPASS_LOCKED_QUEUE ORed여야 합니다. SRB 길이, 함수, SrbFlags 및 OriginalRequest 멤버만 유효합니다. SCSI 미니포트 드라이버는 SRB_FUNCTION_UNLOCK_QUEUE 요청을 처리하지 않습니다. |
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 미니포트 드라이버로 전송됩니다. |
SrbStatus
완료된 요청의 상태 반환합니다. 이 멤버는 요청Complete를 사용하여 ScsiPortNotification을 호출하여 요청이 완료되었음을 OS 관련 드라이버에 알리기 전에 미니포트 드라이버에서 설정해야 합니다. 이 멤버의 값은 다음 중 하나일 수 있습니다.
값 | 의미 |
---|---|
SRB_STATUS_PENDING | 요청이 진행 중임을 나타냅니다. OS 관련 포트 드라이버는 SrbStatus 를 이 값으로 초기화합니다. |
SRB_STATUS_SUCCESS | 요청이 성공적으로 완료되었음을 나타냅니다. |
SRB_STATUS_ABORTED | 포트 드라이버의 지시에 따라 요청이 중단되었음을 나타냅니다. 미니포트 드라이버는 성공적인 SRB_FUNCTION_ABORT_COMMAND 요청에 대해 NextSrb에서 이 상태 설정합니다. |
SRB_STATUS_ABORT_FAILED | 요청 중단 시도가 실패했음을 나타냅니다. 지정된 요청을 배치할 수 없는 경우 SRB_FUNCTION_ABORT_COMMAND 요청에 대해 이 상태 반환합니다. |
SRB_STATUS_ERROR | SCSI 버스 상태 오류가 발생해 요청이 완료되었음을 나타냅니다. |
SRB_STATUS_BUSY | 미니포트 드라이버 또는 대상 디바이스가 현재 요청을 수락할 수 없음을 나타냅니다. OS 관련 포트 드라이버는 나중에 요청을 다시 제출합니다. |
SRB_STATUS_INTERNAL_ERROR | SCSI 포트 드라이버가 미니포트 드라이버 또는 대상 디바이스에 요청을 전달할 수 없음을 나타냅니다. 이러한 경우 상태 InternalStatus에 기록됩니다. |
SRB_STATUS_INVALID_REQUEST | 미니포트 드라이버가 지정된 요청을 지원하지 않음을 나타냅니다. |
SRB_STATUS_NO_DEVICE | 디바이스가 응답하지 않았음을 나타냅니다. |
SRB_STATUS_TIMEOUT | 요청 시간이 초과되었음을 나타냅니다. |
SRB_STATUS_SELECTION_TIMEOUT | SCSI 디바이스 선택 시간이 초과되었음을 나타냅니다. |
SRB_STATUS_COMMAND_TIMEOUT | 대상이 시간 제한 내에서 명령을 완료하지 않았음을 나타냅니다. |
SRB_STATUS_MESSAGE_REJECTED | 대상이 메시지를 거부했음을 나타냅니다. 이는 일반적으로 SRB_FUNCTION_TERMINATE_IO 같은 메시지 형식 요청에 대해서만 반환됩니다. |
SRB_STATUS_BUS_RESET | 이 요청이 실행되는 동안 버스 재설정이 발생했음을 나타냅니다. |
SRB_STATUS_PARITY_ERROR | SCSI 버스에서 패리티 오류가 발생했으며 재시도에 실패했음을 나타냅니다. |
SRB_STATUS_REQUEST_SENSE_FAILED | 요청 감지 명령이 실패했음을 나타냅니다. 이는 HBA가 자동 요청 센스를 수행하고 미니포트 드라이버가 이 HBA에 대한 PORT_CONFIGURATION_INFORMATION AutoRequestSense 를 TRUE 로 설정한 경우에만 반환됩니다. |
SRB_STATUS_NO_HBA | HBA가 응답하지 않음을 나타냅니다. |
SRB_STATUS_DATA_OVERRUN | 데이터 오버런 또는 언더런 오류가 발생했음을 나타냅니다. 또한 미니포트 드라이버는 SRB의 DataTransferLength 멤버를 업데이트하여 언더런이 발생할 경우 실제로 전송된 데이터의 양을 나타내야 합니다. |
SRB_STATUS_UNEXPECTED_BUS_FREE | 대상이 예기치 않게 연결 끊김을 나타냅니다. |
SRB_STATUS_PHASE_SEQUENCE_FAILURE | HBA가 잘못된 단계 시퀀스 오류 오류를 감지했음을 나타냅니다. |
SRB_STATUS_REQUEST_FLUSHED | 상태 대한 요청이 중지되었음을 나타냅니다. |
SRB_STATUS_BAD_FUNCTION | SRB 함수 코드가 지원되지 않음을 나타냅니다. |
SRB_STATUS_INVALID_PATH_ID | SRB에 지정된 PathId 가 없음을 나타냅니다. |
SRB_STATUS_INVALID_TARGET_ID | SRB의 TargetID 값이 잘못되었음을 나타냅니다. |
SRB_STATUS_INVALID_LUN | SRB의 Lun 값이 잘못되었음을 나타냅니다. |
SRB_STATUS_ERROR_RECOVERY | SCSI 버스 상태 오류와 함께 요청이 완료되었으며 SCSI INITIATE RECOVERY 메시지가 수신되었음을 나타냅니다. |
SRB_STATUS_AUTOSENSE_VALID | SenseInfoBuffer에 반환된 정보가 유효함을 나타냅니다. |
SRB_STATUS_QUEUE_FROZEN | 미니포트 드라이버는 SrbStatus 멤버를 이 값으로 설정해서는 안 됩니다. Windows 포트 드라이버는 이 값을 설정하여 스토리지 클래스 드라이버에 특정 주변 디바이스에 대한 요청 큐가 고정되었음을 알릴 수 있습니다. |
ScsiStatus
HBA 또는 대상 디바이스에서 반환된 SCSI 상태 반환합니다. 상태 SUCCESS가 아닌 경우 미니포트 드라이버는 SrbStatus 멤버를 SRB_STATUS_ERROR 설정해야 합니다.
PathId
요청에 대한 SCSI 포트 또는 버스를 나타냅니다. 이 값은 0부터 시작합니다.
TargetId
버스의 대상 컨트롤러 또는 디바이스를 나타냅니다.
Lun
디바이스의 논리적 단위 번호를 나타냅니다.
QueueTag
OS 관련 포트 드라이버에서 할당한 큐 태그 값을 포함합니다. 이 멤버가 태그가 지정된 큐에 사용되는 경우 HBA는 RU에 대한 요청의 내부 큐를 지원하고 미니포트 드라이버는 이 HBA에 대한 PORT_CONFIGURATION_INFORMATION TaggedQueueing을TRUE 로 설정합니다.
QueueAction
SRB_FLAGS_QUEUE_ACTION_ENABLE 플래그를 설정할 때 사용할 태그가 지정된 큐 메시지를 나타냅니다. 값은 SCSI 사양에 따라 정의된 SRB_SIMPLE_TAG_REQUEST, SRB_HEAD_OF_QUEUE_TAG_REQUEST 또는 SRB_ORDERED_QUEUE_TAG_REQUEST 중 하나일 수 있습니다.
CdbLength
SCSI-2 이상 명령 설명자 블록의 크기(바이트)를 나타냅니다.
SenseInfoBufferLength
요청 감지 버퍼의 크기(바이트)를 나타냅니다. 언더런이 발생하는 경우 미니포트 드라이버는 이 멤버를 실제로 전송된 바이트 수로 업데이트해야 합니다.
SrbFlags
요청에 대한 다양한 매개 변수 및 옵션을 나타냅니다. SrbFlags 는 SRB_FLAGS_UNSPECIFIED_DIRECTION 설정되고 하위 DMA 어댑터의 미니포트 드라이버가 SRB_FLAGS_DATA_IN 또는 SRB_FLAGS_DATA_OUT 업데이트해야 하는 경우를 제외하고 읽기 전용입니다. 이 멤버는 다음 플래그 중 하나 이상을 설정할 수 있습니다.
플래그 | 의미 |
---|---|
SRB_FLAGS_QUEUE_ACTION_ENABLE | 태그가 지정된 큐 작업을 사용하도록 설정해야 했음을 나타냅니다. |
SRB_FLAGS_DISABLE_AUTOSENSE | 요청 감지 정보를 반환해서는 안 됨을 나타냅니다. |
SRB_FLAGS_DATA_IN | 데이터가 디바이스에서 시스템으로 전송됨을 나타냅니다. |
SRB_FLAGS_DATA_OUT | 데이터가 시스템에서 디바이스로 전송됨을 나타냅니다. |
SRB_FLAGS_UNSPECIFIED_DIRECTION | ASPI/CAM SCSI 인터페이스와의 이전 버전과의 호환성을 위해 정의된 이 플래그는 이전 플래그가 모두 설정되었기 때문에 전송 방향이 이전 중 하나일 수 있음을 나타냅니다. 이 플래그가 설정된 경우 미니포트 드라이버는 SCSI 버스의 대상에 대한 데이터 단계를 검사하여 전송 방향을 결정해야 합니다. HBA가 하위 DMA 디바이스인 경우 이러한 미니포트 드라이버는 scsiPortIoMapTransfer를 호출하기 전에 SRB_FLAGS_DATA_OUT 업데이트하거나 올바른 값으로 SRB_FLAGS_DATA_IN 합니다. |
SRB_FLAGS_NO_DATA_TRANSFER | 이 요청을 사용하여 데이터 전송을 나타내지 않습니다. 이 설정이 설정되면 플래그 SRB_FLAGS_DATA_OUT, SRB_FLAGS_DATA_IN 및 SRB_FLAGS_UNSPECIFIED_DIRECTION 명확합니다. |
SRB_FLAGS_DISABLE_SYNCH_TRANSFER | 가능한 경우 HBA가 이 전송 요청에 대해 비동기 I/O를 수행해야 했음을 나타냅니다. 이전에 동기 I/O를 협상한 경우 HBA는 전송을 수행하기 전에 비동기 I/O에 대해 재협상해야 합니다. |
SRB_FLAGS_DISABLE_DISCONNECT | HBA가 이 요청을 처리하는 동안 대상이 SCSI 버스에서 연결을 끊는 것을 허용해서는 안 됨을 나타냅니다. |
SRB_FLAGS_BYPASS_FROZEN_QUEUE | 미니포트 드라이버와는 관련이 없습니다. |
SRB_FLAGS_NO_QUEUE_FREEZE | 미니포트 드라이버와는 관련이 없습니다. |
SRB_FLAGS_IS_ACTIVE | 미니포트 드라이버와는 관련이 없습니다. |
SRB_FLAGS_ALLOCATED_FROM_ZONE | 미니포트 드라이버와 관련이 없으며 현재 Windows 클래스 드라이버에 사용되지 않습니다. Windows 레거시 클래스 드라이버에 대해 이는 SRB가 영역 버퍼에서 할당되었는지 여부를 나타냅니다. 이 플래그가 설정된 경우 클래스 드라이버는 ExInterlockedFreeToZone 을 호출하여 SRB를 해제해야 합니다. 그렇지 않으면 ExFreePool을 호출해야 합니다. 새 클래스 드라이버는 영역 버퍼 대신 lookaside 목록을 사용해야 합니다. |
SRB_FLAGS_SGLIST_FROM_POOL | 드라이버를 최소화하는 것은 관련이 없습니다. Windows 클래스 드라이버에 대해 분산/수집 목록에 대한 메모리가 페이지가 없는 풀에서 할당되었음을 나타냅니다. 이 플래그가 설정된 경우 클래스 드라이버는 ExFreePool 을 호출하여 SRB가 완료된 후 메모리를 해제해야 합니다. |
SRB_FLAGS_BYPASS_LOCKED_QUEUE | 드라이버를 최소화하는 것은 관련이 없습니다. 포트 드라이버에 대해 이 플래그는 논리 단위 큐가 잠겨 있는지 여부를 요청이 처리되어야 했음을 나타냅니다. 상위 수준 드라이버는 SRB_FUNCTION_UNLOCK_QUEUE 요청을 보내도록 이 플래그를 설정해야 합니다. |
SRB_FLAGS_NO_KEEP_AWAKE | 드라이버를 최소화하는 것은 관련이 없습니다. Windows 클래스 드라이버는 이 플래그를 사용하여 이 요청을 처리하기 위해 디바이스에 전원을 공급하는 대신 포트 드라이버에 유휴 상태를 보고하도록 나타냅니다. |
SRB_FLAGS_FREE_SENSE_BUFFER | 포트 또는 미니포트 드라이버가 센스 데이터에 대한 버퍼를 할당했음을 나타냅니다. 이렇게 하면 클래스 드라이버가 데이터를 추출한 후 센스 데이터 버퍼를 해제해야 함을 알 수 있습니다. |
DataTransferLength
데이터 버퍼의 크기(바이트)를 나타냅니다. 언더런이 발생하는 경우 미니포트 드라이버는 이 멤버를 실제로 전송된 바이트 수로 업데이트해야 합니다.
TimeOutValue
OS 관련 포트 드라이버에서 시간 초과를 고려할 수 있기 전에 요청이 실행될 수 있는 간격(초)을 나타냅니다. 포트 드라이버가 이미 수행하므로 미니포트 드라이버는 요청 시간을 초과할 필요가 없습니다.
DataBuffer
데이터 버퍼를 가리킵니다. 미니포트 드라이버가 HBA에 대한 PORT_CONFIGURATION_INFORMATION MapBuffers 를 TRUE 로 설정하지 않는 한 미니포트 드라이버는 이 값을 데이터 포인터로 사용하면 안 됩니다. 그러나 SRB_FUNCTION_IO_CONTROL 요청의 경우 미니포트 드라이버는 MapBuffers 값에 관계없이 이 값을 데이터 포인터로 사용할 수 있습니다.
SenseInfoBuffer
요청 감지 버퍼를 가리킵니다. 미니포트 드라이버는 CHECK 조건 후에 요청 감지 데이터를 제공할 필요가 없습니다.
NextSrb
이 요청이 적용되는 SCSI_REQUEST_BLOCK 나타냅니다. 요청의 작은 하위 집합만 두 번째 SRB를 사용합니다(예: SRB_FUNCTION_ABORT_COMMAND).
OriginalRequest
이 요청에 대한 IRP를 가리킵니다. 이 멤버는 드라이버를 최소화하는 데 관련이 없습니다.
SrbExtension
Srb 확장을 가리킵니다. 미니포트 드라이버는 SCSI_HW_INITIALIZATION_DATA SrbExtensionSize 를 0으로 설정하는 경우 이 멤버를 사용하지 않아야 합니다. SrbExtension의 메모리는 OS 관련 포트 드라이버에 의해 초기화되지 않으며, 미니포트 드라이버 결정 데이터는 HBA에서 직접 액세스할 수 있습니다. 해당 물리적 주소는 SrbExtension 포인터를 사용하여 ScsiPortGetPhysicalAddress를 호출하여 가져올 수 있습니다.
InternalStatus
SrbStatus 대신 SCSI 포트 드라이버에서 요청이 미니포트 드라이버에 전달될 수 없을 때마다 완료된 요청의 상태 보고하는 데 사용됩니다. 이러한 경우 SrbStatus 는 SRB_STATUS_INTERNAL_ERROR 설정됩니다. 이 멤버는 SCSI 포트와 클래스 드라이버 간의 통신에만 사용되며 미니포트 드라이버에서 사용하면 안 됩니다.
QueueSortKey
대상 디바이스의 유형에 따라 미디어 시작부터 오프셋 또는 0을 지정합니다.
LinkTimeoutValue
링크 시간 제한 값입니다.
Reserved
예약되어 있습니다.
Cdb[16]
대상 디바이스로 보낼 SCSI-2 이상 명령 설명자 블록을 지정합니다.
설명
Windows 스토리지 클래스 및 필터 드라이버는 다음 함수 값이 있는 SRB를 시스템 포트 드라이버로 보낼 수 있습니다.
- 클래스 드라이버가 PathId, TargetId 및 Lun 멤버에 의해 SRB에서 식별된 주변 장치를 지원함을 나타내는 SRB_FUNCTION_CLAIM_DEVICE.
- SRB_ATTACH_DEVICE 클래스 드라이버 위에 계층화된 필터 드라이버가 특정 주변 디바이스에 대한 요청을 먼저 필터 드라이버로 라우팅하려고 함을 나타냅니다.
- 클래스 드라이버가 특정 주변 장치에 대한 클레임을 해제하고 있음을 나타내는 SRB_FUNCTION_RELEASE_DEVICE.
- SRB_FUNCTION_FLUSH_QUEUE 포트 드라이버에서 현재 큐에 대기 중인 요청의 취소를 특정 주변 장치로 요청합니다.
- 포트 드라이버가 고정된 요청 큐를 특정 주변 장치로 해제하도록 요청하는 SRB_FUNCTION_RELEASE_QUEUE.
이전 SRB_FUNCTION_XXX 는 SCSI 미니포트 드라이버로 전송된 SRB에서 설정되지 않습니다. SRB_FUNCTION_REMOVE_DEVICE 이후 버전의 시스템에서 사용하도록 정의됩니다. SCSI 미니포트 드라이버로 전송되는 SRB에서도 설정되지 않습니다. SRB_FUNCTION_WMI_REQUEST SCSI_WMI_REQUEST_BLOCK만 유효합니다. 스토리지 클래스 또는 필터 드라이버는 이를 사용하여 포트 드라이버에 WMI 요청을 보냅니다.
요구 사항
요구 사항 | 값 |
---|---|
헤더 | srb.h(Srb.h, Minitape.h, Storport.h 포함) |