다음을 통해 공유


SPB_REQUEST_SEQUENCE_POSITION 열거형(spbcx.h)

SPB_REQUEST_SEQUENCE_POSITION 열거형은 I/O 전송 시퀀스대한 전송 목록에서 I/O 요청의 위치를 나타냅니다.

통사론

typedef enum _SPB_REQUEST_SEQUENCE_POSITION {
  SpbRequestSequencePositionInvalid,
  SpbRequestSequencePositionSingle,
  SpbRequestSequencePositionFirst,
  SpbRequestSequencePositionContinue,
  SpbRequestSequencePositionLast,
  SpbRequestSequencePositionMax
} SPB_REQUEST_SEQUENCE_POSITION, *PSPB_REQUEST_SEQUENCE_POSITION;

상수

 
SpbRequestSequencePositionInvalid
내부 전용입니다.
SpbRequestSequencePositionSingle
단일 전송 I/O 요청입니다. 이 요청은 시퀀스의 일부가 아닌 읽기 또는 쓰기(IRP_MJ_READ 또는 IRP_MJ_WRITE) 요청이거나 단일 전송으로 구성된 시퀀스에 대한 IOCTL_SPB_EXECUTE_SEQUENCE I/O 컨트롤 요청입니다.

컨트롤러는 전송을 수행하기 전에 대상을 선택하고 전송이 완료된 후 대상을 해제해야 합니다.
SpbRequestSequencePositionFirst
시퀀스의 첫 번째 I/O 요청입니다. 이 요청은 시퀀스의 시작을 알리는 잠금(IOCTL_SPB_LOCK_CONTROLLER) I/O 제어 요청 바로 뒤에 오는 읽기 또는 쓰기 요청입니다.

컨트롤러는 이 전송을 수행하기 전에 대상을 선택해야 하며, 전송이 완료된 후에도 대상은 선택된 상태로 유지되어야 합니다.
SpbRequestSequencePositionContinue
시퀀스 중간에 있는 I/O 요청입니다. 이 요청은 시퀀스의 첫 번째 또는 마지막 전송이 아니고 읽기 또는 쓰기 요청입니다.

경우에 따라 SPB 프레임워크 확장(SpbCx)은 마지막 전송을 식별할 수 없으며 spbRequestSequencePositionLast 대신 마지막 전송을 SpbRequestSequencePositionContinue 레이블을 지정합니다. 자세한 내용은 다음 설명 섹션을 참조하세요.

컨트롤러는 이 전송을 시작하기 전에 대상을 이미 선택해야 하며, 전송이 완료된 후에도 대상은 선택된 상태로 유지되어야 합니다.
SpbRequestSequencePositionLast
시퀀스의 마지막 I/O 요청입니다. 이 요청은 시퀀스의 끝을 알리는 잠금 해제(IOCTL_SPB_UNLOCK_CONTROLLER) I/O 제어 요청 바로 앞에 오는 읽기 또는 쓰기 요청입니다.

경우에 따라 SpbCx는 마지막 전송을 식별할 수 없으며 spbRequestSequencePositionLast 대신 마지막 전송을 SpbRequestSequencePositionContinue 레이블을 지정합니다. 자세한 내용은 다음 설명 섹션을 참조하세요.

컨트롤러는 이 전송을 시작하기 전에 대상을 이미 선택해야 하며 전송이 완료된 후 대상을 해제해야 합니다.
SpbRequestSequencePositionMax
내부 전용입니다.

발언

SPB 컨트롤러의 클라이언트(주변 드라이버)는 버스의 대상 디바이스에 일련의 읽기 및 쓰기 요청을 전송하여 I/O 전송 시퀀스를 수행할 수 있습니다. 계열의 각 읽기 또는 쓰기 요청은 시퀀스에 대한 전송 목록의 위치를 차지합니다. SPB_REQUEST_SEQUENCE_POSITION 열거형의 값은 이 목록에서 읽기 및 쓰기 요청의 상대 위치를 나타냅니다.

