WDF_USB_CONTINUOUS_READER_CONFIG 구조체(wdfusb.h)

[KMDF 및 UMDF에 적용]

WDF_USB_CONTINUOUS_READER_CONFIG 구조에는 프레임워크가 USB 파이프에 대한 연속 판독기를 구성하는 데 사용하는 정보가 포함되어 있습니다.

구문

typedef struct _WDF_USB_CONTINUOUS_READER_CONFIG {
  ULONG                                 Size;
  size_t                                TransferLength;
  size_t                                HeaderLength;
  size_t                                TrailerLength;
  UCHAR                                 NumPendingReads;
  PWDF_OBJECT_ATTRIBUTES                BufferAttributes;
  PFN_WDF_USB_READER_COMPLETION_ROUTINE EvtUsbTargetPipeReadComplete;
  WDFCONTEXT                            EvtUsbTargetPipeReadCompleteContext;
  PFN_WDF_USB_READERS_FAILED            EvtUsbTargetPipeReadersFailed;
} WDF_USB_CONTINUOUS_READER_CONFIG, *PWDF_USB_CONTINUOUS_READER_CONFIG;

멤버

Size

이 구조체의 크기(바이트)입니다.

TransferLength

디바이스에서 수신할 수 있는 데이터의 최대 길이(바이트)입니다.

HeaderLength

디바이스에서 데이터를 수신하는 버퍼에 대한 오프셋(바이트)입니다. 프레임워크는 오프셋 값부터 시작하여 디바이스의 데이터를 읽기 버퍼에 저장합니다. 즉, 이 공간은 프레임워크가 디바이스의 데이터를 저장하는 TransferLength 크기의 공간보다 우선합니다.

TrailerLength

후행 버퍼 공간의 길이(바이트)입니다. 이 공간은 프레임워크가 디바이스의 데이터를 저장하는 TransferLength 크기의 공간을 따릅니다.

NumPendingReads

프레임워크가 I/O 대상에서 데이터를 수신하기 위해 큐에 대기하는 읽기 요청 수입니다. 이 값이 0이면 프레임워크는 기본 읽기 요청 수를 사용합니다. 지정된 값이 허용되는 최대값보다 크면 프레임워크는 허용되는 최대값을 사용합니다. NumPendingReads 멤버에 대한 자세한 내용은 다음 설명 섹션을 참조하세요.

BufferAttributes

프레임워크가 각 읽기 요청에 대해 만드는 프레임워크 메모리 개체의 개체 특성을 지정하는 WDF_OBJECT_ATTRIBUTES 구조체입니다. 이 멤버는 NULL일 수 있습니다. WDF_OBJECT_ATTRIBUTES 구조체의 ParentObject 멤버를 설정할 수 없습니다.

EvtUsbTargetPipeReadComplete

드라이버의 EvtUsbTargetPipeReadComplete 콜백 함수에 대한 포인터입니다.

EvtUsbTargetPipeReadCompleteContext

프레임워크가 드라이버의 EvtUsbTargetPipeReadComplete 콜백 함수에 전달하는 드라이버 정의 컨텍스트 정보에 대한 형식화되지 않은 포인터입니다.

EvtUsbTargetPipeReadersFailed

드라이버의 EvtUsbTargetPipeReadersFailed 콜백 함수에 대한 포인터입니다. 이 포인터는 선택 사항이며 NULL일 수 있습니다. 이 매개 변수에 대한 자세한 내용은 WdfUsbTargetPipeConfigContinuousReader의 설명 섹션을 참조하세요.

설명

WDF_USB_CONTINUOUS_READER_CONFIG 구조체는 WdfUsbTargetPipeConfigContinuousReader 메서드에 대한 입력으로 사용됩니다.

WDF_USB_CONTINUOUS_READER_CONFIG 구조를 초기화하려면 드라이버가 WDF_USB_CONTINUOUS_READER_CONFIG_INIT 호출해야 합니다.

NumPendingReads 멤버에 대한 값을 선택할 때 다음 지침을 사용합니다.

  • 드라이버가 프레임워크의 기본값을 사용하도록 하려면 NumPendingReads 를 0으로 설정합니다.

    기본값은 1보다 크며 많은 프로세서 구성에서 많은 디바이스에 대해 합리적으로 좋은 성능을 제공하도록 결정되었습니다.

  • 드라이버가 데이터를 전달하는 정확한 순서로 데이터 버퍼를 받는 것이 중요한 경우 NumPendingReads 를 1로 설정합니다.
  • NumPendingReads를 철저한 성능 측정을 기반으로 디바이스의 성능 요구 사항을 충족하는 숫자로 설정합니다.

    먼저 NumPendingReads에 대한 기본값(0)으로 디바이스를 테스트합니다. 테스트에는 다양한 형식과 프로세서 수, 다른 USB 호스트 컨트롤러 및 USB 구성을 포함한 다양한 하드웨어 구성이 포함되어야 합니다. 그런 다음 동일한 테스트를 사용하여 더 높은 값으로 실험할 수 있습니다. 더 높은 값이 필요할 수 있는 드라이버는 인터럽트 속도가 높은 디바이스에 대한 드라이버로, 인터럽트 서비스가 신속하게 수행되지 않으면 데이터가 손실될 수 있습니다.

NumPendingReads 값이 너무 크면 시스템 성능이 저하될 수 있습니다. 성능 요구 사항을 충족하는 가장 낮은 값을 사용해야 합니다. 일반적으로 3 또는 4보다 높은 값은 데이터 처리량을 개선하지 않습니다. 그러나 값이 높을수록 고주파 파이프에서 대기 시간 또는 데이터 누락 가능성을 줄일 수 있습니다.

요구 사항

요구 사항
최소 KMDF 버전 1.0
최소 UMDF 버전 2.0
머리글 wdfusb.h(Wdfusb.h 포함)

추가 정보

EvtUsbTargetPipeReadComplete

EvtUsbTargetPipeReadersFailed

WDF_OBJECT_ATTRIBUTES

WDF_USB_CONTINUOUS_READER_CONFIG_INIT

WdfUsbTargetPipeConfigContinuousReader