다음을 통해 공유


EVT_SPB_CONTROLLER_READ 콜백 함수(spbcx.h)

SPB 컨트롤러 드라이버의 EvtSpbControllerIoRead 이벤트 콜백 함수는 지정된 대상 디바이스에서 읽기 요청과 함께 제공되는 버퍼로 데이터를 읽습니다.

통사론

EVT_SPB_CONTROLLER_READ EvtSpbControllerRead;

void EvtSpbControllerRead(
  [in] WDFDEVICE Controller,
  [in] SPBTARGET Target,
  [in] SPBREQUEST Request,
  [in] size_t Length
)
{...}

매개 변수

[in] Controller

SPB 컨트롤러를 나타내는 프레임워크 디바이스 개체 대한 WDFDEVICE 핸들입니다.

[in] Target

이 I/O 요청에 대한 대상에 대한 SPBTARGET 핸들입니다. 대상은 버스에 연결된 주변 장치 또는 포트입니다. SPB 프레임워크 확장(SpbCx)은 이전에 대상에 대한 연결을 연 EvtSpbTargetConnect 콜백의 대상에 이 핸들을 할당했습니다.

[in] Request

I/O 요청에 대한 SPBREQUEST 핸들입니다. SPB 컨트롤러 드라이버는 요청된 작업을 수행하거나 오류 상태를 반환하여 이 요청을 완료해야 합니다. 자세한 내용은 설명참조하세요.

[in] Length

대상 디바이스에서 읽을 바이트 수입니다.

반환 값

없음

발언

SpbCx는 SPB 컨트롤러에 대한 I/O 큐를 관리합니다. SpbCx는 SPB 컨트롤러의 클라이언트(주변 드라이버)가 버스에 연결된 대상 디바이스에 IRP_MJ_READ 요청을 보낼 때 SPB 컨트롤러 드라이버의 EvtSpbControllerIoRead 콜백 함수를 호출합니다. Request 매개 변수 값은 이 요청을 캡슐화하는 핸들입니다.

EvtSpbControllerIoRead 콜백은 상태 값을 반환하지 않습니다. 대신 SPB 컨트롤러 드라이버는 I/O 요청의 완료 상태에서 읽기 작업의 상태를 나타냅니다.

EvtSpbControllerIoRead 콜백은 비동기적입니다. 즉, 콜백 함수는 요청된 읽기 작업을 시작한 다음 작업이 완료되는 것을 기다리지 않고 반환해야 합니다. 나중에 SPB 컨트롤러 드라이버는 인터럽트 DPC 또는 타이머 DPC 중에 읽기 요청을 완료합니다.

읽기 작업이 완전히 완료되면 SPB 컨트롤러 드라이버는 완료 상태를 STATUS_SUCCESS 설정해야 합니다. 대상 디바이스가 요청된 일부 데이터를 제공할 수 있지만 일부만 제공할 수 있음을 나타내는 경우 SPB 컨트롤러 드라이버는 사용 가능한 만큼의 데이터를 검색하고, 검색된 데이터 바이트 수를 지정하고, I/O 요청의 완료 상태를 STATUS_SUCCESS 설정해야 합니다. 이러한 부분적으로 완료된 읽기 작업은 SPI 또는 2C 버스에서수 없지만 다른 유형의 버스에서 발생할 수 있습니다.

라인 노이즈, 컨트롤러 하드웨어 오류 또는 드라이버 오류로 인해 읽기 작업이 실패하는 경우 SPB 컨트롤러 드라이버는 I/O 요청의 완료 상태를 적절한 오류 코드로 설정해야 합니다. 모든 버스가 대상 디바이스에서 전송 오류 또는 부분적으로 완료된 전송을 보고하는 메커니즘을 제공하는 것은 아니며, 일부 컨트롤러가 이러한 조건을 감지할 수 있는 것은 아닙니다.

EvtSpbControllerIoRead 콜백 함수를 등록하려면 SpbDeviceInitialize 메서드를 호출합니다.

예제

EvtSpbControllerIoRead 콜백 함수를 정의하려면 먼저 정의하는 콜백 함수의 형식을 식별하는 함수 선언을 제공해야 합니다. Windows는 드라이버에 대한 콜백 함수 형식 집합을 제공합니다. 콜백 함수 형식을 사용하여 함수를 선언하면 드라이버 , SDV(정적 드라이버 검증 도구) 및 기타 확인 도구에 대한 코드 분석을데 도움이 되며 Windows 운영 체제용 드라이버를 작성하기 위한 요구 사항입니다.

예를 들어 MyEvtSpbControllerIoRead명명된 EvtSpbControllerIoRead 콜백 함수를 정의하려면 다음 코드 예제와 같이 EVT_SPB_CONTROLLER_READ 함수 형식을 사용합니다.

EVT_SPB_CONTROLLER_READ  MyEvtSpbControllerIoRead;

그런 다음 다음과 같이 콜백 함수를 구현합니다.

_Use_decl_annotations_
VOID
  MyEvtSpbControllerIoRead(
    WDFDEVICE Controller,
    SPBTARGET Target,
    SPBREQUEST Request,
    size_t Length
    )
{ ... }

EVT_SPB_CONTROLLER_READ 함수 형식은 Spbcx.h 헤더 파일에 정의됩니다. 코드 분석 도구를 실행할 때 오류를 보다 정확하게 식별하려면 함수 정의에 Use_decl_annotations 주석을 추가해야 합니다. Use_decl_annotations 주석은 헤더 파일의 EVT_SPB_CONTROLLER_READ 함수 형식에 적용되는 주석이 사용되는지 확인합니다. 함수 선언 요구 사항에 대한 자세한 내용은 KMDF 드라이버함수 역할 형식을 사용하여 함수 선언을 참조하세요. Use_decl_annotations대한 자세한 내용은 함수 동작 주석을참조하세요.

요구 사항

요구
지원되는 최소 클라이언트 Windows 8부터 지원됩니다.
대상 플랫폼 바탕 화면
헤더 spbcx.h
IRQL IRQL <= DISPATCH_LEVEL 호출합니다.

참고 항목