SpbRequestGetParameters 메서드는 I/O 요청에서 SPB 관련 매개 변수 값을 검색하여 SPB_REQUEST_PARAMETERS 구조에 씁니다. 이러한 매개 변수에는 I/O 요청이 포함된 I/O 전송 시퀀스의 위치를 나타내는 SPB_REQUEST_SEQUENCE_POSITION 열거형 값이 포함되어 있습니다.

SpbRequestGetParameters 시퀀스의 일부가 아닌 I/O 요청의 위치 값을 검색하기 위해 호출되는 경우 이 메서드는 요청에 적절한 SPB_REQUEST_SEQUENCE_POSITION 열거형 값을 할당합니다.

읽기 및 쓰기 요청의 경우 위치 값은 SpbRequestSequencePositionSingle, SpbRequestSequencePositionFirst, SpbRequestSequencePositionContinue또는 SpbRequestSequencePositionLast값 중 하나로 설정됩니다.

클라이언트가 시퀀스의 일부가 아닌 간단한 읽기 또는 쓰기(IRP_MJ_READ 또는 IRP_MJ_WRITE) 요청을 보내는 경우 위치 값은 SpbRequestSequencePositionSingle로 설정됩니다.

클라이언트가 시퀀스의 시작을 알리는 잠금(IOCTL_SPB_LOCK_CONTROLLER) 요청을 보내는 경우 시퀀스의 첫 번째 전송(읽기 또는 쓰기 요청)에 대한 위치 값은 spbRequestSequencePositionFirst , 시퀀스의 나머지 전송에 대한 위치 값은 spbRequestSequencePositionContinue . 이 경우 SpbCx는 SpbRequestSequencePositionLast 마지막 전송에 할당할 수 없습니다. 클라이언트가 시퀀스를 종료하는 잠금 해제(IOCTL_SPB_UNLOCK_CONTROLLER) 요청을 보낼 때까지 클라이언트가 마지막 읽기 또는 쓰기 요청을 보냈는지 알 수 없기 때문입니다.

잠금 요청의 경우 위치 값은 spbRequestSequencePositionFirst 설정됩니다. 잠금 해제 요청의 경우 위치 값이 spbRequestSequencePositionLast 설정됩니다.

일부 컨트롤러는 대상 디바이스에서 동시에 읽고 쓰는 전체 이중 버스 전송과 같은 특수 작업을 지원할 수 있습니다. 클라이언트는 컨트롤러를 잠그고 SpbCx가 SPB 컨트롤러 드라이버의 EvtSpbControllerIoOther 콜백 함수에 전달하는 일련의 사용자 지정 I/O 요청을 전송하여 사용자 지정 시퀀스 작업을 수행할 수 있습니다. 이 경우 시퀀스의 첫 번째 사용자 지정 I/O 요청에 대한 위치 값은 spbRequestSequencePositionFirst , 시퀀스의 나머지 사용자 지정 I/O 요청에 대한 위치 값은 spbRequestSequencePositionContinue . 클라이언트가 컨트롤러의 잠금을 해제하면 시퀀스가 종료됩니다. EvtSpbControllerIoOther 콜백 함수가 시퀀스의 일부가 아닌 사용자 지정 I/O 요청을 수신하는 경우 이 요청의 위치 값은 spbRequestSequencePositionSingle .

SpbRequestSequencePositionLast위치 값의 경우 SPB_REQUEST_PARAMETERS 구조의 Length 멤버는 대상이 단순히 해제되고 I/O 데이터를 전송하지 않아야 함을 나타내기 위해 0일 수 있습니다(또는 컨트롤러가 클록을 실행하지 않고 디바이스를 해제할 수 없는 경우 0바이트 전송이 발생함을 나타내기 위해).

SpbRequestSequencePositionContinueSpbRequestSequencePositionLast위치 값의 경우 전송 방향이 이전 전송에서 변경되었을 수 있으며 SPB 컨트롤러 드라이버는 버스에서 이 가능한 방향 변경을 나타내야 할 수 있습니다(예: I2C 컨트롤러가 새 START 조건을 발급함). 전송 방향에 대한 자세한 내용은 SPB_TRANSFER_DIRECTION참조하세요.

요구 사항

요구
지원되는 최소 클라이언트 Windows 8부터 지원됩니다.
헤더 spbcx.h(Spb.h 포함)

참고 항목