다음을 통해 공유


WdfUsbTargetPipeConfigContinuousReader 함수(wdfusb.h)

[KMDF 및 UMDF에 적용]

WdfUsbTargetPipeConfigContinuousReader 메서드는 지정된 USB 파이프에서 지속적으로 읽도록 프레임워크를 구성합니다.

구문

NTSTATUS WdfUsbTargetPipeConfigContinuousReader(
  [in] WDFUSBPIPE                        Pipe,
  [in] PWDF_USB_CONTINUOUS_READER_CONFIG Config
);

매개 변수

[in] Pipe

WdfUsbInterfaceGetConfiguredPipe를 호출하여 가져온 프레임워크 파이프 개체에 대한 핸들입니다.

[in] Config

호출자가 할당한 WDF_USB_CONTINUOUS_READER_CONFIG 구조체에 대한 포인터입니다.

반환 값

WdfUsbTargetPipeConfigContinuousReader는 작업이 성공하면 STATUS_SUCCESS 반환합니다. 그렇지 않으면 이 메서드는 다음 값 중 하나를 반환할 수 있습니다.

반환 코드 설명
STATUS_INFO_LENGTH_MISMATCH
Config 매개 변수가 지정한 WDF_USB_CONTINUOUS_READER_CONFIG 구조체의 크기가 잘못되었습니다.
STATUS_INVALID_PARAMETER
잘못된 매개 변수가 감지되었습니다.
STATUS_INSUFFICIENT_RESOURCES
메모리가 부족했습니다.
STATUS_INVALID_DEVICE_REQUEST
파이프의 형식이 잘못되었습니다.
STATUS_INTEGER_OVERFLOW
Config 매개 변수가 너무 크거나 유효하지 않은 크기를 지정한 WDF_USB_CONTINUOUS_READER_CONFIG 구조체의 HeaderLength, TransferLength 또는 TrailerLength 멤버입니다.
STATUS_INVALID_BUFFER_SIZE
읽기 버퍼의 크기가 파이프의 최대 패킷 크기의 배수가 아닙니다.
 

WdfUsbTargetPipeConfigContinuousReader 메서드가 반환할 수 있는 다른 반환 값 목록은 프레임워크 개체 만들기 오류를 참조하세요.

이 메서드는 다른 NTSTATUS 값을 반환할 수도 있습니다.

드라이버가 잘못된 개체 핸들을 제공하는 경우 버그 검사 발생합니다.

설명

대량 파이프 또는 인터럽트 파이프에 대한 연속 판독기를 구성할 수 있습니다. 파이프에는 입력 엔드포인트가 있어야 합니다.

WdfUsbTargetPipeConfigContinuousReader를 호출하여 연속 판독기를 구성한 후 드라이버는 WdfIoTargetStart를 호출하여 판독기를 시작해야 합니다. 판독기를 중지하려면 드라이버가 WdfIoTargetStop을 호출해야 합니다.

일반적으로 드라이버는 EvtDevicePrepareHardware 콜백 함수 내에서 WdfUsbTargetPipeConfigContinuousReader를 호출합니다. 드라이버는 EvtDeviceD0Entry 콜백 함수 내에서 WdfIoTargetStart를 호출해야 하며 EvtDeviceD0Exit 콜백 함수 내에서 WdfIoTargetStop을 호출해야 합니다.

파이프의 I/O 대상이 읽기 요청을 성공적으로 완료할 때마다 프레임워크는 드라이버의 EvtUsbTargetPipeReadComplete 콜백 함수를 호출합니다. I/O 대상이 요청을 처리하는 동안 오류를 보고하는 경우 프레임워크는 모든 읽기 요청이 완료된 후 드라이버의 EvtUsbTargetPipeReadersFailed 콜백 함수를 호출합니다. 따라서 EvtUsbTargetPipeReadersFailed 콜백 함수가 실행되는 동안 에는 EvtUsbTargetPipeReadComplete 콜백 함수가 호출되지 않습니다.

선택적 EvtUsbTargetPipeReadersFailed 콜백을 제공하지 않으면 프레임워크는 다른 읽기 요청을 전송하여 실패한 읽기 시도에 응답합니다. 따라서 버스가 읽기를 수락하지 않는 상태에 있는 경우 프레임워크는 실패한 읽기에서 복구하기 위해 지속적으로 새 요청을 보냅니다.

드라이버가 WdfUsbTargetPipeConfigContinuousReader를 호출한 후에는 연속 판독기가 중지되지 않는 한 드라이버가 WdfUsbTargetPipeReadSynchronously 또는 WdfRequestSend 를 사용하여 파이프에 I/O 요청을 보낼 수 없습니다. 판독기를 중지하기 위해 드라이버는 WdfIoTargetStop을 호출하거나 EvtUsbTargetPipeReadersFailed 콜백 함수에서 FALSE를 반환할 수 있습니다. 판독기가 중지되는 동안 드라이버가 WdfUsbTargetPipeReadSynchronously를 호출하는 경우 RequestOptions 매개 변수의 Flags 멤버에서 WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE 플래그를 설정해야 합니다. 그렇지 않으면 대상이 다시 시작될 때까지 요청이 보류됩니다.

프레임워크는 내부 URB에서 USBD_SHORT_TRANSFER_OK 플래그를 설정합니다. 이 플래그를 설정하면 데이터 전송의 마지막 패킷이 최대 패킷 크기보다 작을 수 있습니다.

WdfUsbTargetPipeConfigContinuousReader 메서드 및 USB I/O 대상에 대한 자세한 내용은 파이프에서 읽기를 참조하세요.

예제

다음 코드 예제에서는 WDF_USB_CONTINUOUS_READER_CONFIG 구조를 초기화하고 WdfUsbTargetPipeConfigContinuousReader를 호출합니다.

WDF_USB_CONTINUOUS_READER_CONFIG  contReaderConfig;
NTSTATUS  status;

WDF_USB_CONTINUOUS_READER_CONFIG_INIT(
                                      &contReaderConfig,
                                      OsrFxEvtUsbInterruptPipeReadComplete,
                                      DeviceContext,
                                      sizeof(UCHAR)
                                      );
status = WdfUsbTargetPipeConfigContinuousReader(
                                      Pipe,
                                      &contReaderConfig
                                      );

요구 사항

요구 사항
대상 플랫폼 유니버설
최소 KMDF 버전 1.0
최소 UMDF 버전 2.0
머리글 wdfusb.h(Wdfusb.h 포함)
라이브러리 Wdf01000.sys(KMDF); WUDFx02000.dll(UMDF)
IRQL <=DISPATCH_LEVEL
DDI 규정 준수 규칙 DriverCreate(kmdf), FailD0EntryIoTargetState(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), UsbContReader(kmdf), UsbKmdfIrql(kmdf), UsbKmdfIrql2(kmdf), UsbKmdfIrqlExplicit(kmdf)

추가 정보

EvtDeviceD0Entry

EvtDeviceD0Exit

EvtDevicePrepareHardware

EvtUsbTargetPipeReadComplete

EvtUsbTargetPipeReadersFailed

Urb

WDF_USB_CONTINUOUS_READER_CONFIG

WDF_USB_CONTINUOUS_READER_CONFIG_INIT

WdfIoTargetStart

WdfIoTargetStop

WdfUsbInterfaceGetConfiguredPipe